Kritik Görev Yazılımı Nasıl Oluşturulur?


15

Ben kendi kendine öğrenim biçimsel yöntemlerim. Kritik görev yazılımı (nükleer reaktör kontrolörü, uçak uçuş kontrolörü, uzay sondası kontrolörü gibi) oluşturmak için resmi yöntemlerin kullanıldığını (ve genellikle sadece kullanıldığını) duydum. Bu yüzden öğrenmek istiyorum: p

Ancak, resmi yöntemleri öğrendikten sonra (özellikle LTL, CTL ve kardeşleri), bunların sadece spesifikasyonun doğruluğunu (güvenlik, canlılık, adalet, vb.) Doğrulamak için kullanılabileceğini hissediyorum.

Ama sonra yazılımın (sadece spesifikasyonun değil) gerçekten doğru olup olmadığı nasıl doğrulanır?

Feragatname: Teorik bilgisayar bilimi söz konusu olduğunda% 90 aptalım. Cevap verirken lütfen merhametli olun.


2
"... yazılımın gerçekten doğru olduğu ..." ile tam olarak ne demek istiyorsun ? Aşağıdakilerden hangisini kastediyorsunuz: 1) Yazılım, spesifikasyona bağlıdır 2) Belirli kod blokları, belirli bir özelliğe veya bazı girdi - çıktı ilişkilerine saygı gösterir.
Giorgio Camerani

@GiorgioCamerani: İlk
fajrian

2
Bir programın doğruluğu genellikle (1) bir spesifikasyonla tutarlı olduğu ve (2) asla çökmediği anlamına gelir. Nokta (1) aslında kendi başına programdan ziyade çift (program, şartname) hakkında bir ifadedir. Diğer bir komplikasyon, 'program'ın genellikle' programın modeli 'için bir kısayol olmasıdır, çünkü programların kendileri oldukça karmaşıktır veya kesin anlambilimleri yoktur. Bu göz önüne alındığında, sanırım bir program ve modeli arasındaki boşluğu soruyorsunuz, ama tam olarak emin değilim.
Radu GRIG

@RaduGRIGore: Aslında "model" in ne olduğunu anlamıyorum. Ama sanırım sorumu çok yakından ele alıyorsunuz. Temel olarak, merak ediyorum ne şartname ve program kaynak kodu arasındaki boşluk. Programcılar (benim gibi) belirtimi uygularken birçok aptalca şey olabilir.
fajrian

1
@fajrian: 'Model' dediğim şey için 'şartname' dediğinden şüpheleniyorum. C veya Java gibi dillerde yazılmış programlarda veya hatta makine kodunda çalışan araçlar vardır. (Yine de bir modeldir, çünkü bazı semantikleri varsaymaları gerekir , bu da derleyicinin / işlemcinin ne yaptığına karşılık gelmelidir , ancak olmayabilir de.)
Radu GRIGore

Yanıtlar:


11

Soru oldukça geniştir. Bunu makul bir alanda cevaplamak için çok fazla basitleştirme yapacağım.

Terminoloji üzerinde anlaşalım. Bir program belirtimini ima ettiğinde doğrudur . Bu belirsiz ifade, bir programın tam olarak ne olduğunu ve bir spesifikasyonun tam olarak ne olduğunu tespit ederek birçok yönden kesinleşir. Örneğin, model kontrolünde program bir Kripke yapısıdır ve spesifikasyon genellikle bir LTL formülüdür. Veya program PowerPC talimatlarının bir listesi olabilir ve şartname , birinci dereceden mantıkla yazılmış bir dizi Hoare-Floyd iddiası olabilir. Çok fazla olası varyasyon var. Bir durumda (Kripke yapısı) gerçek bir programı doğrulamadığımızı, ikinci durumda da (PowerPC talimatları listesi) yaptığımızı sonuçlandırmak caziptir. Ancak, her iki durumda da matematiksel modellere gerçekten baktığımızı fark etmek önemlidir ve bu gayet iyi. (Durum, örneğin klasik mekaniğin gerçekliğin matematiksel bir modeli olduğu fiziğe oldukça benzer.)

