İngilizce gibi doğal bir dilde açık bir şartname yazabilir misiniz?


10

Bana öyle geliyor ki, İngilizce'de, sadece doğal dilin gayri resmi doğası nedeniyle belirsizlikler içermeyen bir yazılım belirtimi yazamıyorsunuz ve bu nedenle gerçekten kesin bir belirtimin, resmi olarak belirtilen bir dilde yazılmış kodu içermesi gerekiyor.

Bu bilinen bir sonuç mu yoksa bir şey mi kaçırıyorum?


1
msgstr "kod resmi olarak belirlenmiş bir dilde yazılmış". Bu matematik ve mantık olurdu, değil mi? Matematik ve mantık bunun için değil mi? Sormak tuhaf görünüyor, çünkü bu diller her zaman açık olmak için açık bir amaç için var olmuştur. Neden sordun?
S.Lott

@ S.Lott: Kullanıcılar, matematik veya biçimsel mantık değil, kendi dillerinde özellikler ister. İki alan arasında çeviri yapmak bizim işimiz.
tdammers

2
Kodunuz açık olabilir, ancak bu doğru olduğu anlamına gelmez.
JeffO

1
@tdammers: Ne? Soru doğal dil ile biçimsel dil arasındaydı. Kullanıcıların bununla ne ilgisi var? Ayrıca, kullanıcı gerçekte bir mantıkçı ise? Ayrıca, "iş analistleri" genellikle kullanıcılar adına yazmazlar mı? "Kullanıcı" şey ferah görünüyor ve bu sorunun dışında.
S.Lott

@ S.Lott: Yazılımı bir müşteri / kullanıcı / teknik olmayan diğer paydaşlara açıklamak zorunda olduğunuz ve ilk etapta doğal bir dil kullanmak istemenin en iyi nedeni olacağını düşündüm.
tdammers

Yanıtlar:


9

Avukatların belirsizlikleri önlemek için her zaman yaptıkları bu değil mi?

Sonuç, en doğal olmayan yollarla yazıyorlar, kağıtlarını okumaya çalışmak her zamankinden daha zor ve buna rağmen her zaman tutarsızlıklar ve belirsizlikler var.

Haklısınız, belirsizlikler içermeyen bir yazılım belirtimi yazamazsınız, ancak bunu resmi olarak belirlenmiş bir dil uygulayarak da başaramazsınız.

Bu yüzden kodumuzu da belgeliyoruz, çünkü bazen aklımız için okumak zor.

Kodu başka bir kodla belgelemenin bir anlamı yok.


2
Bazı avukatlar şeyleri gizlemeyi ve gizlemeyi sever. Hedefinize bağlıdır.
duffymo

1
Avukatları matematikçilerle karıştırıyorsunuz.
Doc Brown

1
@Doc: Matematik sadece başka bir kod, çünkü sadece matematikçiler okuyabilir ve kodu kodla belgelemenin bir anlamı yoktur, bu kriptografidir.
Jose Faeti

2
@Jose: Çok fazla basitleştirdiğini söyleyebilirim. Tüm matematiksel kanıtların% 99'u doğal dilde yazılmıştır - elbette, özel terimlere sahip teknik bir dil ve az çok formüllerden yararlanır, ancak kesinlikle "resmi olarak belirlenmiş dil" yoktur.
Doc Brown

@Doc: Ben de öyle söylüyorum ... doğal dilde yazılmış dokümanlar. Bir kodu başka bir kodla açıklamak mantıksız.
Jose Faeti

4

İmkansız? Önce arzu edilebilir olup olmadığını soralım. Bunun imkansız olduğunu kabul edersek ve hala çok sayıda yararlı yazılım varsa, açık bir belirtimin hedefi akademik görünüyor.

Hem teknik özellikler hem de yazılım için her şeyin mükemmel ve açık olduğunu kanıtlamanın imkansız olduğunu söyleyebilirim.

