Saya selalu bertanya-tanya bagaimana cara menerapkan metode lincah benar-benar dalam perangkat lunak sistem tertanam besar yang kompleks (100 + insinyur). Pengembangan firmware memiliki beberapa karakteristik unik yang membuatnya sulit dilakukan dengan gesit (mis. Perangkat keras tidak tersedia hingga akhir siklus dev; Setelah produk dirilis, tidak dapat dengan mudah memperbarui firmware; dll ...)
Norma dalam pengembangan semacam ini adalah dokumentasi yang tebal dan ulasan sejawat yang melelahkan. Anda tidak bisa mendapatkan perbaikan kode sederhana seperti mengganti nama variabel tanpa 2-3 tanda tangan. (Saya sedikit melebih-lebihkan tetapi ini tipikal. Selain itu, banyak orang yang mengambil jalan pintas dan Manajer Proyek bahkan menyetujui mereka terutama dalam menghadapi tenggat waktu pasar yang keras.)
Saya ingin mendengar kiat atau pedoman tentang cara mengadopsi metodologi lincah untuk proyek pengembangan firmware.
sumber
Jawaban:
Saya pikir dua teknik adalah kuncinya:
Kembangkan simulator lengkap atau lingkungan uji untuk perangkat keras, sehingga Anda dapat mengembangkan perangkat lunak seolah-olah Anda memiliki perangkat keras nyata. Jangan berhemat atau mengambil jalan pintas di sini: mengembangkan simulator yang baik akan membuahkan hasil.
Tulis banyak unit test melawan simulator.
Setelah Anda menyelesaikan semua ini, dan orang-orang yakin bahwa simulator dan unit test akan memberikan gagasan yang akurat tentang bagaimana hal-hal akan bekerja dengan perangkat keras, akan lebih mudah untuk mengadopsi teknik gesit lainnya (iterasi pendek, refactoring tanpa henti, dll.) .
sumber
Dampak Agile pada proses pengembangan yang melibatkan banyak pemasok dapat dibandingkan dengan apa yang terjadi ketika perusahaan menggunakan JIT.
Untuk memberikan JIT, masing-masing pemasok perusahaan harus mengirimkan JIT.
Demikian juga, jika Anda ingin produk kompleks dikembangkan menurut metodologi Agile, setiap subkelompok dalam rantai harus dapat bekerja dengan cara itu.
Dalam hal pengembangan 'incremental' (alias Tracer Bullets 15 tahun yang lalu), ini akan menyiratkan bahwa 'inti' dilepaskan segera kepada pengemudi, dan bahwa driver dasar tersedia untuk integrator, dan bahwa GUI akan dikembangkan, beit dengan satu tombol dan kotak edit, pada saat yang sama.
Bagian yang sulit adalah meyakinkan para perancang perangkat keras, yang berasal dari disiplin teknik berpikir-muka yang kuat, untuk bergabung dengan masyarakat bermain-main kami.
Bagian tersulit kedua adalah menemukan cara untuk memungkinkan pengembangan tambahan di dunia di mana cetak perangkat keras akan dipesan 3 minggu sebelumnya. Saya sedang memikirkan emulator, FPGA ada di sini. Saya bukan seorang pria perangkat keras sekalipun.
Jika Anda ingin menjatuhkan pengembangan perangkat keras tambahan, Anda bisa, seperti halnya di perbatasan rantai JIT, meramalkan mekanisme penyangga yang memungkinkan tim Agile untuk maju.
Jangan buta: Agile juga harus berurusan dengan proses yang berat! Jangan meminta tim Agile untuk sekarang 'refactor' basis kode Java mereka ke Python di sprint berikutnya. Hanya karena beberapa bagian benar-benar stabil sehingga kita bisa menari gerakan Agile kita di atasnya.
sumber
Agile Manifesto: http://agilemanifesto.org/
"Individu dan interaksi atas proses dan alat"
"Bekerja dengan perangkat lunak melalui dokumentasi yang komprehensif"
Prototipe dan membangun paku teknologi awal dan sering.
Pecahkan masalah nyata pengguna alih-alih terus membangun kepatuhan yang rewel terhadap suatu spesifikasi. Ini berarti solusi evolusioner . Gagasan bahwa kita harus membangunnya dengan benar karena kita tidak pernah dapat membangunnya lagi adalah salah. Rencanakan iterasi. Jadikan itu bagian dari strategi pemasaran dan peluncuran.
"Kolaborasi pelanggan atas negosiasi kontrak"
Proses kontrol perubahan yang sangat rumit hanyalah cara untuk mengatakan "tidak" kepada pelanggan.
Mengunci semua persyaratan di depan dan kemudian memaksakan kontrol perubahan adalah cara lain untuk mengatakan "tidak".
Jika Anda sudah merencanakan lebih dari satu rilis, maka Anda dapat lebih mudah menunda persyaratan untuk rilis berikutnya. Setelah pelanggan memiliki perangkat dengan perangkat lunak yang disematkan, rilis berikutnya akan berubah dalam prioritasnya.
"Menanggapi perubahan setelah mengikuti rencana"
Metodologi yang benar-benar gesit (yaitu scrum) mungkin tidak masuk akal untuk sistem tertanam.
Namun, manifesto Agile menyediakan cara untuk memungkinkan perubahan menjadi mungkin tanpa membiarkan kekacauan sederhana.
sumber
Masalah saya dengan scrum dalam embedded system adalah, ada banyak tugas yang harus dilakukan, terutama pada tahap awal, yang tidak dapat dibuktikan. Kami mulai dengan papan dev, tanpa OS, tanpa layar, tanpa komunikasi serial, dll. Kami tidak memiliki layar untuk 6 sprint.
4 sprint pertama adalah: Memulai dan menjalankan RTOS Membuat tugas Menulis driver jaringan dan serial Menulis rutin interupsi untuk tombol, comms, dll. Menulis kelas dan metode basis data primer Menulis menu debug serial
Sebagian besar tugas ini tidak cocok untuk cerita pengguna. Bahkan, satu-satunya antarmuka ke seluruh sistem adalah menu debug serial, dibangun di sprint 3 sehingga tidak ada yang menunjukkan di akhir sprint. Bahkan menu serial dimaksudkan untuk penggunaan internal dan bukan pengguna akhir.
Tentu saja, setiap kelas yang kami tulis memiliki tes unit terkait dan kami menggunakan kerangka uji unit untuk mengotomatisasi pelaksanaan semua tes.
Kami akhirnya menulis frasa "cerita pengguna" seperti, "Sebagai pengembang ...", yang tidak saya sukai tetapi dalam menggunakan Proses Target (www.targetprocess.com), tidak ada konsep item jaminan simpanan yang tugas atau tugas.
Saya ingin mendengar bagaimana orang lain menangani situasi ini.
sumber