Çoğu formalizasyon bir programın sözdizimi ve anlambilimi arasında ayrım yapar; yani, nasıl temsil edildiği ve ne anlama geldiği. Bir programın anlambilimi, program doğrulaması açısından önemli olan şeydir. Ancak, elbette programlara (sözdizimsel temsiller) anlamlar atamak için açık bir yol olması önemlidir. İki popüler yol şunlardır:

  • (küçük adım) operasyonel semantik : Bu, bir programlama dili yazarak bir tercüman yazarak tanımlamaya benzer. Bunun için ne söylemek gerekir devlet ve dildeki her ifade etkilenir. (Tercümanı hangi dilde yazdığınızı merak edebilirsiniz, ama sanki değilmişim gibi davranacağım.)
  • aksiyomatik semantik : Burada her ifade tipi bir aksiyom şeması ile birlikte gelir. Yani, kabaca, bu türden belirli bir ifade her kullanıldığında, belirli aksiyomları kullanabilme anlamına gelir. Örneğin, ataması şema ile birlikte gelirx:=e ; belirli atama x : = x +{P[x/e]}x:=e{P}{ x + 1 = 1 } aksiyomuyla birlikte gelirx:=x+1Şemayı P ile başlatırsak { x = 1 }{x+1=1}x:=x+1{x=1}.P=(x=1)

(Başkaları da var. Anlamsal anlambilimi atladığım için özellikle kötü hissediyorum, ancak bu cevap zaten uzun.) Makine kodu artı operasyonel anlambilim çoğu insanın 'gerçek program' olarak adlandırdığı şeye oldukça yakın. DEC Alpha makine kodunun bir alt kümesi için operasyonel semantik kullanan bir seminal makale:

Neden hiç aksiyomatik olanlar gibi daha üst düzey anlambilim kullanırsınız? Doğruluk kanıtınızın çalıştığınız donanıma bağlı olmasını istemediğinizde. Bu durumda yaklaşım, bir algoritmanın bazı uygun yüksek seviyeli semantiğe göre doğruluğunu kanıtlamak ve daha sonra semantiğin gerçek makinelere daha yakın olan daha düşük seviyeli semantiğe göre geldiğini kanıtlamaktır.

Özetle, sorunuza yol açan üç nedeni düşünebilirim:

  1. Yalnızca bir programı çağırmak için kullandığınız şeye benzemeyen yüksek seviyeli semantikleri gördünüz ve düşük seviyeli olanlar olup olmadığını merak ediyorsunuz. Cevap Evet.
  2. Bir modelin gerçeğe karşılık geldiğini nasıl kanıtladığınızı merak ediyorsunuz. Fizikte olduğu gibi, yapmazsınız. Sadece daha iyi modeller bulup bunları gerçekliğe karşı kontrol ediyorsunuz.
  3. Sözdizimi ve anlambilim arasındaki farkı ve programlara anlam atamanın çeşitli yollarını görmediniz. İkiÖnceki soruda bazı kitaplar listelenmiştir.

Bu cevap sadece soruyu anladığım üç farklı yolu tanımlamaya çalışıyor. Herhangi bir derine inmekBu noktaların birinde çok fazla alan gerektirir.


8

Bir program ve belirtimi arasındaki boşluğu azaltmaya yönelik bir yaklaşım, resmi bir semantik ile bir dil kullanmaktır. Burada ilginç bir örnek Esterel olacaktır . Gerçek dünyaya resmi yöntemler getiren çalışmaları hakkında ilginç konuşmalar için Gérard Berry'nin web sayfasına bir göz atın. http://www-sop.inria.fr/members/Gerard.Berry/

ps Airbus bölgesinde bulundunuz mu? Resmi yöntemlerle uçtunuz!


1
Airbus'ın resmi yöntemleri nasıl kullandığına dair herhangi bir referans yararlı olacaktır. (onun muhtemelen tescilli bilgisini anlayın.)
vzn

@RossDuncan Bu web sayfasını Berry'nin web sayfasına ve birkaç arama yaptıktan sonra buldum . Bu, Airbus'ın bahsettiğiniz resmi yöntemler midir?
scaaahu

Esterel'in Airbus kullanımı ile ilgili herhangi bir iç bilgim yok; benim yorumum sadece Berry'nin bir ders sırasında yaptığı bir yorumu tekrarlıyor. Ancak bu sayfa SCADE ürününün Airbus ile başarılı bir şekilde kullanılmasını engellemektedir. Esterel'in tarihine bakarsanız, Dassault tarafından oldukça erken benimsenmiştir. Google Senin Arkadaşın.
Ross Duncan

2
Airbus ayrıca astree.ens.fr
Radu GRIGDaha

7