Sorunun boyutuna bağlı olduğunu düşünüyorum. Sorun yeterince küçükse, doğası gereği matematiksel ve belki de kaçırdığım bazı kriterler varsa, uygulanabilir bir şartname yazmanın mümkün olduğunu söyleyebilirim.

Sorun ne kadar büyük olursa, izleyici ne kadar geniş olursa, o kadar zor olur.

Ancak aviyonik ve diğer karmaşık sorunlar, büyük sorunları çözmek için İngilizce "yeterince iyi" özellikler yazmanın mümkün olduğunu göstermektedir.


2
"Yeterince iyi, ama mükemmel bir PITA" - Çevre kontrolleri oluştururken çalışırdım ve orada 400 sayfaya ulaştıklarında bile tamamen açık bir spesifikasyon diye bir şey yoktur - bazen önemli değildi ve yaptığımız zamanlarda RFI'larımız vardı
HorusKol

4

iyi .. sorunun tamamen açık bir belirtimi gerçek kodun kendisidir :)

Bu bilinen bir sorundur ve özel görev için kritik sistemler için resmi (programlama) bir dilde açık bir belirtim yazmak ve daha sonra bunu belirtimin söylediklerini kanıtlayan bir koda dönüştürmek zorunludur . Bu çok dar bir alandır, geliştiricilerin% 99.999'u asla böyle işler yapmak zorunda değildir, ancak bir keresinde bunu trafik kontrol / demiryolu sistemi için yapan bir adamla konuştum.


3

Ben bir W3C takipçisiyim ve özelliklerine göre makale yazma eğilimindeyim. Deneyimlerim, yazılı örnek kodlar olmadan herhangi bir spesifikasyonun okunmasının sadece bir baş ağrısı olduğunu söylüyor .

Tamamen katılıyorum ve bence asıl neden, geliştiricilerin kodu daha iyi okuma ve anlama eğiliminde olmasıdır. Herhangi bir formül olmadan matematiksel bir kağıt aldığınızı hayal edin.

To calculate the result, simply add variable x to variable y, 
and then divide that by the b factor.

veya:

result = (x + y) / b

Hangisi daha kısa? Hangisi daha okunabilir? Hangisi onunla daha fazla anlayış getiriyor?

Aynısı özellikler için de geçerlidir. Çoğu zaman, teknik parçalara ulaştığınızda, bir kod satırı yazmak uzun bir açıklama paragrafını netleştirebilir.


Ve o zaman bile, (x + y) ve (x + y) / b alanlarının ne olduğunu soracağım. Çifte mi? Tamsayılar mı? Sonsuz tamsayılar mı? Umarım, eğer tamsayılarsa, yuvarlama ile ilgili kuralları
yazdınız

1

Belirsiz şartnamelerin yazılmasına izin veren resmi bir dil olduğunu varsayın. Sonra bir İngilizce alt kümesine iki yönlü bir eşleme olması gerektiğini öneriyorum. Bu nedenle, bu altkümeye sadık kalırsanız kesin özellikler yazmak mümkün olmalıdır.

Ancak ilginç bir şey yapacak kadar etkileyici olan herhangi bir biçimsel dil tutarsızlıklardan arınmış olmayacaktır (Gödel yetersizliği).


Eminim akıl yürütmenin düz ingilizce olduğu için belirsiz olduğundan emin olabilirsiniz. Resmi bir dilde yazabilir misiniz?
blubb

1
Bunun sizin varsayımınız olduğuna inanıyorum: citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.88.1151
Thomas Owens

Ve sonra, belirsizliğe dönüşen durma problemi var: N, N'den büyüktür 1 , N'yi tanımlamaz
mojuba 9:11

1
-1, Gödels Teoremini yanlış yaptığı için.
Ingo

1

Özellikler belirsiz ve kesin değil çünkü insanlar belirsiz ve kesin değil. Mükemmel bir kişi bulun ve belki de mükemmel bir şartname elde edebilirsiniz.

