Semua orang selalu mengatakan bahwa mereka dapat mengalahkan "10 baris per pengembang per hari" dari "Mythical Man Month", dan memulai sebuah proyek, saya biasanya bisa mendapatkan beberapa ratus baris dalam sehari.
Tetapi di perusahaan saya sebelumnya, semua pengembang sangat tajam, tetapi itu adalah proyek besar, lebih dari satu juta baris kode, dengan persyaratan sertifikasi yang sangat berat, dan berinteraksi dengan beberapa juta proyek lini lainnya. Pada titik tertentu, sebagai latihan dengan rasa ingin tahu, saya merencanakan garis kode dalam produk pengiriman dalam grup saya (tidak termasuk alat yang kami kembangkan), dan tentu saja, secara bertahap, ia mencapai sekitar 12 baris penambahan bersih per pengembang per hari. Tidak menghitung perubahan, kode pengujian, atau fakta bahwa pengembang tidak bekerja pada kode proyek aktual setiap hari.
Bagaimana kabar orang lain? Dan persyaratan seperti apa yang Anda hadapi (saya bayangkan itu faktornya)?
Jawaban:
Saya pikir jumlah baris yang ditambahkan sangat tergantung pada keadaan proyek, tingkat penambahan proyek baru akan jauh lebih tinggi daripada tingkat proyek awal.
Pekerjaannya berbeda antara keduanya - pada proyek besar Anda biasanya menghabiskan sebagian besar waktu mencari hubungan antara bagian-bagian, dan hanya sedikit untuk benar-benar mengubah / menambah. sedangkan dalam proyek baru - Anda kebanyakan menulis ... sampai cukup besar dan nilainya menurun.
sumber
Pada salah satu proyek saya saat ini, dalam beberapa modul, saya bangga telah berkontribusi menghitung garis negatif ke basis kode. Mengidentifikasi bidang kode mana yang mengalami kompleksitas yang tidak perlu dan dapat disederhanakan dengan desain yang lebih bersih dan jelas adalah keterampilan yang berguna.
Tentu saja beberapa masalah pada dasarnya kompleks dan membutuhkan solusi yang kompleks, tetapi pada sebagian besar proyek besar yang persyaratannya tidak jelas atau berubah cenderung memiliki solusi yang terlalu rumit dengan jumlah masalah per baris yang lebih tinggi.
Diberi masalah untuk dipecahkan, saya lebih suka solusi yang mengurangi jumlah baris. Tentu saja, pada awal proyek kecil saya dapat menghasilkan lebih dari sepuluh baris kode per hari, tetapi saya cenderung tidak memikirkan jumlah kode yang saya tulis, hanya apa yang dilakukannya dan seberapa baik kerjanya. Saya tentu tidak akan bertujuan untuk mengalahkan sepuluh baris per hari atau menganggapnya sebagai pencapaian untuk melakukannya.
sumber
Saya suka kutipan ini:
Beberapa kali Anda berkontribusi lebih banyak dengan menghapus kode daripada menambahkan
sumber
Anda harus berhenti menggunakan metrik ini, sebagian besar tidak ada artinya. Kohesi, kopling, dan kompleksitas adalah metrik yang lebih penting daripada baris kode.
sumber
Saya satu-satunya pengembang penuh waktu di perusahaan kami dan telah menulis 500.000 baris kode OCaml dan F # selama 7 tahun terakhir, yang setara dengan sekitar 200 baris kode per hari. Namun, sebagian besar kode itu adalah contoh tutorial yang terdiri dari ratusan proyek terpisah yang masing-masing panjangnya beberapa ratus baris. Juga, ada banyak duplikasi antara OCaml dan F #. Kami tidak memelihara basis kode internal yang lebih besar dari 50kLOC.
Selain mengembangkan dan memelihara perangkat lunak kami sendiri, saya juga telah berkonsultasi untuk banyak klien di industri selama 7 tahun terakhir. Untuk klien pertama , saya menulis 2.000 baris OCaml selama 3 bulan yaitu 20 baris kode per hari. Untuk klien berikutnya , empat dari kami menulis kompiler yang menghasilkan jutaan baris kode C / C ++ / Python / Java / OCaml serta dokumentasi dalam 6 bulan yang merupakan 2.000 baris kode per hari per pengembang. Untuk klien lain, saya mengganti 50kLOC dari C ++ dengan 6kLOC dari F # dalam 6 bulan yaitu -352 baris kode per hari. Untuk klien lain , saya menulis ulang 15kLOC OCaml di F # yang akan memiliki ukuran yang sama sehingga 0 baris kode per hari.
Untuk klien kami saat ini , saya akan mengganti 1.600.000 baris kode C ++ dan Mathematica dengan ~ 160kLOC dari F # dalam 1 tahun (dengan menulis kompiler dipesan lebih dahulu) yang akan menjadi -6.000 baris kode per hari. Ini akan menjadi proyek saya yang paling berhasil hingga saat ini dan akan menghemat jutaan dolar bagi klien kami dalam biaya yang berkelanjutan. Saya pikir semua orang harus bertujuan untuk menulis -6.000 baris kode per hari.
sumber
Tanpa benar-benar memeriksa salinan "The Mythical Man-Month" (semua orang yang membaca ini harus benar-benar memiliki salinannya), ada bab di mana Brooks melihat produktivitas berdasarkan baris yang ditulis. Poin yang menarik, baginya, bukanlah jumlah baris yang sebenarnya ditulis per hari, tetapi fakta bahwa itu tampaknya kira-kira sama di assembler dan di PL / I (saya pikir itu adalah bahasa tingkat tinggi yang digunakan).
Brooks tidak akan mengeluarkan angka produktivitas sewenang-wenang, tetapi dia bekerja dari data pada proyek nyata, dan untuk semua yang saya ingat mereka mungkin rata-rata 12 baris / hari.
Dia menunjukkan bahwa produktivitas dapat bervariasi. Dia mengatakan bahwa kompiler tiga kali lebih keras dari program aplikasi, dan sistem operasi tiga kali lebih keras dari kompiler. (Dia tampaknya suka menggunakan pengganda tiga untuk memisahkan kategori.)
Saya tidak tahu apakah dia menghargai perbedaan individual antara produktivitas programmer (walaupun dalam argumen urutan-besarnya dia memang mendalilkan faktor tujuh perbedaan), tetapi seperti yang kita tahu produktivitas superior bukan hanya masalah menulis lebih banyak kode, tetapi juga menulis kode yang tepat untuk melakukan pekerjaan itu.
Ada juga pertanyaan tentang lingkungan. Brooks berspekulasi sedikit tentang apa yang akan membuat pengembang lebih cepat atau lebih lambat. Seperti banyak orang, ia mempertanyakan apakah mode saat ini (debugging interaktif menggunakan sistem pembagian waktu) lebih baik daripada cara-cara lama (perencanaan yang matang untuk pengambilan gambar dua jam menggunakan seluruh mesin).
Mengingat itu, saya akan mengabaikan angka produktivitas aktual yang ia dapatkan sebagai tidak berguna; nilai berkelanjutan dari buku ini adalah pada prinsip-prinsip dan pelajaran yang lebih umum bahwa orang-orang tetap tidak belajar. (Hei, jika semua orang telah mempelajarinya, buku itu hanya akan menarik sejarah, seperti semua argumen Freud bahwa ada sesuatu seperti pikiran bawah sadar.)
sumber
Sangat mudah untuk mendapatkan beberapa ratus baris kode per hari. Tetapi cobalah untuk mendapatkan beberapa ratus baris kode berkualitas per hari dan itu tidak mudah. Ditambah lagi dengan debugging dan melewati hari-hari dengan sedikit atau tanpa baris baru per hari dan rata-rata akan turun dengan cepat. Saya telah menghabiskan berminggu-minggu men-debug masalah yang sulit dan jawabannya adalah 1 atau 2 baris kode.
sumber
Akan jauh lebih baik untuk menyadari bahwa berbicara tentang garis fisik kode sangat tidak berarti. Jumlah fisik Garis Kode (LoC) sangat tergantung pada gaya pengkodean yang dapat bervariasi dari satu urutan besarnya dari satu pengembang ke yang lain.
Di dunia .NET ada cara mudah untuk menghitung LoC. Titik urutan . Titik urutan adalah unit debugging, itu adalah bagian kode yang disorot dalam warna merah-gelap saat meletakkan titik istirahat. Dengan titik urutan kita dapat berbicara tentang LoC logis , dan metrik ini dapat dibandingkan di berbagai bahasa .NET. Metrik kode LoC logis didukung oleh sebagian besar alat .NET termasuk metrik kode VisualStudio, NDepend atau NCover.
Misalnya, berikut adalah metode 8 LoC (titik urutan kurung awal dan akhir tidak diperhitungkan):
Produksi LoC harus dihitung dalam jangka panjang. Beberapa hari Anda akan meludah lebih dari 200 LoC, beberapa hari lain Anda akan menghabiskan 8 jam memperbaiki bug dengan bahkan tidak menambahkan LoC tunggal. Beberapa hari Anda akan membersihkan kode mati dan akan menghapus LoC, beberapa hari Anda akan menghabiskan seluruh waktu Anda untuk merecode kode yang ada dan tidak menambahkan LoC baru ke total.
Secara pribadi, saya menghitung satu LoC di skor produktivitas saya sendiri hanya ketika:
Dalam kondisi ini, skor pribadi saya selama 5 tahun terakhir dengan mengkode alat NDepend untuk pengembang .NET rata-rata 80 fisik LoC per hari tanpa mengorbankan kualitas kode . Ritme dipertahankan dan saya tidak melihatnya menurun dalam waktu dekat. Secara keseluruhan, NDepend adalah basis kode C # yang saat ini memiliki bobot sekitar 115K fisik LoC
Bagi mereka yang benci menghitung LoC (saya melihat banyak dari mereka dalam komentar di sini), saya membuktikan bahwa setelah dikalibrasi secara memadai, menghitung LoC adalah alat estimasi yang sangat baik . Setelah pengkodean dan pengukuran lusinan fitur yang dicapai dalam konteks pengembangan khusus saya, saya mencapai titik di mana saya dapat memperkirakan secara tepat ukuran setiap fitur TODO di LoC, dan waktu yang diperlukan untuk mengirimkannya ke produksi.
sumber
Tidak ada yang namanya peluru perak.
Metrik tunggal seperti itu tidak berguna dengan sendirinya.
Sebagai contoh, saya memiliki perpustakaan kelas saya sendiri. Saat ini, statistik berikut ini benar:
Anggap saja saya tidak menulis komentar sama sekali, yaitu, 127.323 baris kode. Dengan rasio Anda, pustaka kode itu akan membawa saya sekitar 10610 hari untuk menulis. Itu 29 tahun.
Saya jelas tidak menghabiskan 29 tahun untuk menulis kode itu, karena semuanya C #, dan C # belum ada selama itu.
Sekarang, Anda dapat berargumen bahwa kode tidak terlalu baik, karena jelas saya pasti telah melampaui 12 baris Anda metrik sehari, dan ya, saya akan setuju untuk itu, tetapi jika saya akan membawa timeline ke ketika 1.0 dirilis (dan saya tidak mulai benar-benar membuatnya sampai 2.0 dirilis), yaitu 2002-02-13, sekitar 2600 hari, rata-rata adalah 48 baris kode sehari.
Semua baris kode itu bagus? Heck no. Tetapi turun ke 12 baris kode sehari?
Heck no.
Semuanya tergantung.
Anda dapat meminta programmer membuat kode dengan urutan ribuan baris per hari, dan programmer menengah membuat kode dalam urutan ratusan baris per hari, dan kualitasnya sama.
Dan ya, akan ada bug.
Total yang Anda inginkan adalah saldo. Jumlah kode berubah, versus jumlah bug yang ditemukan, versus kompleksitas kode, versus kesulitan memperbaiki bug tersebut.
sumber
Steve McConnell memberikan statistik yang menarik dalam bukunya "Estimasi Perangkat Lunak" (hal. 62 Tabel 5.2) Ia membedakan antara jenis proyek (Avionik, Bisnis, Telco, dll.) Dan ukuran proyek 10 kLOC, 100 kLOC, 250 kLOC. Angka-angka diberikan untuk setiap kombinasi di LOC / StaffMonth. EG Avionic: 200, 50, 40 Sistem Intranet (Internal): 4000, 800, 600 Sistem Tertanam: 300, 70, 60
Yang berarti: mis. untuk proyek Avionic 250-kLOC ada 40 (LOC / Bulan) / 22 (Hari / Bulan) == <2LOC / hari!
sumber
Saya pikir ini berasal dari hari-hari pengembangan air terjun , di mana fase pengembangan sebenarnya dari sebuah proyek bisa hanya 20-30% dari total waktu proyek. Ambil total baris kode dan bagi dengan seluruh waktu proyek dan Anda akan mendapatkan sekitar 10 baris / hari. Bagi dengan hanya periode pengkodean, dan Anda akan lebih dekat dengan apa yang orang kutip.
sumber
Basis kode kami adalah sekitar 2.2MLoC selama sekitar 150 upaya man-tahun. Itu membuatnya sekitar 75 baris c ++ atau c # per pengembang per hari, selama seluruh proyek.
sumber
Saya pikir ukuran proyek dan jumlah pengembang yang terlibat adalah faktor besar dalam hal ini. Saya jauh di atas ini selama karir saya tetapi saya telah bekerja sendirian sepanjang waktu sehingga tidak ada kerugian untuk bekerja dengan programmer lain.
sumber
Perencanaan yang baik, desain yang bagus dan programmer yang baik. Anda mendapatkan semua togheter itu dan Anda tidak akan menghabiskan 30 menit untuk menulis satu baris. Ya, semua proyek mengharuskan Anda untuk berhenti dan merencanakan, memikirkan, membahas, menguji dan men-debug tetapi pada dua baris per hari setiap perusahaan akan membutuhkan pasukan untuk membuat tetris bekerja ...
Intinya, jika Anda bekerja untuk saya pada 2 baris per jam, Anda sebaiknya mendapatkan saya banyak kopi dan memijat kaki saya sehingga Anda tidak dipecat.
sumber
Seseorang mencurigai permen manajer yang abadi ini diciptakan ketika semuanya adalah aplikasi sys yang ditulis dalam C karena jika tidak ada yang lain, angka ajaib akan bervariasi berdasarkan urutan besarnya tergantung pada bahasa, skala dan sifat aplikasi. Dan kemudian Anda harus diskon komentar dan atribut. Dan pada akhirnya siapa yang peduli dengan jumlah baris kode yang ditulis? Apakah Anda seharusnya selesai ketika Anda sudah mencapai 10 ribu baris? 100rb? Sangat sewenang-wenang.
Percuma saja.
sumber