"Gerçek dünyada" güvenilir yazılım oluşturma bilimi hala geliştirilmektedir ve bir dereceye kadar doğası gereği kültürel veya antropolojik bir çalışma için sınırlıdır, çünkü bilgisayarlar ve yazılım hatalara "neden olmaz" - insanlar yapar! bu cevap, resmi yazılım doğrulamasının tek bir unsur olarak görülebileceği genel Soru-Cevap yaklaşımlarına odaklanacaktır.

dikkat çekici bir gözlem, genellikle "yeterince iyi" ancak "buggy" olan yazılımların, piyasada daha iyi test edilmiş ancak daha düşük işlevsellik yazılımlarından daha iyi satılabileceğidir. başka bir deyişle, pazar her zaman kaliteyi her zaman vurgulamayan yazılım kalitesine ve modern yazılım mühendisliği tekniklerine her zaman bir prim koymaz. ayrıca kalite genellikle nihai ürüne önemli bir masraf katabilir. bu uyarılarla ilgili bazı temel bilgiler:

  • artık / hataya dayanıklı sistemler. bu geniş bir çalışma alanıdır. hata toleransı ve artıklık bir sistemin birçok katmanında tasarlanabilir. örneğin bir yönlendirici, bir sunucu, bir disk sürücüsü, vb.

  • test . tüm tipler - birim testi, entegrasyon testi, kullanıcı kabul testi, regresyon testi vb.

  • günümüzde katılımsız çalıştırılabilen test paketleri aracılığıyla otomatik test yapılması daha gelişmiş / önemlidir. çalışan test süitleri genellikle derleme aracı ile birleştirilir.

  • testte önemli bir kavram kod kapsamıdır . yani hangi kodun olduğu icra testi ile. bir test kodda test tarafından "dokunulmayan" bir hata bulamaz.

  • Testteki diğer bir anahtar kavram , egzersiz koduna doğrudan erişilemeyen test koşumudur .

  • testler yazılımın tüm seviyelerini kullanmalıdır. yazılım iyi modülerleştirilmişse, bu zor değildir. daha yüksek seviye testleri koda derinlemesine nüfuz etmelidir. küçük test kurulumuyla büyük miktarda kod kullanan testler "test kaldıraçını" artırır .

  • kodun olabildiğince karmaşık hale getirilmesi test için önemlidir. mimari tasarımda test dikkate alınmalıdır. çoğu zaman aynı özelliği uygulamanın birden fazla yolu vardır, ancak bazılarının test kapsamı / kaldıraç üzerinde çok farklı etkileri vardır. koddaki her dal için, bu genellikle başka bir test durumudur. dallar içindeki dallar kod yollarında üstel artışa yükselir. bu nedenle yüksek oranda iç içe / koşullu mantıktan kaçınmak test etme yeteneğini geliştirir.

  • okuyan ünlü (masif) yazılım hatalarına birçok örnek ve vaka çalışmaları var olan kalite kaygılarla güdülenmiş bir zihniyet tarihi anlamak ve geliştirmek için yararlıdır.

  • bir test ile taşınabilir! hem çok az hem de çok fazla test ile ilgili bir sorun var . "tatlı bir nokta" var. yazılım her iki uçta da başarıyla oluşturulamaz.

  • tüm temel araçları en etkili şekilde kullanır. hata ayıklayıcılar, kod profilleri, test kodu kapsamı araçları, hata izleme sistemi, vb! mutlaka düzeltmeyi taahhüt etmez, ancak izleme yazılımındaki en küçük kusurları bile izler .

  • SCM, kaynak kodu yönetimi ve dallanma tekniklerinin dikkatli kullanımı, regresyonlardan kaçınmak, düzeltmeleri ve ilerleyen düzeltmeleri vb.

  • N-Versiyonu Programlama : Kritik Görev Yazılımı geliştirmek için sıklıkla kullanılan bir uygulamadır. Bu uygulamanın temeli, bağımsız olarak geliştirilen N programların aynı ortak hata / hataya sahip olma ihtimalinin düşük olmasıdır. Bu, birkaç makalede eleştirilmiştir. Ancak NVP teorik bir kavram değildir.

Fizikçi Feynman'ın NASA'nın "Diğer insanların ne düşündüğünü umursuyorsun?" Kitabında uzay mekiği sistemlerinin güvenilirliğini garanti etmek için kullandığı yöntemi biraz açıkladığına inanıyorum. - A takımının ve B takımının yazılımı oluşturduklarını söyleyen iki takımları olduğunu söyledi. B takımı A Takımına düşmanca bir yaklaşım benimsedi ve yazılımı kırmaya çalıştı.