İngilizce, Svahili, Sanskritçe veya Babilce fark etmez.


1

Belirsizlik aslında bu bağlamda bir güçtür.

Neden açıklamak için, en o bir an için düşünelim olduğu programlı çözülebilecek hiçbir sorun tamamen ve net bir şekilde ifade edilebilir böylece, tamamen net bir şekilde İngilizce dil kullanmak mümkün. Bu İngilizce varyantını kullanırsak ve açıklamamız gerçekten de tamamen ve açık bir şekilde yazılacak programı açıklarsa, o zaman mantıksal olarak, hedef programlama diline otomatik bir çeviri yapmak mümkün olmalıdır - başka bir deyişle, Tasarladığımız İngilizce aslında bir programlama dilidir.

Tasarım belgelerini (özellikle fonksiyonel tasarımları) okuyan insanlar aslında bu düzeyde ayrıntı istemezler - C ++, Java veya Belirsiz İngilizce'de bir programın kaynağını okumak, ortalama programcı olmayan kişinin kafasının çok üzerindedir. Burası doğal dillerin geldiği yerdir: bir belirtimin yazarının ayrıntı ölçeğinde her iki şekilde kaymasına, alakasız uygulama ayrıntılarını alt metne taşımasına veya tamamen belirtilmemiş bırakmasına izin verir. Doğal diller, tam bir tanım sunmasanız bile (bu otomatik çevirileri bu kadar zorlaştıran şeyin bir parçasıdır) anlam ifade etmek için cihazlarla doludur.

Dolayısıyla amaç genellikle tam, doğru ve açık bir özellik değildir; amaç, insanlara, inşa etmek üzere olduğunuz şeyi açıkça gösteren bir özellik yazmaktır.

Ne zaman doğru ve net olursanız olun ve işler yine de teknik hale geliyorsa, sözde kod genellikle doğal dillerden veya katı biçimsel olanlardan daha değerlidir - yine de alakasız ayrıntıları (belirtilmemiş işlevleri / süreçleri çağırarak) bırakabilir, ancak yapı açık değildir. .


0

Hiçbir şey eksik değilsiniz, ancak bu belgelerin insanların okuması için yazılmıştır. Kısa metnin okunması zor olduğu için bazı belirsizlikler beklenir ve hatta hoş karşılanır (= insanlar için değil).

Biçimsel bir dil için dokümantasyonun başka bir biçimsel dilde belirtilmesi bir çeşit tavuk ve yumurta problemi olacaktır.

Gerçekten resmi spesifikasyona ihtiyacınız varsa, modelleri kontrol etmenin resmi yolları vardır . Aktif ve çok ilginç bir araştırma alanı, ancak buradaki son "kullanıcılar" insanlar değil makineler.


0

(Bazı puanlarım diğer cevaplar tarafından zaten belirtilmişti, ancak bunu bir yorumdan ziyade bir cevaba değecek kadar farklı bir bakış açısı sağladığımı hissediyorum.)

Bir spesifikasyonun gerçekten ve tamamen açık olup olmadığı konusuna değinmeden önce, en azından sorduğunuz düzeyde, belirsiz olup olmadığı sorusunu ele almalıyız .

