Tampak bagi saya bahwa Anda tidak mungkin dapat menulis spesifikasi perangkat lunak dalam bahasa Inggris yang sepenuhnya bebas dari ambiguitas, hanya karena sifat informal bahasa alami - dan oleh karena itu spesifikasi yang benar-benar jelas harus mencakup kode yang ditulis dalam bahasa yang ditentukan secara formal.
Apakah ini hasil yang diketahui atau saya kehilangan sesuatu?
Jawaban:
Bukankah ini yang selalu dilakukan pengacara untuk menghindari ambiguitas?
Hasilnya adalah mereka menulis dengan cara yang paling tidak wajar, mencoba membaca makalah mereka lebih sulit dari sebelumnya, dan meskipun demikian selalu ada ketidakkonsistenan dan ambiguitas.
Anda benar, Anda tidak dapat menulis spesifikasi perangkat lunak yang sepenuhnya bebas dari ambiguitas, tetapi Anda tidak akan bisa melakukannya dengan menerapkan bahasa yang ditentukan secara formal.
Ini juga mengapa kami mendokumentasikan kode kami, karena kadang-kadang sulit untuk membaca untuk pikiran kita.
Tidak ada gunanya mendokumentasikan kode dengan kode lain.
sumber
Mustahil? Mari kita bertanya apakah itu diinginkan terlebih dahulu. Jika kami setuju bahwa itu tidak mungkin, dan masih ada banyak perangkat lunak yang berguna di luar sana, maka tujuan dari spesifikasi yang tidak ambigu tampaknya bersifat akademis.
Saya akan mengatakan bahwa tidak mungkin untuk membuktikan bahwa semuanya sempurna dan tidak ambigu, baik untuk spesifikasi dan perangkat lunak.
Saya pikir itu tergantung pada ukuran masalahnya. Jika masalahnya cukup kecil, sifatnya matematis, dan mungkin beberapa kriteria lain yang saya lewatkan, saya katakan mungkin untuk menulis spesifikasi yang bisa diterapkan.
Semakin besar masalah, semakin luas audiensnya, semakin sulit untuk dilakukan.
Tapi avionik dan masalah kompleks lainnya menunjukkan bahwa mungkin untuk menulis spesifikasi "cukup baik" dalam bahasa Inggris untuk memecahkan masalah besar.
sumber
baik .. spesifikasi masalah yang sama sekali tidak ambigu adalah kode aktualnya sendiri :)
Ini adalah masalah yang diketahui dan untuk sistem kritis misi khusus wajib untuk menulis spesifikasi yang tidak ambigu dalam bahasa formal (pemrograman) dan kemudian mengubahnya menjadi kode yang dapat dibuktikan melakukan apa yang dikatakan spesifikasi. Ini adalah bidang yang sangat sempit, 99,999% pengembang tidak pernah harus melakukan tugas seperti ini, tapi saya pernah berbicara dengan seorang pria yang melakukan ini untuk sistem pengendali lalu lintas / kereta api.
sumber
Saya seorang pengikut W3C, dan saya cenderung menulis artikel berdasarkan spesifikasinya. Pengalaman saya memberi tahu saya bahwa membaca spesifikasi apa pun tanpa kode contoh tertulis, hanyalah sakit kepala.
Saya sepenuhnya setuju dan saya pikir alasan utamanya adalah, pengembang cenderung membaca dan memahami kode dengan lebih baik. Bayangkan saja Anda mendapatkan kertas matematika tanpa formula.
atau:
Yang mana yang lebih pendek? Mana yang lebih mudah dibaca? Yang mana yang lebih memahaminya?
Hal yang sama berlaku untuk spesifikasi. Sering kali, ketika Anda sampai ke bagian teknis, menulis satu baris kode dapat memperjelas paragraf penjelasan yang panjang.
sumber
Asumsikan ada bahasa formal yang memungkinkan untuk menulis spesifikasi yang tidak ambigu. Kemudian saya mengusulkan bahwa harus ada pemetaan bijektif ke subset dari bahasa Inggris. Oleh karena itu, mungkin untuk menulis spesifikasi yang tidak ambigu jika Anda tetap pada subset ini.
Tetapi bahasa formal apa pun yang cukup ekspresif untuk melakukan sesuatu yang menarik tidak akan bebas dari ketidakkonsistenan (ketidaklengkapan Gödel).
sumber
Spesifikasi tidak jelas dan tidak tepat karena orang tidak jelas dan tidak tepat. Temukan orang yang tepat dan mungkin Anda bisa mendapatkan spesifikasi yang sempurna.
Bahasa Inggris, Swahili, Sanskerta atau Babel tidak ada bedanya.
sumber
Ambiguitas sebenarnya merupakan kekuatan dalam konteks ini.
Untuk menjelaskan mengapa, mari kita asumsikan sejenak bahwa adalah mungkin untuk menggunakan bahasa Inggris dengan cara yang benar-benar jelas, sehingga setiap masalah yang bisa diselesaikan pemrograman dapat dinyatakan lengkap dan jelas. Jika kita menggunakan varian bahasa Inggris ini, dan deskripsi kita memang menggambarkan program yang akan ditulis secara lengkap dan tidak ambigu, maka secara logis berikut ini adalah mungkin untuk melakukan terjemahan otomatis ke dalam bahasa pemrograman target - dengan kata lain, varian dari Bahasa Inggris yang kami pahami sebenarnya adalah bahasa pemrograman itu sendiri.
Orang-orang yang membaca dokumen desain (terutama desain fungsional) sebenarnya tidak menginginkan tingkat detail seperti ini - membaca sumber program, baik dalam bahasa C ++, Java, atau Bahasa Inggris yang Tidak Rancu, jauh di atas rata-rata kepala non-programmer. Di sinilah bahasa alami masuk: mereka memungkinkan penulis spesifikasi meluncur dengan cara baik pada skala detail, memindahkan detail implementasi yang tidak relevan ke dalam subteks, atau membiarkannya tidak ditentukan sepenuhnya. Bahasa alami penuh dengan perangkat untuk menyampaikan makna secara relatif jelas meskipun Anda tidak memberikan definisi yang tepat (yang merupakan bagian dari apa yang membuat terjemahan otomatis menjadi sangat sulit).
Jadi tujuannya biasanya bukan spesifikasi yang lengkap, benar dan tidak ambigu; tujuannya adalah untuk menulis spec yang menggambarkan dengan jelas, untuk manusia, apa yang akan Anda bangun.
Kapan pun Anda membutuhkan yang benar dan tidak ambigu, dan segala sesuatunya menjadi teknis, pseudocode seringkali lebih berharga daripada bahasa alami atau bahasa formal yang kaku - ia masih dapat meninggalkan detail yang tidak relevan (dengan memanggil fungsi / proses yang tidak ditentukan), tetapi strukturnya tidak ambigu. .
sumber
Anda tidak melewatkan apa pun, kecuali dokumentasi yang ditulis untuk dibaca manusia. Beberapa ambiguitas diharapkan, dan bahkan diterima, karena teks singkat sulit dibaca (= tidak untuk manusia).
Menentukan dokumentasi untuk bahasa formal dalam bahasa formal lain akan menjadi semacam masalah ayam-dan-telur.
Jika Anda benar-benar membutuhkan spesifikasi formal, maka ada cara formal untuk memeriksa model . Ini adalah bidang penelitian yang aktif dan sangat menarik, tetapi "pengguna" akhir di sini adalah mesin, bukan manusia.
sumber
(Beberapa poin saya telah disinggung oleh jawaban lain, tetapi saya merasa bahwa saya memberikan perspektif yang cukup berbeda untuk membuat ini bernilai jawaban daripada komentar.)
Sebelum kita membahas masalah apakah suatu spesifikasi dapat benar-benar dan sama sekali tidak ambigu, kita harus menjawab pertanyaan apakah itu harus jelas, setidaknya pada tingkat yang Anda tanyakan.
Biarkan saya mendekati ini dari sudut pandang manajer program yang mengerjakan proyek berukuran kecil hingga menengah, atau fitur sebagai bagian dari proyek yang lebih besar. Biasanya ada dua jenis spesifikasi yang akan ditulis untuk proyek semacam itu: spesifikasi Fungsional (atau PM) dan spesifikasi Desain (atau Dev):
Secara umum, rincian tingkat implementasi ini tidak ditangkap dalam dokumen formal, melainkan didokumentasikan, pada dasarnya , dalam kode itu sendiri, termasuk komentar. Tingkat ambiguitas ini memungkinkan pengembang yang baik untuk menggunakan keahliannya sendiri dan membuat keputusan teknis berorientasi detail yang merupakan ciri khas dari pengembang individu yang baik. Karena itu, saya tidak akan ragu untuk mengatakan bahwa ambiguitas dalam spesifikasi, pada kenyataannya, adalah hal yang baik: memungkinkan pengembang untuk melakukan pekerjaan mereka, dan mengangkat mereka di atas sekadar "kode monyet".
Namun, ini tidak berarti bahwa harus ada ambiguitas di seluruh dokumen. Pada level tinggi, seharusnya tidak ada ambiguitas tentang antarmuka dengan pelanggan. Jika fitur memiliki API yang menghadap publik, itu harus ditentukan secara ketat. Jika sistem mengharuskan tanggal untuk dilewati untuk melakukan tugasnya, haruskah tanggal ini berada di zona waktu setempat atau UTC? Format apa yang dibutuhkan? Apakah perlu akurat hingga milidetik, atau apakah menit itu baik-baik saja?
Kembali ke pertanyaan apakah bahasa alami dapat digunakan untuk membuat spesifikasi yang tidak ambigu, memang benar bahwa tidak terlalu bagus dalam menangkap tingkat kejelasan ini. Saya telah melihatnya dilakukan dalam keadaan terbatas tertentu, tetapi itu kemungkinan pengecualian unik yang tidak dapat kita terapkan secara universal. Paling sering, ambiguitas diselesaikan dengan bantuan jargon teknis, diagram, atau bahkan kodesemu. Setelah Anda mulai meminta bantuan alat-alat tersebut, bahasa alami tidak lagi menjadi deskriptor tunggal. Karena alat-alat ini dapat membuat spesifikasi yang sepenuhnya ambigu secara fungsional jauh lebih jelas, saya berani mengatakan bahwa upaya semacam itu seharusnya tidak dicoba.
Karena itu, karena bahasa alami pada umumnya dilengkapi dengan alat-alat ini untuk membuatnya berfungsi secara ambigu, itu adalah pendapat profesional saya bahwa tidak, bahasa alami saja tidak cukup untuk membuat spesifikasi yang tidak ambigu dalam semua kasus.
sumber
Seseorang dapat membuat bahasa alami relatif tidak ambigu, tetapi hanya dengan kesulitan besar.
Profesi hukum sangat membutuhkan bahasa untuk menjadi tidak ambigu mungkin. Sementara banyak tentang bagaimana hukum diterapkan mungkin terbuka untuk interpretasi, apa artinya kata-kata tidak boleh.
Kebutuhan ini mengarah pada penemuan legalese. Seberapa jauh Anda mau pergi?
sumber
Ada sejumlah spesifikasi oleh kelompok terbuka, ISO, IETF dan ITU yang cukup jelas untuk perusahaan yang sangat kompetitif untuk beroperasi dengan cukup sukses. Ada sejumlah spesifikasi yang menjadi dasar kontrak atau hukum di mana jutaan dolar dipertaruhkan.
Jadi spesifikasinya mungkin tidak "sempurna". Namun itu karena manusia tidak sempurna. Misalnya, tidak ambigu bahwa HTTP harus menggunakan tajuk "Perujuk" - ejaan yang benar sebenarnya adalah "Perujuk".
Bahasa Inggris mampu menjadi tidak ambigu, tetapi manusia mampu membuat kesalahan - termasuk ambiguitas.
Selain itu mungkin berguna untuk secara ambigu sengaja untuk detail yang belum selesai atau mungkin perlu diperbarui di masa depan. Misalnya spesifikasi dapat menentukan "hash" daripada secara spesifik menentukan md5, sha1, crc32 dll.
sumber
Saya percaya jawaban yang benar adalah negatif. Penting untuk membedakan pertanyaan-pertanyaan berikut:
Perbedaan antara pertanyaan pertama dan kedua menyangkut tingkat perincian yang terlibat, jumlah penafsiran yang diperlukan, dan aturan yang dikenakan pada konstruksi kalimat dalam bahasa alami untuk keperluan penulisan perangkat lunak atau spesifikasi perangkat lunak.
Jawaban untuk pertanyaan kedua adalah afirmatif. Mengingat subset terbatas dari bahasa alami dengan aturan yang disepakati untuk konstruksi kalimat dan makna, kode dapat ditulis dalam kalimat bahasa tata bahasa Inggris. Sebagai contoh, bahasa berikut jelas memungkinkan pernyataan tugas penugasan:
Artinya, kita dapat secara sistematis menerjemahkan kode yang ditulis dalam bahasa pemrograman formal ke bahasa alami dengan menjelaskan setiap prosedur. Di sisi lain, spesifikasi perangkat lunak seringkali membutuhkan interpretasi. Dengan demikian, apakah spesifikasi perangkat lunak dapat diberikan secara jelas tergantung pada tingkat detail yang terlibat dalam spesifikasi. Namun, mengingat domain yang dipilih di mana rentang spesifikasi, dengan operasi tertentu pada domain ini dipilih, proses penerjemahan serupa dapat dilakukan. Contohnya:
di mana laporan
X
,Y
,Z
hanya berisi item-item yang disebutkan dalam kata pengantar spesifikasi dan ditulis dalam sesuai formal dan disepakati subset dari bahasa alami. Ambiguitas kemudian akan menyangkut bagaimana menerapkan spesifikasi - tetapi ini akan diharapkan.sumber
Tidak
Spesifikasi komputer yang tidak ambigu adalah program komputer.
sumber