Önceki yanıt için bu cevabın Revizyon 1'ine bakınız . Bununla birlikte, soruya yapılan yorumlar ve düzenlemeler sorunun ne aradığını daha da netleştirir ve daha net olmamı sağlar.
Evet, kanıta dayalı yazılım mühendisliği (EBSE) bir şeydir. Durham Üniversitesi ve SEED'de, Cal Poly'de bir profesör tarafından başlatılan EBSE veritabanlarına yönelik birkaç çaba var gibi görünüyor . Tüm bu çabaların yanı sıra IEEE Xplore sunucusu veya ACM Dijital Kütüphanesi'nde bulunabilecek bir dizi makalede ele alınanlar(her ikisinde de birçok makale için abonelik veya satın alma gereklidir) kanıta dayalı tıbba dayanmaktadır. Yayınlanmış ampirik (gözlem ve deney) verilerin literatür taramasını sağlarlar. Aslında, herhangi bir yayın aramasında bir arama dizesine "literatür taraması" dahil etmek çoğu konuda bilgi verir - ACM'de 14000'den fazla ve IEEE veritabanında 1000'den fazla isabet (yalnızca bilgi işlem konuları ile sınırlı olduğunda).
Bu EBSE veritabanlarında ve literatür incelemelerinde tartışılan genel konu türlerine baktığımda, ortak bir konu görüyorum - bunlar teknolojiden bağımsız olma eğilimindedir. Vurgu, yazılım mühendisliğini yürütmek için kullanılan özel araçlardan ziyade çoğunlukla süreç ve metodoloji etrafında toplanmış gibi görünmektedir.
Yani, bu kavram yazılım mühendisliğinde var. Academia kanıta dayalı kavramın farkındadır ve bunu yazılım mühendisliğine başarıyla uygulayabilir.
Özellikle, bir paradigma seçimine EBSE tekniklerinin uygulanmasına ilişkin soru, ilgili değişkenlerin sayısının fazla olması, varsayımların yapılmasını zorlamanın yanı sıra deneyi veya gözlemi tekrarlama yeteneğini azaltması nedeniyle zor görünmektedir. Sorunun tamında - "hangi paradigmanın" doğru cevap "olarak ortaya çıktığı söylenir, belirli bir çalışmanın hangi metriklere dikkat ettiğini, çalışmanın hangi koşulları tuttuğunu veya değiştiğini ve şüphesiz diğer faktörlere de bağlı olabileceğini" söyleyebilir . Bu, belirli bir durumda hangi paradigmanın "en iyi" çalışıldığı anlamına gelmese de, bu belgelerin her türlü literatür incelemesini tamamlamak ve bunlar arasında bilgi elde etmek için inanılmaz derecede zor hale getirir.
Bir paradigma seçmek için kesinlikle bir "krank çevirme" çözümü yoktur.
Bir programlama paradigması göz önüne alındığında, çeşitli akademik ve endüstri veritabanlarında, bu paradigmanın, yazılımın bilgi, deneyim ve deneyiminden çeşitli spesifik koşullar altında kalite, kusur, verimlilik vb. Çeşitli yönlerini nasıl etkilediğine ilişkin çalışmalar bulabilirsiniz. sorunlu etki alanına takım. Herhangi bir titiz kağıt, verilerin toplandığı koşulları ve varsayımları açıkça tanımlamalıdır. Sorun, bu koşulların her birinde iyi olmasını sağlayan faktörleri izole etmeye çalışmaktadır.
Akademik olarak, araştırılması kolay bazı ifadeler vardır. Örneğin, işlevsel paradigmanın eşzamanlılık gerektiren uygulamalar için çok uygun olduğu ifadesi Church-Rosser teoreminden kaynaklanmaktadır . Bu nedenle, işlevsel bir dilde yazılmış bir yazılım sisteminin eşzamanlılık ile ilgili olarak, yordamsal veya nesne yönelimli bir dilde yazılmış aynı sistemden daha az kusura sahip olması muhtemeldir.
Bununla birlikte, pratik bir bakış açısından, bir yazılım ekibi, sadece araştırma gösterdiği için iş için her zaman "en iyi" araç veya tekniği kullanamaz. En kaliteli yazılım sistemlerini üretmek için çaba göstersek de, kısıtlamalar dahilinde çalışıyoruz. Genellikle, herhangi bir metodolojinin etkinliğini tartışırken bu kısıtlamaların minimize edildiğini (hatta denklemden çıkarıldığını) görüyorum.
Bir uygulayıcı olarak, kullanılacak teknolojileri seçerken, mümkün olan en iyi araçları belirlemeye çalışıyorum. Ama sonra kendimi sahip olduğum ekip tarafından bilinen ve iyi anlaşılan şeyle sınırlandırıyorum. Önceki örneğime dönersek, C ++ 'da eşzamanlı uygulamalar oluşturma konusunda tecrübeli bir ekibim varsa ve Haskell'de deneyimim yoksa, muhtemelen yapamayacağım için Haskell'de sistem kurmayı önermek mantıklı değil zamanlama ve bütçe kısıtlamaları ve kalite, araç zincirindeki deneyim eksikliğinden dolayı etkilenecektir.
Özetlemek gerekirse, kanıta dayalı yazılım mühendisliği genellikle iyi bir şeydir ve literatür taramaları mevcuttur ve bunlar kolayca elde edilebilir. Bununla birlikte, kanıta dayalı yaklaşımların uygulanmasının çok az değer sağladığı yazılım mühendisliğinin bazı yönleri vardır. Programlama paradigmasının büyük ölçekli bir geliştirme çabasına seçilmesi bunlardan biridir.
İşlevsel programlamada nesne yöneliminin yeniden kullanılabilirliği veya kusurları nasıl ele aldığını öğrenmek istiyorsanız, bunlarla ilgili yayınları kolayca bulabilirsiniz. Ancak, gerçek dünyadaki yazılım mühendisliği projelerinin birçoğunda paradigma seçimini etkin bir şekilde ele alabilecek bir yayın bulamadım (veya herhangi bir güven duymayacağım).