B Takımının iyi bir yazılım mühendisliği geçmişine sahip olması durumunda yardımcı olur, yani kod koşum takımı / programatik testler vb. bu durumda B Takımı, A Takımı ile neredeyse eşit düzeyde kaynağa sahipti, bu yaklaşım pahalıdır çünkü yazılımı oluşturma maliyetini neredeyse iki katına çıkarabilir. daha tipik olarak, geliştirme ekibine kıyasla daha küçük bir KG ekibi vardır.


8
Birisi, Shift tuşuna ve bir harfe basmanın büyük harf ürettiğini belirten, işletim sisteminizin doğruluğunu kontrol etmelidir.
Andrej Bauer

1
Zeyilname: zamanlama kısıtlamaları kaliteyi etkileyebilir. bakınız ayrıca proje mgt üçgen kalitesi ile kapsam, maliyet, zamanlama da bakınız tüm 3 etkilenen "alanı" oluşan "Neden Bilişim sektörü diğer sektörlerde kısa sürede büyük, hatasız projeler teslim edemez?" . N-Version öğesini kendim eklemedi [diğer yanıtı da] ancak Feynman'ın NASA'nın uzay mekiği tasarımında da kullandığını belirtti.
vzn


1
bir başka ilginç örnek olay , büyük bir kod koduna sahip olan ve çoğu otomatik olarak üretilen mars gezgini . bu durumda önceki geziciler alanı yazılımın çoğunu test etti ve yeniden kullanıldı.
vzn

6

Eski bir yaklaşım (ancak yine de bazı uygulamalarda kullanılmaktadır) N sürümü programlamadır

Wikipedia'dan:

N-sürüm programlama ( NVP olarak da bilinir), multi-versiyon programlama , çok sayıda fonksiyonel olarak eşdeğer programları, bağımsız bir şekilde, aynı başlangıç özellikleri elde yazılım mühendisliğinde yöntemi veya bir işlemdir. N-versiyonu programlama kavramı 1977 yılında Liming Chen ve Algirdas Avizienis tarafından “programlama çabalarının bağımsızlığının, programın iki veya daha fazla versiyonunda meydana gelen özdeş yazılım hatalarının olasılığını büyük ölçüde azaltacağı” ana düşüncesi ile ortaya atılmıştır. NVP'nin amacı, hataya dayanıklılık veya artıklık oluşturarak yazılım işletiminin güvenilirliğini artırmaktır.
....

Örneğin bakınız: " Bina Hatasındaki Zorluklar - Sivil Hava Aracı için Toleranslı Uçuş Kontrol Sistemi "


N-sürümü programlamanın çalışmadığını belirtmek gerekir . Temel varsayım - yani yazılım geliştirme sürecinin tekrarlanan denemelerindeki hataların bağımsız olduğu varsayımı - tamamen yanlıştır . Bu fikir teorik olarak hiçbir anlam ifade etmiyor (uygulanması zor bir algoritma ikinci bir bağımsız ekip için sihirli bir şekilde kolaylaşmayacak) ve deneysel olarak da tartışıldı: John Knight ve Nancy Leveson'un bağımsızlık varsayımının istatistiksel olarak geçerli olmadığını gösteren deneyi yazılım mühendisliğinin en ünlü gazetelerinden biridir.
Neel Krishnaswami

@NeelKrishnaswami: Katılıyorum! Bence (ama ben bir uzman değilim) Ancak bu çalışma değil değiştirilmelidir diğer yaklaşımlarla karşılaştırıldığında gerekiyorsa olduğu kadar güvenilirliğini artırmak gelmez o . Alıntı: K&L: " ... Sonuçlarımızın N-sürümü programlamanın etkinliği hakkında bir karar için temel olarak kullanılması gerektiğini hiç önermedik. Sadece dikkatin uygun olacağını önermiştik ... ". NVP yaklaşımının kritik sistem tasarımı için ne kadar yararlı olabileceğine dair tartışmaların hala açık olduğunu düşünüyorum (Khoury ve arkadaşlarının son çalışmalarına bakın)
Marzio De Biasi

4

