Bagaimana memecahkan masalah secara efisien atau menguji kode baru ketika pemasangan perangkat keras untuk mereproduksi bug sulit atau tidak mungkin diperoleh?

30

Saya bekerja di sebuah perusahaan menengah (karyawan 150an, ~ 10 tim teknik ukuran), dan sebagian besar proyek saya melibatkan interfacing dengan peralatan lab (osiloskop, penganalisa spektrum optik, dll) untuk keperluan aplikasi pengujian semi-otomatis. Saya telah mengalami beberapa skenario berbeda di mana saya tidak dapat memecahkan masalah secara efisien atau menguji kode baru karena saya tidak lagi atau tidak pernah memiliki pengaturan perangkat keras yang tersedia untuk saya.

Contoh 1: Pengaturan di mana 10-20 proses "burn-in" dijalankan secara independen menggunakan sensor tipe bangku teratas - saya dapat memperoleh satu sensor seperti itu untuk pengujian dan kadang-kadang dapat mencuri satu detik untuk mensimulasikan semua aspek antarmuka untuk beberapa perangkat (mencari, menghubungkan, streaming, dll).

Akhirnya bug muncul (dan akhirnya berada di firmware perangkat & driver) yang sangat sulit untuk mereproduksi secara akurat dengan hanya satu unit, tetapi mencapai tingkat "show stopper" ketika 10-20 perangkat ini digunakan secara bersamaan. Ini masih belum terpecahkan dan sedang berlangsung.

Contoh 2: Tes yang membutuhkan penganalisa spektrum optik mahal sebagai komponen intinya. Perangkat ini cukup tua, warisan menurut pabrikan yang diakuisisi oleh perusahaan yang lebih besar dan pada dasarnya dibubarkan, dan satu-satunya dokumentasinya adalah dokumen yang panjang lebar (dan tidak informatif) yang sepertinya diterjemahkan dengan buruk. Selama pengembangan awal saya bisa menyimpan perangkat di meja saya, tapi sekarang sudah terpasang, baik secara fisik dan sesuai jadwal selama tes multi-minggu 24/7.

Ketika bug muncul terkait atau tidak terkait dengan perangkat, saya sering harus melalui masalah pengujian kode eksternal ke aplikasi dan memasangnya, atau menulis kode secara membabi buta dan mencoba memeras dalam beberapa waktu pengujian di antara berjalan, karena banyak logika program membutuhkan OSA dan perangkat keras uji lainnya untuk berada di tempatnya.

Saya kira pertanyaan saya adalah bagaimana saya harus mendekati ini? Saya berpotensi menghabiskan waktu mengembangkan simulator perangkat, tetapi memperkirakan bahwa perkiraan pengembangan akan menggelembungkannya lebih daripada yang mungkin paling dihargai oleh kebanyakan orang. Mungkin tidak mereproduksi semua masalah dengan baik, dan sangat jarang untuk melihat peralatan yang sama digunakan dua kali di sini. Saya bisa menjadi lebih baik dalam pengujian unit ... dll ... Saya juga bisa keras tentang masalah ini dan membuat orang lain mengerti bahwa penundaan sementara akan diperlukan, tidak lebih dari sakit kepala untuk Penelitian dan Pengembangan tetapi biasanya dianggap sebagai lelucon. ketika dilemparkan ke manufaktur.

plast1k
sumber
5
simulator perangkat (atau antarmuka yang dapat diejek) akan membayar sendiri hanya dalam kenyamanan
ratchet freak
21
@ratchetfreak - sebagai orang yang menghabiskan hari-harinya mensimulasikan perangkat (saya bekerja pada simulator perangkat medis penuh waktu), izinkan saya meyakinkan Anda bahwa bahkan simulasi kesetiaan rendah terhadap peralatan orang lain dapat menjadi SANGAT sulit dilakukan, tergantung pada koneksi, protokol, dan tipe data yang terlibat. Jika peralatan uji yang digunakan OP sama dengan peralatan yang harus saya tangani, mungkin perlu berhari-hari atau berminggu-minggu untuk mencarinya hanya untuk mengetahui apa yang benar-benar dilakukan oleh benda berdarah (dibandingkan dengan apa yang dikatakan oleh spesifikasi). Jadi sama sekali tidak ada kesimpulan terdahulu bahwa simulator sepadan.
Michael Kohne

Jawaban:

35

Manajemen memahami bahwa pengembangan dan pemeliharaan perangkat lunak akan membutuhkan waktu lebih lama bila Anda tidak memiliki akses penuh ke perangkat keras uji. Anda perlu memperhitungkan ini saat melakukan perkiraan Anda. Bagian dari kriteria penerimaan untuk menempatkan perangkat lunak Anda ke dalam produksi adalah bahwa Anda memiliki cara untuk memelihara perangkat lunak dalam sebagian besar keadaan tanpa menghentikan produksi. Jika Anda berlatih TDD, ini seharusnya terjadi secara alami.

Saya dulu menulis perangkat lunak untuk pesawat $ 60 juta. Jelas, diperlukan tingkat keandalan yang tinggi, dan mereka enggan memberikan setiap pengembang satu per satu untuk meja mereka. Kami pada dasarnya memiliki 5 level lingkungan pengujian, dengan lebih banyak perangkat keras nyata di setiap level, hingga satu pesawat penuh. Saya memperkirakan 95% dari perangkat lunak kami dapat dikembangkan dan didebug hanya dengan emulator dan unit test. 95% dari fitur yang tersisa dapat dikerjakan di tingkat selanjutnya, dan seterusnya.

Cobalah untuk mengatur tingkat lingkungan pengujian yang serupa untuk Anda sendiri. Anda tidak dapat berharap untuk tidak pernah memerlukan akses ke perangkat keras yang nyata, tetapi jika Anda telah mengaturnya sehingga Anda tidak dapat bekerja pada GUI perangkat lunak Anda tanpa perangkat keras yang tersedia, Anda membuang-buang waktu yang berharga pada sumber daya yang mahal (tidak untuk menyebutkan Anda memiliki beberapa masalah sambungan dengan arsitektur Anda). Pertimbangkan bahwa pengembang lain kemungkinan memiliki masalah yang sama dengan Anda. Saya akan bertanya kepada vendor perangkat keras apakah mereka sudah memiliki emulator atau sumber daya pengujian lain yang tersedia.

Anda juga perlu mengubah pola pikir Anda jika Anda hanya memiliki akses terbatas ke perangkat keras. Daripada mencoba men-debug aplikasi Anda dengan cara serial normal, Anda sering perlu menulis kode khusus untuk tujuan mengumpulkan informasi secepat mungkin.

Sebagai contoh, mungkin Anda memiliki bug dan Anda dapat memikirkan 10 kemungkinan penyebabnya. Jika satu-satunya waktu Anda dapat menggunakan mesin adalah 15 menit saat operator sedang istirahat, tulis Short, Self Contained, Correct (Compilable), Contoh yang memicu bug dan menulis 10 tes otomatis menggunakan SSCCE untuk menguji teori Anda dan mencatat banyak data. Setelah itu kembali ke meja Anda, Anda dapat mengambil selama Anda perlu menyaring data untuk upaya Anda berikutnya. Idenya adalah untuk memaksimalkan utilitas waktu terbatas Anda dengan perangkat keras.

Karl Bielefeldt
sumber
Menerima jawaban ini karena itu yang paling lengkap - dan saya pikir keseimbangan yang baik dari "buat manajemen sadar" dengan "ubah praktik Anda". Saya pikir menghabiskan beberapa upaya pada tingkat decoupling yang lebih baik dan beberapa tingkat simulator perangkat keras harus bermanfaat dan saya dapat menunjukkan ini dalam perkiraan saya. Saya juga terutama menyukai tips untuk memeras dalam beberapa tes fitur lengkap cepat yang menangkap banyak data saat debugging - terima kasih.
plast1k
14
Saya berhenti membaca setelah "Manajemen mengerti"
PlasmaHH
1
"Enggan untuk memberikan setiap pengembang satu untuk meja mereka". Ironisnya, Anda mungkin bisa membengkokkan jumlah yang cukup untuk membuktikan bahwa memberi setiap pengembang pesawat mereka sendiri $ 60 juta untuk dikerjakan akan lebih murah daripada total biaya kumulatif bencana penerbangan!
Tn. JavaScript
15

Anda mencoba memecahkan masalah yang bukan milik Anda untuk dipecahkan.

Manajemen perlu memprioritaskan akses ke peralatan. Itu mungkin berarti Anda berakhir dengan akses yang lebih besar, tetapi itu juga berarti Anda berakhir dengan lebih sedikit.

Sajikan tantangan yang Anda miliki dalam format objektif kepada tim manajemen Anda dan minta mereka untuk bimbingan. Presentasi Anda akan jauh lebih kuat jika Anda berkolaborasi dengan yang lain yang juga membutuhkan akses, sehingga Anda semua dapat mempresentasikan kasus Anda pada saat yang sama.

Dari sana, perusahaan (manajemen) harus memprioritaskan siapa yang mendapatkan akses dan kapan. Ini adalah keputusan bisnis yang harus mereka buat karena (kurangnya) ketersediaan sumber daya berdampak pada pengembangan bisnis.


sumber
4
Satu hal yang mungkin membantu dalam berbicara dengan manajemen adalah memprediksikan jadwal Anda (atau tonggak pencapaian Anda) pada akses peralatan. Anda hanya dapat melakukan begitu banyak tanpa perangkat keras di depan Anda, dan jika Anda memperjelas bahwa perkiraan tersebut berasal dari saat mereka memberikannya kepada Anda, maka manajemen dapat membuat keputusan dengan pengetahuan penuh.
Michael Kohne
4

Anda secara efektif mengkode buta.

Jika manajemen tidak akan membayar untuk perangkat uji, maka ada kemungkinan bug tinggi, atau bahkan pengembangannya memakan waktu lebih lama daripada jika Anda memiliki perangkat nyata untuk digunakan.

Biaya perangkat tidak perlu sepenuhnya dialokasikan ke siklus "pengembangan". Mungkin mereka dapat diputar untuk penggunaan produksi, atau sebagai cadangan. Mungkinkah mereka dijual kembali tangan kedua di tempat lain?

Coba dan biaya tahap perbaikan bug, baik dalam waktu dan uang dan tunjukkan biaya keseluruhan kepada tim / perusahaan Anda.

ozz
sumber
4

Berdebat dengan bos Anda jauh lebih mudah ketika Anda memiliki beberapa angka, atau setidaknya beberapa pro dan kontra di tangan, jadi saran saya adalah mencoba membuat analisis biaya vs benfit. Gagasan kasarnya seperti ini:

  • berapa banyak upaya pengembangan yang Anda harapkan untuk menulis simulator perangkat? (Perhatikan bahwa simulator perangkat tidak dapat mengganti perangkat keras asli 100%, terutama ketika perangkat keras memiliki beberapa kebiasaan yang tidak terduga).

  • berapa banyak upaya pengujian / debugging yang Anda harapkan tanpa alat seperti itu? Termasuk biaya untuk pekerja laboratorium Anda karena Anda harus memblokir perangkat keras untuk tujuan pengujian. Sertakan juga biaya untuk waktu sistem tidak dapat digunakan karena bug dan Anda mengalami kesulitan untuk menemukan akar penyebabnya.

  • berapa banyak perangkat keras tambahan untuk biaya pengujian?

  • berapa lama waktu yang Anda harapkan Anda akan perlu memblokir perangkat keras untuk tujuan pengujian?

Tentu saja, kenyataan mungkin tidak sesederhana itu, dan ada banyak variabel yang tidak diketahui dalam persamaan ini, tetapi cobalah untuk membuat beberapa estimasi dan di mana Anda tidak yakin, tanyakan orang lain dari lingkungan Anda.

Presentasikan hasilnya kepada manajemen Anda, diskusikan alternatifnya dan kemudian biarkan mereka yang memutuskan.

Doc Brown
sumber
Saya pikir maksud Anda tidak bisa di sini. Perhatikan bahwa simulator perangkat jarang dapat mengganti perangkat keras asli 100%, terutama ketika perangkat keras memiliki beberapa kebiasaan yang tidak terduga
Rémi
@ Rémi: mungkin "jarang bisa" bukan urutan kata yang biasa dalam bahasa Inggris? FWIW, saya mengubah jawaban saya untuk membuat ini tidak berarti, terima kasih atas jawabannya.
Doc Brown
Saya tidak berbicara bahasa Inggris tetapi membaca aneh. terima kasih
Rémi