Programlama karmaşıklığı - Programming complexity
Programlama karmaşıklığı (veya yazılım karmaşıklığı ), tümü dahili etkileşimleri etkileyen bir yazılım parçasının birçok özelliğini içeren bir terimdir. Birkaç yorumcuya göre, karmaşık ve karmaşık terimler arasında bir ayrım vardır. Karmaşık, anlaşılması zor, ancak zaman ve çaba ile sonuçta bilinebilir anlamına gelir. Karmaşık ise bir dizi varlık arasındaki etkileşimleri tanımlar. Varlık sayısı arttıkça, aralarındaki etkileşimlerin sayısı katlanarak artacak ve hepsini bilmenin ve anlamanın imkansız olduğu bir noktaya gelecektir. Benzer şekilde, yazılımdaki daha yüksek karmaşıklık seviyeleri, etkileşimlere istemeden müdahale etme riskini artırır ve bu nedenle, değişiklik yaparken kusurların ortaya çıkma olasılığını artırır. Daha aşırı durumlarda, yazılımı değiştirmeyi neredeyse imkansız hale getirebilir. Yazılım karmaşıklığını yazılımın sürdürülebilirliği ile ilişkilendirme fikri , araştırmasından Yazılım Evrimi Yasalarını geliştiren Profesör Manny Lehman tarafından kapsamlı bir şekilde araştırılmıştır . O ve ortak yazarı Les Belady , sık sık alıntı yaptıkları kitaplarında, yazılımın durumunu ölçmek için kullanılabilecek çok sayıda olası Yazılım Ölçüsünü araştırdı ve sonunda tek pratik çözümün deterministik karmaşıklığı kullanan bir çözümün kullanılması olacağı sonucuna vardı. modeller.
Ölçümler
Birçok yazılım karmaşıklığı ölçüsü önerilmiştir. Bunların birçoğu, karmaşıklığın iyi bir temsilini sağlamasına rağmen, kolay ölçüme uygun değildir. Daha yaygın olarak kullanılan metriklerden bazıları
- McCabe'nin siklomatik karmaşıklık metriği
- Halsteads yazılım bilimi metrikleri
- Henry ve Kafura, karmaşıklığı fan içeri ve dışarı yaymanın bir işlevi olarak ölçen Bilgi Akışına Dayalı Yazılım Yapısı Metriklerini 1981'de tanıttı. Bir prosedürün girişini, o prosedüre yerel akışların sayısı artı bu prosedürün bilgiyi aldığı veri yapılarının sayısı olarak tanımlarlar. Yayılma, o prosedürden çıkan yerel akışların sayısı artı prosedürün güncellediği veri yapılarının sayısı olarak tanımlanır. Yerel akışlar, söz konusu prosedürü çağıran veya çağıran prosedürlere ve bu prosedürlerden aktarılan verilerle ilgilidir. Henry ve Kafura'nın karmaşıklık değeri, "yordam uzunluğunun, fan girişinin karesiyle çarpımının yayılma ile çarpımı" (Uzunluk × (fan girişi × yayma) ²) olarak tanımlanır.
- 1994 yılında Chidamber ve Kemerer tarafından Nesneye Yönelik Tasarım için Metrikler Paketi tanıtıldı ve başlığın da önerdiği gibi, özellikle nesne yönelimli kod için ölçütlere odaklanıldı. Altı OO karmaşıklık ölçütü sunarlar; Sınıf başına ağırlıklı yöntemler, nesne sınıfları arasında bağlantı, bir sınıf için yanıt, çocuk sayısı, kalıtım ağacının derinliği ve yöntemlerin uyum eksikliği
Programlama karmaşıklığını ölçmek için kullanılabilecek birkaç başka ölçüm vardır:
- Dallanma karmaşıklığı (Öngörülen Metrik)
- Veri erişim karmaşıklığı (Kart Ölçüsü)
- Veri karmaşıklığı (Chapin Metric)
- Veri akışı karmaşıklığı (Elshof Metric)
- Karar karmaşıklığı (McClure Metric)
Tesler Yasası bir olan atasözü de insan-bilgisayar etkileşimi her belirten uygulaması kaldırıldı veya gizlenemez karmaşıklık doğal bir miktarda vardır.
Türler
Mevcut bir programın karmaşıklığıyla ilişkili ve buna bağlı olarak, programın değiştirilmesiyle ilişkili karmaşıklık vardır. Bir sorunun karmaşıklığı iki bölüme ayrılabilir:
- Yanlışlıkla karmaşıklık: Bir programcının seçilen yazılım mühendisliği araçları nedeniyle karşılaştığı zorluklarla ilgilidir. Daha uygun bir araç seti veya daha üst düzey bir programlama dili bunu azaltabilir. Tesadüfi karmaşıklık genellikle, çözümün biçimini, yani kodu çerçevelemek için alanın kullanılmamasının bir sonucudur. Kazara oluşan karmaşıklığı önlemeye yardımcı olabilecek bir uygulama, etki alanına dayalı tasarımdır .
- Temel karmaşıklık: Çözülecek problemin özelliklerinden kaynaklanır ve azaltılamaz.
Chidamber ve Kemerer Metrikleri
Chidamber ve Kemerer, birçok ölçümde ve akademik makalede yaygın olarak kullanılan bir dizi programlama karmaşıklık ölçütü önerdi. Aşağıda açıklanan WMC, CBO, RFC, NOC, DIT ve LCOM bunlar:
- WMC - sınıf başına ağırlıklı yöntemler
- n, sınıftaki yöntem sayısıdır
- yöntemin karmaşıklığı
- CBO - nesne sınıfları arasında bağlantı
- bağlanan diğer sınıf sayısı (kullanan veya kullanılan)
- RFC - bir sınıf için yanıt
- nerede
- yöntem i tarafından çağrılan yöntemler kümesidir
- sınıftaki yöntemler kümesidir
- NOC - çocuk sayısı
- Bu sınıfı veya onun soyundan gelen tüm sınıfların toplamı
- DIT - miras ağacının derinliği
- bu sınıf için miras ağacının maksimum derinliği
- LCOM- yöntemlerin uyum eksikliği
- Sınıf yöntemleri tarafından ortak olarak kullanılan özniteliklerin kesişimini ölçer
- Nerede
- Ve
- İle erişilen özelliklere (örneğin değişkenler) grubu olduğu (okuma veya yazılır) ile sınıfının inci yöntemi
Ayrıca bakınız
- Yazılım krizi (ve sonraki programlama paradigması çözümleri)
- Yazılım ölçütleri - bir programın bazı özelliklerinin nicel ölçüsü.