Buna küçük-orta ölçekli bir proje üzerinde çalışan bir program yöneticisi ya da daha büyük bir projenin parçası olarak bir özellik açısından yaklaşmama izin verin. Genellikle böyle bir proje için yazılacak iki farklı özellik türü vardır: bir İşlevsel (veya PM) belirtimi ve bir Tasarım (veya Dev) belirtimi:

  • Fonksiyonel özellikleri açıklayan işi var neyi projecty veya özellik genellikle müşterinin bakış açısıyla, yapmalıdır. Genel olarak, bunun nasıl yapılması gerektiğini tanımlamamalıdır . Proje türüne bağlı olarak, müşteri dışa dönük API'nin neye benzediğini umabilir, ancak müşteri A sınıfının B sınıfından mi mi yoksa C arabirimini mi uyguladığını önemser mi? Yapmamalı. Ve fonksiyonel şartname de olmamalıdır. Bu halihazırda bir seviye belirsizlik getiriyor: teknik tasarım.
  • Tasarım spesifikasyonu, fonksiyonel gereksinimlerin nasıl karşılanması gerektiğini, özelliğin veya projenin mimarı veya teknik tasarımcısı açısından açıklamakla görevlidir. Teknik tasarımın üst düzey belirsizliklerini çözmeyi amaçlamaktadır. Bu, projenin kapsamına ve ölçeğine bağlı olarak sınıf yapısı, kalıtım, belki de bireysel işlevler ve yöntemler dahil olmak üzere, çözümün mimarisi gibi fonksiyonel spesifikasyonda istemediğiniz ayrıntıları içerecektir. Mimar, geçici değişkenleriniz olarak adlandırdığınız şeyi veya dahili veri türü için bir liste veya dizi kullanıp kullanmadığınızı önemsiyor mu? Geliştiricilerine güvendiğini varsayarsak, tasarım şartnamesine de gerek olmamalı. Bu, ikinci bir belirsizlik seviyesi getirir: uygulama düzeyi.

Genel olarak, bu uygulama düzeyindeki detayları resmi belgede yakalanan değildir, daha ziyade, belgelenmiş başına yorumlar dahil olmak üzere kodda, kendisini. Bu belirsizlik düzeyi, iyi bir geliştiricinin kendi becerilerini kullanmasına ve iyi bir bireysel geliştiricinin ayırt edici özelliği olan detay odaklı teknik kararlar vermesine olanak tanır. Bu nedenle, bir spesifikasyondaki belirsizliğin aslında iyi bir şey olduğunu söylemekte tereddüt etmeyeceğim: geliştiricilerin işlerini yapmalarına izin verir ve onları sadece "kod maymunlarının" üzerine çıkarır.

Ancak bu, belgenin tamamında belirsizlik olması gerektiği anlamına gelmez. Yüksek düzeyde, müşteri ile arayüz hakkında herhangi bir belirsizlik olmamalıdır. Özelliğin herkese açık bir API'si varsa, kesinlikle tanımlanmalıdır. Sistemin işini yapmak için bir tarih geçirilmesi gerekiyorsa, bu tarih yerel saat diliminde mi yoksa UTC'de mi olmalıdır? Hangi format gerekli? Milisaniyeye kadar doğru olması gerekiyor mu yoksa dakika iyi mi?

Sorusuna arkasını Coming olsun doğal dil kesin özelliklere oluşturmak için kullanılabilir, bunun netlik bu düzeyde yakalayan de çok iyi değil doğrudur. Bazı sınırlı durumlarda yapıldığını gördüm, ancak bunlar evrensel olarak uygulayamayacağımız benzersiz istisnalar. Çoğu zaman, belirsizlik teknik jargon, diyagramlar ve hatta sözde kod yardımıyla çözülür. Bu tür araçların yardımını almaya başladığınızda, doğal dil tek tanımlayıcı olmaktan çıkar. Bu araçlar tamamen işlevsel olarak açık bir spesifikasyonu bile çok daha açık hale getirebildiğinden, böyle bir girişimin denenmesi gerektiğini bile söyleyebilirim.

Doğal dilin işlevselliği açık hale getirmek için genellikle bu araçlar tarafından desteklendiğinden, profesyonel düşüncem , hiçbir durumda doğal dilin, her durumda kesin özellikler oluşturmak için yeterli olmadığı görüşündedir.


0

Doğal dili nispeten açık, ancak sadece büyük zorluklarla yapabilirsiniz.

Hukuk mesleğinin, umutsuzca, olabildiğince açık olması için dile ihtiyacı vardır. Bir yasanın nasıl uygulandığı hakkında çok fazla yorumlamaya açık olsa da, kelimelerin anlamı ne olmamalıdır.