Fajrian, yaptığınız bu soru, yazılım mühendisi araştırmalarındaki en büyük sorunlardan ikisini kapsar: şartname ve model ve model ile kod arasındaki uyumluluk. Burada sistemin ne yapacağının veya nasıl yapılacağının bir temsilini modelleyin, bir sistemi modellemek için birçok seviye vardır.

Yani, sorunuza en iyi yanıtı bulmaya çalışan bazı insanlar var. Çünkü, örneğin resmi yöntemler kullanarak, bir modele dayalı bir yazılımın doğruluğunu kontrol etmek çok zordur. Biliyorum JML bunu yapmak için bir yoldur, ama ben onun kullanım sınırlarını bilmiyoruz.

Tamamlamak için, kodun doğruluğunu kontrol etmenin ne kadar zor olduğunu, insanlar resmi yöntemleri ve testi karıştırmaya çalışırlar, örneğin spesifikasyonlardan otomatik olarak test oluştururlar. Gerçek zamanlı sistemlere örnek olarak girdi / çıktı zamanlamalı olaylara dayanan TIOSTS verilebilir .

Test yapmak sadece resmi bir yöntem yaklaşımı değildir, bunu yapmak güvenilirliği arttırır ancak doğruluğunu kontrol etmez.


3

İki veya üç yıl önce yazılıma uygulanan resmi yöntemlere bakmaya başladım. Bu, meraktan ve daha uzun zaman aralıklarıyla programlama araçlarını ve yöntemlerini öğrenmek zorunda olduğum hissiyle yönlendirilen bir görevdi. Her ne kadar Gümüş Kurşun hakkında düşlemiş olsam da, gerçekten "Doğru programı nasıl yazabilirim?"

Bazı araçları (Z, B, VHDL ve Estelle) denedikten sonra görevin bu noktasında TLA + kullanıyorum . Bu, model kontrolü ve mekanik kanıtlar için yazılım araçları içeren bir zamansal mantık çeşididir. Bu yaklaşımı seçtiğimi düşünüyorum, çünkü L. Lamport arkasındaydı, sözdizimi basitti, birçok örnek vardı, ilgilenen bir topluluk vardı ve dil ve araçlar oldukça iyi belgelendi.

İlk sorumla ilgili olarak, tam bir cevap olmadığını düşünüyorum. Bununla birlikte, bir sistemin bazı kısımlarını resmi olarak belirtmenin işe yaradığını öğrenmeye değer. Bazı karmaşık olanları tersine mühendislik yapmak da oldukça yararlıdır. Yani, zor ve kritik parçalar için bir plan oluşturmak etkilidir. Ancak, spesifikasyonu bir programlama diline veya çerçevesine otomatik olarak çevirmek için etkili bir yöntem olduğunu düşünmüyorum (projeyi çok belirli bir ortamla kısıtlamadığınız sürece). Resmi bir spesifikasyona sahip olmanın yazılımı test etmenizi engellemesini de düşünmüyorum.

