Tentang produktivitas dan SLOC
Masalah dengan SLOC
Masalah dengan metrik SLOC adalah ia mengukur perkiraan jumlah kode yang ditulis, tanpa memperhitungkan:
- kualitas kode (yaitu bagaimana jika untuk setiap 100 SLOC Anda harus menambahkan 90 SLOC lain karena bug, tetapi Anda tidak tahu saat kode Anda dikirimkan?)
- tujuan tercapai dengan kode (yaitu apakah 10K SLOC menangani semua kasus penggunaan yang diharapkan atau cerita pengguna? atau hanya sebagian kecil?)
- pemeliharaan kode (yaitu apakah Anda harus menambahkan 1% atau 50% lebih banyak kode untuk menyesuaikan kode dengan persyaratan yang berkembang yang diharapkan?).
Jika tidak dinyatakan, produksi kode spaghetti rawan kesalahan yang tidak dapat dipelihara dengan banyak bagian yang disalin akan dianggap lebih produktif daripada kode yang dapat digunakan kembali yang direkayasa dengan cermat.
Jadi SLOC secara definitif bukan cara terbaik untuk mengukur produktivitas.
Produktivitas apa yang kita pertimbangkan?
Produktivitas diukur untuk suatu proses. Jadi SLOC bisa menjadi indikator yang valid sempurna untuk proses pengkodean saja.
Jika misalnya, Anda salah paham persyaratan yang buruk, menghabiskan waktu lima bulan untuk memproduksi perangkat lunak, menunjukkannya kepada pengguna, menemukan bahwa itu salah, dan menghabiskan 5 bulan lagi untuk menulis ulang untuk selamanya dari awal, Anda akan memiliki produktivitas yang sama di SLOC / bulan, bahwa tim menulis kode tepat pada saat pertama, misalnya karena mereka menggunakan proses gesit yang mengurangi kesalahpahaman melalui umpan balik yang sering. Produktivitas yang sama ini menyembunyikan masalah besar.
Jadi, mengukur produktivitas pengembangan perangkat lunak perlu memperhitungkan seluruh proses, termasuk menganalisis persyaratan, merancang apa yang harus dikodekan, pengkodean, pengujian, debugging, dan memverifikasi bahwa harapan pengguna terpenuhi. Karena semua kegiatan ini sangat berbeda, hal terbaik adalah mengukur satu-satunya pemikiran yang penting: perangkat lunak yang berfungsi, yaitu apa yang dihasilkan perangkat lunak bagi pengguna .
Bagaimana mengukur kiriman perangkat lunak?
Ada beberapa pendekatan:
- Pendekatan khas dalam rekayasa perangkat lunak klasik adalah Function Points (FP). Titik fungsi diukur berdasarkan persyaratan yang harus dipenuhi (misalnya jumlah formulir, jumlah bidang dalam setiap formulir, dll ...). Produktivitas kemudian diukur dalam FP per unit waktu dan per orang. Beberapa perusahaan bahkan memiliki data yang menunjukkan berapa banyak poin fungsi yang dapat dihasilkan oleh seorang pengembang per unit waktu dalam bahasa tertentu untuk domain tertentu. Masalah dengan FP adalah membutuhkan persyaratan yang sangat rinci di muka dan itu memakan waktu.
- Pendekatan yang lebih modern dan pragmatis adalah story point (SP). Ini digunakan untuk mengevaluasi kompleksitas kode yang akan dihasilkan, dan secara rutin digunakan untuk mengevaluasi kecepatan tim pengembangan. Namun, SP adalah ukuran estimasi untuk pekerjaan yang dilakukan sebelum semua detail diketahui. Itu bukan ukuran akhir dari apa yang sebenarnya terjadi. Jadi harus berhati-hati ketika menggunakannya sebagai ukuran produktivitas karena bisa menjadi bumerang pada proses estimasi .
Tentang produktivitas pengetikan statis vs dinamis
Saya harus mengakui bahwa saya pribadi penggemar bahasa yang diketik secara statis, karena di dalam diri saya, saya tahu itu lebih dapat diandalkan (bertahun-tahun pengkodean membuktikannya kepada saya).
Jadi satu hal yang saya ambil pasti adalah bahwa bahasa yang diketik secara statis dapat mencegah lebih banyak kesalahan / bug pada waktu kompilasi (mis. Kesalahan ketik, ketidakcocokan dalam jenis yang diharapkan, dll ...) daripada bahasa yang diketik secara tidak statis. Tetapi dalam semua obyektivitas, saya tidak akan berani menyamaratakan ini sebagai produktivitas yang lebih tinggi.
Apakah arsitek Anda benar?
Mungkin tidak.
Tetapi argumennya tampaknya tidak valid: perolehan produktivitas dari bahasa yang diketik secara statis berasal dari sejumlah besar kesalahan yang ditangkap dimuka oleh kompiler.
Akibatnya, tidak mungkin untuk mengetahui kenaikan produktivitas "lebih tinggi" ini dengan hanya melihat SLOC tanpa melihat pengerjaan ulang yang diperlukan untuk bahasa yang diketik secara dinamis. Jadi perbandingannya tidak adil.
Argumen keadaan yang sebanding juga tidak berlaku. Beberapa bahasa yang diketik secara dinamis memungkinkan beberapa konstruksi tingkat yang lebih tinggi yang memerlukan lebih sedikit kode daripada melakukan hal yang sama di salah satu bahasa klasik yang diketik secara statis. Jadi Anda mungkin memerlukan lebih sedikit waktu, menulis lebih sedikit kode, tetapi menambahkan analisis, pengujian, dan overhead verifikasi yang sama. Jadi, mengukur produktivitas oleh SLOC akan mencairkan potensi peningkatan produktivitas, sehingga menciptakan bias terhadap bahasa yang diketik secara dinamis.
Adakah studi untuk mendukung klaim itu?
Beberapa studi akademik baru-baru ini ada tentang topik ini. Meskipun beberapa dari mereka melihat keuntungan dari pengetikan statis, secara umum terbatas pada tujuan tertentu (dokumentasi, penggunaan kembali kode atau API yang tidak didokumentasikan dengan buruk, dll.). Kata-kata bijak juga digunakan karena IDE modern telah secara signifikan mengurangi risiko terkait pengetikan dinamis: