Memprogram atau tidak memprogram?
Untuk memecahkan masalah dengan produk perangkat lunak, setelah memiliki pemahaman tentang persyaratan, Anda dapat BAIK menulis program menggunakan bahasa pemrograman ATAU menentukan program menggunakan bahasa formal dan menggunakan alat penghasil kode. Yang terakhir hanya menambah tingkat abstraksi.
Melakukan hal yang benar atau melakukan hal yang benar?
Pendekatan formal memberi Anda bukti bahwa perangkat lunak Anda bekerja sesuai dengan spesifikasi. Jadi produk Anda melakukan hal yang benar. Tetapi apakah itu melakukan hal yang benar?
Persyaratan tempat Anda bekerja mungkin tidak lengkap atau ambigu. Mereka bahkan bisa menjadi buggy. Dalam kasus terburuk, kebutuhan nyata bahkan tidak diungkapkan. Tetapi gambar bernilai ribuan kata, hanya gambar google untuk "Apa yang diinginkan pelanggan", misalnya dari artikel ini :
Biaya formalitas
Di dunia yang sempurna, Anda akan memiliki persyaratan yang sepenuhnya terperinci dan sempurna sejak awal. Anda kemudian dapat sepenuhnya menentukan perangkat lunak Anda. Jika Anda ingin formal, kode Anda akan dihasilkan secara otomatis sehingga Anda akan lebih produktif. Keuntungan produktivitas akan mengimbangi biaya alat formal. Dan semua orang sekarang akan menggunakan metode formal. Jadi mengapa tidak?
Dalam praktiknya, ini jarang kenyataan! Inilah sebabnya mengapa begitu banyak proyek air terjun gagal, dan mengapa metode pengembangan berulang (tangkas, RAD, dll) memimpin: mereka dapat menangani persyaratan, desain dan implementasi yang tidak lengkap dan tidak sempurna dan menyempurnakannya sampai mereka baik-baik saja.
Dan inilah intinya. Dengan metode formal, setiap iterasi harus memiliki spesifikasi formal yang sepenuhnya konsisten. Ini membutuhkan pemikiran yang cermat dan pekerjaan tambahan, karena logika formal tidak memaafkan dan tidak menyukai pikiran yang tidak lengkap. Eksperimen pembuangan sederhana menjadi mahal di bawah batasan ini. Dan begitu juga setiap iterasi yang akan mengarah ke pengulangan (misalnya ide yang tidak berhasil, atau persyaratan yang disalahpahami).
Dalam praktek
Ketika tidak diwajibkan untuk menggunakan metode formal untuk alasan hukum atau kontrak, Anda juga dapat mencapai kualitas yang sangat tinggi tanpa sistem formal, misalnya dengan menggunakan pemrograman berbasis kontrak dan praktik-praktik baik lainnya (mis. Tinjauan kode, TDD , dll ...). Anda tidak akan dapat membuktikan bahwa perangkat lunak Anda berfungsi, tetapi pengguna Anda akan menikmati kerja perangkat lunak lebih cepat.
Pembaruan: upaya yang terukur
Dalam edisi Oktober 2018 tentang Komunikasi ACM ada artikel menarik tentang perangkat lunak yang diverifikasi secara formal di dunia nyata dengan beberapa perkiraan upaya.
Menariknya (berdasarkan pengembangan OS untuk peralatan militer), tampaknya memproduksi perangkat lunak yang terbukti secara formal membutuhkan upaya 3,3 kali lebih banyak daripada dengan teknik teknik tradisional. Jadi itu sangat mahal.
Di sisi lain, ini membutuhkan upaya 2,3 kali lebih sedikit untuk mendapatkan perangkat lunak keamanan tinggi dengan cara ini dibandingkan dengan perangkat lunak yang direkayasa secara tradisional jika Anda menambahkan upaya untuk membuat perangkat lunak tersebut disertifikasi pada tingkat keamanan yang tinggi (EAL 7). Jadi jika Anda memiliki keandalan atau persyaratan keamanan yang tinggi pasti ada kasus bisnis untuk menjadi formal.
desain seL4 dan pengembangan kode memakan waktu dua orang-tahun. Menambahkan semua bukti serospecific selama bertahun-tahun mencapai total 18 orang-tahun untuk 8.700 baris kode C. Sebagai perbandingan, L4Ka :: Pistachio, microkernel lain dalam keluarga L4, sebanding dengan seL4, membutuhkan waktu enam orang-tahun untuk dikembangkan dan tidak memberikan tingkat jaminan yang signifikan. Ini berarti hanya ada faktor 3.3 antara perangkat lunak yang diverifikasi dan perangkat lunak yang direkayasa secara tradisional. Menurut metode estimasi oleh Colbert dan Boehm, 8 sertifikasi Common Common EAL7 tradisional untuk 8.700 baris kode C akan memakan waktu lebih dari 45,9 orang-tahun. Itu berarti verifikasi implementasi tingkat biner formal sudah lebih dari faktor 2.3 lebih murah daripada tingkat sertifikasi tertinggi Kriteria Umum namun memberikan jaminan yang jauh lebih kuat.