Maintainability adalah kepentingan utama pengembangan perangkat lunak profesional. Memang, pemeliharaan hampir selalu merupakan bagian terpanjang dari siklus hidup perangkat lunak, karena berlangsung sejak rilis proyek hingga pada dasarnya akhir zaman.
Selain itu, proyek yang sedang dalam pemeliharaan merupakan sebagian besar dari keseluruhan jumlah proyek. Menurut http://www.vlegaci.com/298/interesting-statistics-%E2%80%93-number-of-programmers-in-maintenance-vs-development/ , proporsi proyek yang sedang dalam pemeliharaan sekitar 2 / 3.
Saya baru-baru ini menemukan pertanyaan ini , di mana pria itu terlihat cukup terkejut menemukan bahwa pekerjaannya terutama tentang pemeliharaan. Saya kemudian memutuskan untuk membuka diskusi (bahasa Prancis) di situs utama komunitas profesional pengembangan perangkat lunak Perancis ( http://www.developpez.com/ ). Diskusi tersebut berjudul "Apakah siswa cukup terlatih untuk menghadapi kenyataan pengembangan perangkat lunak profesional?" dan terutama tentang rawatan . Telah ditunjukkan bahwa, setidaknya di Prancis, orang tidak cukup siap untuk menghadapi pemeliharaan dalam kedua aspek itu:
- pertahankan kode yang ada
- buat kode yang bisa dipelihara
Pertanyaan saya di sini menggemakan diskusi ini dan bertujuan untuk menemukan cara yang baik untuk mengajarkan pemeliharaan.
- Bagaimana kita bisa mengajarkan pemeliharaan?
- Latihan apa yang akan Anda sarankan?
- Jika Anda telah terlatih dengan baik tentang pemeliharaan, jenis kursus apa yang Anda ambil?
[sunting] Setelah beberapa kesalahpahaman, saya pikir saya harus mengklarifikasi pertanyaan saya. Sebagai pemimpin proyek dan pengembang perangkat lunak, saya sering bekerja dengan peserta pelatihan atau siswa yang baru lulus. Saya pernah baru lulus sendiri. Masalahnya adalah bahwa siswa biasanya tidak terbiasa dengan prinsip-prinsip seperti PADAT yang meningkatkan pemeliharaan proyek. Kami sering berakhir dengan kesulitan penting untuk membuat proyek berkembang (rawatan rendah). Apa yang saya cari di sini adalah contoh akademis konkret dari pengajaran yang sukses tentang pentingnya pemeliharaan dan bagaimana membuat kode yang lebih baik mengenai hal ini; atau kemungkinan saran untuk meningkatkan cara siswa dilatih.
sumber
Jawaban:
Itu masalah latihan.
Cara paling mudah untuk mempraktikkannya dalam cara yang terkendali yang dapat saya pikirkan adalah dengan mensimulasikan proyek pemeliharaan tipikal sebagai berikut.
Dapatkan beberapa proyek ( Proyek A ) yang dilakukan dengan baik dan memperkenalkan beberapa masalah di atasnya: menyuntikkan beberapa bug, kumpulan kode duplikat dan mati yang baik, letakkan beberapa fitur, tes unit, dan dokumentasi di sana-sini dll. Anda bahkan mungkin memiliki dedicated nama untuk itu, seperti Project A - versi rusak .
Buat pelacak masalah dan isi dengan permintaan yang sesuai dengan kerusakan tertentu yang Anda buat. Tetapkan aturan dan praktik dasar untuk proses pengembangan - VCS berkomitmen, ulasan kode, QA dll - pertimbangkan mengambil apa yang Anda bisa dari daftar periksa yang disediakan dalam The Joel Test .
Perbaiki bug, tambahkan tes unit yang hilang, dokumentasi dan fitur.
Refactor.
Pemeliharaan / peningkatan proyek asli untuk digunakan oleh siswa tahun depan
- Proyek A versi 2.0 dan Proyek A - versi 2.0 rusak , masing-masing.
Dengan meningkatkan versi yang rusak maksud saya membuat kerusakan edukatif yang lebih baik untuk itu. :)
Dari praktik-praktik yang disebutkan di atas, berikan perhatian khusus pada ulasan kode . Ini mungkin cara yang paling efektif untuk memastikan bahwa kode mudah dipelihara, seperti yang ditunjukkan misalnya dengan jawaban teratas dalam pertanyaan terkait .
sumber
Penafian: Saya baru saja mendapat gelar CS. Saya bukan guru.
Ini mungkin terdengar jelas, tetapi saya pikir cara terbaik untuk mengajarkan pemeliharaan kode adalah dengan meminta siswa melakukan pemeliharaan kode. Inilah yang akan saya lakukan:
Idenya adalah agar siswa tidak hanya bekerja dengan kode orang lain, tetapi juga membuat mereka mengembangkan apresiasi terhadap kode yang dapat dipelihara yang diharapkan akan meningkatkan keterampilan desain mereka.
sumber
Kemampu-rawatan adalah kebajikan, bukan keterampilan. Ada banyak jalan untuk membuat proyek yang dapat dipelihara, tetapi tidak ada formula yang dijamin untuk menghasilkannya.
Jika Anda menghargai kebajikan seperti kebaikan dan kemurahan hati, Anda mencari cara untuk mempraktikkan hal yang sama dalam kehidupan sehari-hari Anda. Ini sama dengan rawatan: jika Anda dan organisasi Anda menghargai rawatan, Anda akan menyimpannya di belakang pikiran Anda saat merancang dan mengimplementasikan proyek Anda. Ini akan menjadi alasan yang sah untuk menghabiskan sedikit waktu membangun sesuatu karena Anda tahu bahwa pemeliharaan dihargai. Sebaliknya, menghabiskan waktu ekstra demi keberlanjutan dalam suatu organisasi yang tidak menghargai itu tidak dianjurkan.
Jika Anda ingin mengajar orang untuk membuat hal-hal dapat dipertahankan, Anda harus mulai dengan menjelaskan bahwa organisasi Anda menghargai pemeliharaan. Tentukan dalam persyaratan untuk proyek Anda. Jadikan salah satu kriteria untuk ulasan kode yang berhasil. Singkatnya, jadikan pemeliharaan sebagai bagian dari budaya Anda .
Selanjutnya, berkeinginan untuk mencurahkan beberapa sumber daya untuk meningkatkan pemeliharaan dalam proyek Anda yang ada. Identifikasi bagian-bagian dari proyek di mana bug terus muncul, atau di mana memperbaiki bug atau membuat perubahan sangat sulit dan membutuhkan waktu lama, dan mendesain ulang atau refactor untuk memfasilitasi pemeliharaan.
Akhirnya, indoktrinasi pengembang baru ke dalam budaya pemeliharaan Anda dengan menugaskan mereka ke tim yang sudah mempraktikkannya setiap hari. Tidak ada cara yang lebih baik untuk membantu seseorang mengadopsi nilai selain memberi mereka banyak contoh dan panduan yang baik.
sumber
Saya tidak suka istilah Maintainable dalam kaitannya dengan pengembangan perangkat lunak. Kenyataannya adalah bahwa semua perangkat lunak dapat dipelihara karena dapat dikenakan pekerjaan pemeliharaan, sehingga masalah sebenarnya adalah apakah perangkat lunak itu mahal atau tidak mahal untuk dipelihara, secara relatif. Saya tahu ini kedengarannya seperti pernyataan yang sangat menyolok di awal jawaban, namun poin saya akan menjadi lebih jelas dalam sekejap.
Masalah dengan gelar IT yang utama dalam pengembangan perangkat lunak adalah bahwa mereka benar-benar hanya mengajarkan siswa minimum yang paling tidak perlu diketahui siswa tentang menulis perangkat lunak. Keterampilan dan pengetahuan profesional diperoleh melalui pembelajaran yang dilakukan dalam beberapa tahun pertama setelahnyamemenuhi syarat untuk gelar. Ini adalah ketika seorang lulusan mulai bekerja pada proyek-proyek yang benar-benar penting bagi pelanggan, dalam lingkungan di mana ada tekanan besar untuk melakukan, dan harapannya adalah untuk menciptakan produk dengan standar profesional. Sayangnya, banyak perusahaan tidak mendorong budaya di mana standar profesional dalam perangkat lunak dipertahankan, dan mereka berakhir dengan proyek-proyek yang ternyata mahal untuk dikembangkan dan dipelihara sebagai hasilnya. Sayangnya untuk lulusan kami, mereka belajar banyak kebiasaan buruk di lingkungan seperti itu di tahun-tahun awal karir mereka, dan itu bisa lama sebelum mereka belajar bagaimana mengatasi kebiasaan-kebiasaan ini ... jika memang ada.
Anda akan lebih baik mengajar siswa cara menulis kode yang bersih, dan bagaimana mengidentifikasi masalah dalam perangkat lunak yang biasanya berakhir dengan hutang teknis . Lihatlah ke buku-buku tentang Clean Code , Refactoring , dan Pengembangan Perangkat Lunak Bersandar sebagai titik awal sebagai tempat untuk memulai, dan ajarkan siswa untuk menulis tes unit sebelum kode implementasi untuk memastikan ada cakupan tes yang tinggi. Ajari siswa untuk mengenali pola yang digandakan dan berulang dalam kode mereka, dan bagaimana cara memperbaiki kode untuk menghapus duplikasi tersebut. Bantu siswa untuk memahami dan menerapkan prinsip-prinsip seperti SOLID dan KERING. Yang paling penting, singkirkan ide ini bahwa kemampuan untuk mempertahankan kode adalah sesuatu yang dilakukan hanya berdasarkan pada desain dan implementasi kode, dan sebagai gantinya menanamkan rasa keahlian dan kualitas dalam produksi perangkat lunak sejak awal, berusaha untuk perbaiki kode yang diterapkan untuk meminimalkan dampak utang teknis dan dengan demikian menjaga biaya pemeliharaan perangkat lunak seminimal mungkin.
sumber
Saya pikir cara terbaik untuk mempelajari keterampilan semacam ini adalah dengan melakukan tinjauan kode dan memasangkan program. Selama ulasan kode, staf yang berpengalaman dapat menunjukkan bagaimana membuat kode lebih dapat dikelola (biasanya dengan membuatnya lebih mudah dibaca) dan membenarkan mengapa pilihan tertentu dapat membuat kode lebih dapat dikelola.
Pemrograman pasangan adalah cara yang lebih baik untuk mengajarkan hal semacam ini, karena memberikan pengalaman langsung kepada staf yang kurang berpengalaman dalam memelihara kode dengan seseorang yang sudah tahu bagaimana melakukannya dengan baik.
Ada juga beberapa buku hebat yang bisa Anda baca tentang menulis kode yang bersih dan dapat dikelola. Kode Bersih muncul di pikiran.
Sulit untuk mendapatkan pengalaman ini melalui akademisi karena siswa jarang memodifikasi basis kode besar. Sebagian besar keterampilan ini akan berasal dari pembelajaran di tempat kerja, dan ulasan kode dan pemrograman pasangan benar-benar dapat memfasilitasi pembelajaran ini.
sumber
Kode yang baik = Kurang pemeliharaan dan Mudah untuk meningkatkan / menambah fitur.
Kode buruk = mimpi buruk pemeliharaan
Pada dasarnya kita harus menyampaikan poin kepada siswa bahwa "setiap kali ada kode jelek dalam suatu proyek, pengembang baru yang akan bergabung dengan perusahaan karena penulis asli kode akan menderita dan bagaimana perangkat lunak terpengaruh . "
Jadi salah satu cara terbaik untuk mengajarkan siswa tentang pemeliharaan perangkat lunak adalah dengan menunjukkan contoh kode baik dan buruk dan meminta mereka untuk menambahkan fitur dan kemudian mengajar mereka bahwa menulis kode yang baik tidak hanya untuk kepuasan diri tetapi untuk membuat mudah bagi orang-orang yang akan mempertahankan kode.
Olahraga:
1) Memiliki kode buruk pra-tertulis (misalnya) kode duplikat, metode mengatakan "untuk menghitung pembayaran hipotek" ditulis di 9 tempat dalam suatu proyek.
Mintalah siswa untuk meningkatkan fitur untuk "menambahkan biaya tambahan 1,2% ke semua pembayaran hipotek".
Sekarang siswa akan melihat rasa sakit menemukan dan memperbaiki kode di semua 9 tempat. Ada banyak kemungkinan ia tidak dapat menemukan semua 9 tempat "pembayaran hipotek" dihitung.
2) Sekarang tunjukkan kode Baik yang memiliki metode ini yang menghitung pembayaran hipotek di satu-satunya tempat . tunjukkan kepada siswa bahwa betapa mudahnya meningkatkan kode yang ditulis dengan baik dan jelaskan kepadanya bagaimana hal itu meningkatkan pemeliharaan kode / proyek.
BTW, saya menyukai pendekatan Anda untuk mengekspos para siswa pada pemeliharaan perangkat lunak.
sumber
@mattmattj: Karena ada BANYAK jawaban dan tautan yang saya poskan memiliki beberapa petunjuk yang baik, saya akan menambahkan sesuatu yang mudah-mudahan bukan pengulangan dari jawaban yang sudah diposting.
Pertama, seseorang HARUS mendefinisikan "pemeliharaan" - tidak ada definisi tunggal yang diterima oleh semua - mirip dengan arsitektur perangkat lunak. Jadi pilih salah satu yang Anda rasa paling penting, semuanya mencakup dan nyatakan dalam 3-4 baris maksimal. Kemudian Anda dapat berbicara tentang beberapa metrik seperti - waktu untuk mengingat kembali / memahami kode Anda sendiri (atau orang lain), jumlah WTFs per menit / jam dll. Biarkan itu tetap ringan (lucu) - yang akan membuat mereka lebih mudah menerima apa yang Anda miliki untuk mengatakan setelah itu.
Beberapa latihan (mungkin terdengar sedikit tumpang tindih dengan beberapa respons, maafkan itu)
Di sinilah Anda meletakkan fondasi kemampuan pemeliharaan - setiap baris kode yang dimodifikasi / diperbarui akan menghabiskan uang perusahaan. Semakin mudah membaca dan mengingat kode semakin baik / cepat modifikasi yang akan membantu mengurangi waktu ke pasar. Sangat penting dalam ruang teknologi serba cepat saat ini. Pemeliharaan adalah kunci untuk evolusi sistem yang efisien.
Penting untuk memahami perbedaan antara pengembangan greenfield dan brownfield - tidak setiap proyek atau sistem akan dibuat dari awal (agak sulit untuk menemukan atau menjadi bagian dari proyek "dari awal"). Menjelaskan bahwa bidang itu "secara inheren" berwarna coklat dan Anda harus menghabiskan waktu membentuknya saat Anda pergi bersama dengan fase akhirnya ketika itu tumbuh "di luar kendali" (hanya mungkin bila arus terlalu banyak dan 'tidak dapat dipelihara'). Semakin cepat mereka menerima itu semakin baik. Ini sulit karena pemrograman secara inheren kreatif tetapi meningkatkan kode orang lain tidak dianggap seperti itu - putar sekitar. Kreativitas ada kemampuan untuk memahami kode dan kemudian menerapkan kreativitas "Anda" untuk meningkatkannya - jika dipelihara dengan lebih baik, Anda akan dapat lebih meningkatkannya secara kreatif di masa mendatang.
Jangan ragu untuk merujuk pada analogi spageti di tautan di atas ... semoga ini membantu memukul beberapa poin. Jawaban lain membantu mengisi kekosongan dan harus membantu Anda dengan pengajaran! Semoga berhasil!
sumber