Bu ihtiyaç yasalların icadına yol açmaktadır. Ne kadar uzağa gitmek istiyorsun?


0

Açık grup, ISO, IETF ve ITU tarafından, oldukça rekabetçi şirketlerin oldukça başarılı bir şekilde birlikte çalışabilmeleri için yeterince açık olan bir takım özellikler bulunmaktadır. Milyonlarca doların söz konusu olduğu sözleşmelerin veya yasaların temelini oluşturan bir dizi özellik vardır.

Yani özellikler "mükemmel" olmayabilir. Ancak bunun nedeni insanların mükemmel olmamasıdır. Örneğin, HTTP'nin bir "Yönlendiren" üstbilgisi kullanması açıktır - doğru yazım aslında "Yönlendiren" dir.

İngiliz dili açık olabilir, ancak insanlar belirsizlik de dahil olmak üzere hata yapabilir.

Ayrıca, tamamlanmamış veya gelecekte güncellenmesi gerekebilecek ayrıntılar için kasıtlı olarak belirsiz olmak yararlı olabilir. Örneğin, bir spesifikasyon md5, sha1, crc32 vb. Spesifik olarak belirtmek yerine bir "karma" belirtebilir.


0

Doğru cevabın olumsuz olduğuna inanıyorum. Aşağıdaki soruları ayırt etmek gerekir:

  1. Belirsizlik içermeyen doğal bir dilde yazılım belirtimi yazmak mümkün müdür?
  2. Belirsizlik içermeyen doğal bir dilde yazılım yazmak mümkün müdür?

Birinci ve ikinci soru arasındaki fark, ilgili ayrıntı düzeyi, gerekli yorum miktarı ve yazılım veya yazılım belirtimi yazmak amacıyla doğal dilde cümle oluşturulmasına uygulanan kurallar ile ilgilidir.

İkinci sorunun cevabı olumludur. Cümlenin oluşturulması ve anlamı için üzerinde anlaşmaya varılmış kurallara sahip, doğal bir dilin uygun şekilde kısıtlanmış bir altkümesi göz önüne alındığında, kod dilbilgisi İngilizce cümlelerle yazılabilir. Örneğin, aşağıdaki dil açık bir şekilde atama ifadeleri yazılmasına izin verir:

Variables: x,y,z,...
Constants: 1,2,3,...
Rules: (1) if x is a variable and n a constant, then
           "The variable x contains the number n" is a sentence.
       (2) if x is a variable and n a constant, then
           "Assign the number n to the variable x" is a sentence.

Yani, resmi programlama dillerinde yazılan kodu her prosedürü açıklayarak sistematik olarak doğal dillere çevirebiliriz . Öte yandan, bir yazılım belirtimi genellikle yorum gerektirir. Bu nedenle, bir yazılım spesifikasyonunun açık bir şekilde verilip verilemeyeceği, spesifikasyonda yer alan detay seviyesine bağlıdır. Bununla birlikte, spesifikasyonun değiştiği seçilmiş bir domain göz önüne alındığında, bu domain üzerindeki belirli işlemler seçili olarak benzer bir çeviri işlemi gerçekleştirilebilir. Örneğin:

Over the domain D supporting operations f,g,h over elements a,b,c in relations
P,R,Q with properties φ,ψ,θ, design a program that does X,Y,Z.

ifadeleri nerede X, Y, Zşartname Önsözde de belirtildiği sadece bu öğeleri içeren ve uygun bir şekilde resmi yazılmış ve üzerinde anlaşılan bir doğal dilin alt kümesi vardır. Belirsizlikler daha sonra şartnamenin nasıl uygulanacağı ile ilgili olacaktır - ancak bu beklenecektir.


0

Hayır

Bir hesaplamanın açık bir belirtimi bir bilgisayar programıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.