Özetle, aşağıdaki metaforun (Lamport'tan) gerçekten güçlü olduğunu düşünüyorum: "Bir evin otomatik olarak bir plandan inşa edilmesini mi bekliyorsunuz? Henüz inşa edilmemiş ve planı olmayan bir ev satın alacak mısınız?" .

Bu görev sırasında aşağıdaki kaynakları yararlı buldum:

  • Yazılım Spesifikasyon Yöntemleri . Bu kitap, mevcut yöntemler ve araçlar hakkında geniş bir genel bakış sunmaktadır. Burada Z, SDL, TLA +, Petri Nets, Coq, vb.'nin temel açıklamalarını ve örneklerini bulabilirsiniz.
  • TLA + 'nın ihtiyaçlarınızı karşıladığını düşünüyorsanız, Sistemleri Belirleme kitabını gerçekten tavsiye ederim . Kitabı ücretsiz olarak alabilirsiniz ve :) ile oynamak için örneklerle birlikte gelir.
  • Son zamanlarda, resmi yöntemlerin tekniğinin durumuna iki farklı bakış açısı veren birkaç ilgili makaleyi okudum: Resmi Yöntemler Örneği ve Resmi Olarak Doğrulanmış Matematik .

İyi şanslar!


1

Şimdiye kadar verilen cevaplar, şartname ve kodun birbiriyle nasıl ilişkili olduğunun temelleri hakkında söylenmesi gerekenlerin çoğunu zaten kapsıyordu. Bu konunun başlığında soruna yaklaşan daha pratik bir nokta eklemek istiyorum:

Kritik görev yazılımı nasıl oluşturulur?

Kodunuzu hatalar için otomatik olarak analiz eden araçlar vardır (belirtimin ihlali veya "tipik hatalar"). Bildiğim kadarıyla, bu yöntemler çoğunlukla statik analiz üzerine kuruludur ve bahsettiğiniz teorilerle hemen ilişkili değildir (LTL / CTL / ...), ancak gerçek kodda hatalar bulurlar ve pratik bir noktadan zaten mümkündür. endüstriyel projelerde bu tür araçları kullanmak için. Şahsen pek çoğunu kullanmadım, ancak bu araçların uygulayıcılar tarafından kabul görmeye başladığı anlaşılıyor. Daha fazla okumak için aşağıdaki blog makalesini önerebilirim:

http://www.altdevblogaday.com/2011/12/24/static-code-analysis/


Java ile örnek uygulama, açık kaynak
apache

0

Kritik algoritmalar , kritik görev yazılımı oluştururken yararlı olabilir.

Sertifika algoritması, her bir çıktıda, belirli bir çıktının bir hatadan ödün vermediğini gösteren bir belge veya tanık (doğrulanması kolay kanıt) üreten bir algoritmadır.

Bu araştırma makalesinde daha fazlasını okuyun : McConnell, RM ve Mehlhorn, K. ve Naher, S. ve Schweitzer, P.


1998 yılında, Pnueli, Siegel ve Singerman derleyicilere uygulanan bu fikri çeviri doğrulaması adı altında anlattı . Derleyiciler doğası gereği daha üst düzeydir (giriş bir programdır, çıkış bir programdır), bu nedenle doğrulanması zor olma eğilimindedir. Ama yine de X. Leroy gibi doğrulanmış derleyiciler geliştiren çılgın insanlar var. (Mümkün olan en iyi anlamda çılgın!)
Radu GRIGore

-2

Ama sonra yazılımın (sadece spesifikasyonun değil) gerçekten doğru olup olmadığı nasıl doğrulanır?

Birim testi? Spesifikasyondaki her bir gereksinim için bir test yazın ve ardından çıktısının / girişinin söz konusu spesifikasyona uygun olduğunu görmek için uygulamanızdaki her bir yöntemi test edin. Bu otomatikleştirilebilir, böylece daha önce çalışan özelliklerde hiçbir değişiklik olmaması için bu testler sürekli olarak çalıştırılır.

Teorik olarak, eğer birim testleriniz% 100 kod kapsamına sahipse (yani kodunuzdaki her bir yöntem test edilirse), testlerin doğru ve gerçekçi olması koşuluyla yazılımınız doğru olmalıdır.


5
Oldukça karmaşık herhangi bir program için, kod kapsamı (test ederek) doğruluk sağlayamaz. Olası tüm infazları kapsamalısınız; tüm kod satırları yeterli değildir .
Radu GRIGDaha fazla

1
Kod kapsamı çok belirsiz bir kavram. Örneğin yöntem kapsamı, ifade kapsamı, şube kapsamı, yol kapsamı vb. Radu'nun belirttiği gibi, önemsiz olmayan programlar için testler genellikle kombinasyonel patlamalara maruz kalır. Bununla birlikte, havacılık yazılımının oldukça iyi bir geçmişi var ve doğruluğu genellikle kapsamlı testlere dayanıyor.
Martin Berger

JUnit gibi araçlarla test yapmak istiyorsanız, bu tür standart otomatik testler her durumu kapsamaz (program çok küçük olmadığı sürece). Tipik uygulama için, bu tür testler tipik olarak yeterlidir. Ancak kritik görev uygulamaları için bunun yeterli olup olmadığını bilmiyorum.
fajrian

2
@vzn: Deneyimlerime göre, akademisyenler tarafından böcek olarak kabul edilenler ve uygulayıcılar arasında dikkate değer bir anlaşma var. Ayrıca, endüstrideki (eski) meslektaşlarımın çoğunun "kodunuzdaki her yöntemin test edildiğini" çok güven verici bulmayacağına katılıyorum. (Ve hayır, aşağı inmedim. Neredeyse hiç yapmıyorum.)
Radu GRIG

1
@vzn: Aksini söylediğini mi söyledim? Sadece başkalarının neden bu cevabı desteklemediğine inandığımı açıklamaya çalışıyordum. Şu anda bu soruya cevap veremiyorum, çünkü anlamıyorum.
Radu GRIGaha fazla
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.