Program kodu ve ölçümleri. Veri akışı karmaşıklığı metrikleri

  • 30.04.2019

Berg O.Yu.

YAZILIM KALİTESİNİN DEĞERLENDİRİLMESİNE YÖNELİK ÖLÇÜMLER

Veri işlemenin hayatımızı giderek daha fazla etkilemesi nedeniyle, bilgisayar hataları artık maddi hasar, mahremiyetin ihlali ve ölüm dahil daha pek çok sonuç doğurabilmektedir. Güvenilirlik yazılım(yazılım), her bir arızanın kullanıcıya maliyeti dikkate alınarak hesaplanan, belirli bir süre boyunca hatasız çalışma olasılığıdır. Bu nedenle yazılım kalitesini geliştirme döngüsü boyunca ölçebilmek gerekir. Yazılım kalitesinin kalite kriterlerine göre değerlendirilmesi tavsiye edilir; bu kriterler:

Ana sayıyı sayısal olarak karakterize edin hedef işlevi programlar;

Gerekli kalite seviyesine ulaşmak için gereken maliyetlerin yanı sıra çeşitli kalite göstergeleri üzerindeki etki derecesini belirleme yeteneği sağlayın dış faktörler;

Mümkün olduğu kadar basit, iyi ölçülebilir ve düşük varyansa sahip olun.

Metrikler, özellikleri ve kalite kriterlerini ölçmek için kullanılır. Şu anda yazılımın bireysel üretim ve operasyonel özelliklerini değerlendiren çok sayıda ölçüm bilinmektedir. Ancak geliştirilen yazılımın kapsamı göz ardı edilerek evrensellik arayışı, aşamalar yaşam döngüsü kullanım verimliliğini önemli ölçüde azaltır.

Program kalitesi metriği, program kalitesini ölçmek için kullanılan bir sistemdir. Bu ölçümler program kalite kriterleri düzeyinde veya bireysel kalite özellikleri düzeyinde yapılabilir. İlk durumda, ölçüm sistemi programları kalite açısından doğrudan karşılaştırmanıza olanak tanır. Üstelik ölçümlerin kendisi, programların özelliklerine ilişkin subjektif değerlendirmeler yapılmadan gerçekleştirilemez. İkinci durumda, özellikler nesnel ve güvenilir bir şekilde ölçülebilir, ancak yazılım kalitesinin bir bütün olarak değerlendirilmesi, ortaya çıkan derecelendirmelerin öznel bir yorumuyla ilişkilendirilecektir.

Yazılım metriklerinin incelenmesinde iki ana yön vardır:

Programların en spesifik özelliklerini karakterize eden metrikleri arayın; yazılımın kendisini değerlendirmeye yönelik ölçütler;

Teknik performansı ve yazılım geliştirme faktörlerini değerlendirmek için ölçümlerin kullanılması; Program geliştirme koşullarının değerlendirilmesine yönelik ölçütler.

Yazılım kalitesini değerlendirirken elde edilen bilgi türüne göre metrikler üç gruba ayrılabilir:

İlk tasarım malzemelerinin özelliklerinde normdan sapmaları değerlendiren metrikler. Kaynak kodunun belirtilen teknik özelliklerinin eksiksizliğini belirlerler.

Geliştirilen yazılımın kalitesini tahmin etmenizi sağlayan metrikler. Set üzerinde tanımlanırlar

olası seçenekler Belirli bir problemin çözümleri ve bunların uygulanması ve yazılımın kalitesinin belirlenmesi

sonunda ulaşılacaktır.

Nihai yazılımın belirtilen gereksinimleri karşılayıp karşılamadığına ilişkin kararın verildiği ölçümler. Geliştirmenin belirtilen gereksinimlere uygunluğunu değerlendirmenize olanak tanır.

Şu anda dünya pratiğinde yüzlerce program metriği kullanılmaktadır. Mevcut niteliksel program değerlendirmeleri altı alanda gruplandırılabilir:

Programların topolojik ve bilgi karmaşıklığının tahminleri;

Arıza durumlarının tahmin edilmesine olanak tanıyan yazılım sistemlerinin güvenilirliğinin değerlendirilmesi;

Tasarım hatalarını tanımlayarak yazılım performansını değerlendirmek ve verimliliğini artırmak;

Dil araçlarının düzeyinin değerlendirilmesi ve uygulanması;

Program metinlerini algılama ve anlama güçlüğüne ilişkin değerlendirmeler,

programların sürdürülmesi ve değiştirilmesi için gerekli olan psikolojik faktörler;

Program geliştirme zamanlamasını tahmin etmek için programcıların üretkenliğini tahmin etmek ve yazılım sistemlerinin oluşturulmasına yönelik çalışmayı planlamak.

Kullanılan metriklerin özelliklerine ve özelliklerine bağlı olarak çeşitli ölçüm ölçekleriyle ilişkilendirilirler:

Nominal ölçek, derecelendirmeleri hesaba katmadan, bazı özelliklerin varlığına veya yokluğuna dayalı olarak programları türlere göre sınıflandıran metriklere karşılık gelir;

Sıralı ölçek, belirli özellikleri referans değerleriyle karşılaştırarak sıralamanıza olanak tanıyan metriklere karşılık gelir; bu ölçekteki ölçüm aslında belirli programların göreceli konumunu belirler;

Aralık ölçeği, programların yalnızca göreceli konumunu değil aynı zamanda birbirlerinden ne kadar uzakta olduklarını da gösteren metriklere karşılık gelir;

Göreceli ölçek, yalnızca programları belirli bir şekilde düzenlemeye ve birbirlerine göre konumlarını değerlendirmeye değil, aynı zamanda tahminlerin özelliğin ölçülebileceği sınırdan ne kadar uzakta olduğunu belirlemeye de olanak tanıyan metriklere karşılık gelir.

Yazılım üretim liderlerinin teknolojik deneyiminin bir analizi, çözülebilirlik ve işçilik maliyetlerinin bilimsel olmayan tahminlerinin kusurlu olması, programların karmaşıklığı, gelişimlerinin kontrol ve yönetiminin esnek olmaması ve çok daha fazlası için ne kadar pahalı olduğunu gösterir. uçtan uca metodolojik desteğin sağlanması ve sonuçta kullanıcı gereksinimlerine ve gerekli standarda uyulmamasına ve bunun ardından zahmetli ve zaman alıcı bir şekilde yeniden çalışılmasına yol açmaktadır. Bu koşullar, yazılım kalitesini değerlendirmek için tekniklerin, modellerin, yöntemlerin dikkatli bir şekilde seçilmesini, çeşitli yaşam döngülerine uygunluklarının sınırlamalarını dikkate almayı, ortak kullanım sırasını oluşturmayı, aynı göstergelerin gereksiz heterojen araştırmalarının kullanımını artırmak için kullanılmasını gerektirir. mevcut değerlendirmelerin güvenilirliği, zamanında üretim kararları almak ve nihai ürün sertifikasyonu için heterojen metrik bilgilerin birikmesi ve entegrasyonu.

Sonuç olarak, yazılım kalitesini değerlendirmek için metrikler seçerken aşağıdaki kurallara göre yönlendirilmeniz gerektiğine dikkat edilmelidir:

Metriğin hem müşteri hem de icracı için anlamlı olması gerekir;

ölçü nesnel olmalı ve tanımı açık olmalıdır;

metrik, değişikliklerin eğilimini takip etmeyi mümkün kılmalıdır;

metrik otomatikleştirilebilir.

Geliştirme hedeflerine uygun olarak dikkatle yürütülen metrik kalite analizi, gerekli performans ve kaynak verimliliğine ulaşmak için kalite maliyetlerinin doğru planlanması ve kontrolünün temelini oluşturur.

EDEBİYAT

1. Liu K., Zhou S. Yang H., Yazılım Geliştirme ve Yeniden Geliştirme için Nesne Yönelimli Tasarımın Kalite Metrikleri, - Birinci Asya-Pasifik Kaliteli Yazılım Konferansı Bildirileri, 2000 IEEE

2. Boehm B. W., Brown J. R., Lipow M. YAZILIM KALİTESİNİN NİCEL DEĞERLENDİRİLMESİ 2. Uluslararası Yazılım Mühendisliği Konferansı Bildirileri Uluslararası yazılım mühendisliği konferansı Ekim 1976

3. Houdek F., Kempter H. Kalite kalıpları - Yazılım mühendisliği deneyiminin paketlenmesine bir yaklaşım ACM SIGSOFT Yazılım Mühendisliği Notları, Yazılımın yeniden kullanılabilirliği üzerine 1997 Sempozyumu Bildirileri Mayıs 1997

4. W. Royce Yazılım Proje Yönetimi, Moskova, LORI

Sosyal Medya İçerik Pazarlaması: Takipçilerinizin Aklına Nasıl Girilir ve Onları Markanıza Aşık Etmek adlı yeni bir kitap yayınladık.

Abone

Bir rapor oluşturalım. Metriklerde "Hedeflere ulaşma" - "Dönüşümünü belirlediğiniz hedef" seçeneğini seçin. Bu genellikle “Satın aldığınız için teşekkür ederiz” sayfasıdır.

Sonuç olarak, her Kazakistan Cumhuriyeti için ne kadar satın alma yapıldığına ve bunları yapan kullanıcıları çekmek için ne kadar harcandığına dair veriler alacağız. Bir olası satışın maliyetini bulmak için dönüşüm sayısını tıklama maliyetine bölün. Ayarladıysanız elde edilen kârı tahmin etmek için bir "Gelir" sütunu ekleyebilirsiniz.

Yeniden hedefleme ve teklif ayarlamalarına yönelik segmentler: Potansiyel alıcılarla yeni bir ilişki düzeyi

Bu bölümde Yandex.Metrics'i oluşturup kaydedeceğiz ve Direct'te kampanya oluştururken kullanılacak ayarlamaları tanımlayacağız.

Numunenin temsili olması için zaman dilimini ayarlamayı unutmayın. Verilerin büyük bir ziyaretçi grubunun davranışları temel alınarak oluşturulması gerekmektedir.

Cinsiyet ve yaş – ayarlama

Bu raporu oluşturduktan sonra sitemizden kimin daha iyi alışveriş yaptığını, erkek mi kadın mı, bu tür alıcıların yaşlarının kaç olduğunu görebileceğiz. Bundan sonra hiçbir şey bu segment için oranları ayarlamamızı engelleyemez.

Şunu seçin: “Raporlar” – “Ziyaretçiler” – “Cinsiyet” (1).

Sonuç olarak kadınlara yönelik ayarlamalar yapıyoruz. Aynı zamanda elde edilen veriler, daha güçlü cinsiyet temsilcilerinin de web sitemizde vakit geçirdiğini görmemize yardımcı oldu. Bu bilgilerle çalışmanız gerekir. Örneğin, alakalı reklamlar yazın.

Zaman ve saat - ayarlama

Ziyaretçilerinizin gün veya hafta içinde farklı etkinlikleri olabilir; bu noktada kaynağınız için en çok dönüşüm sağlayan günleri ve saatleri belirleyeceğiz, ardından Direct'te zaman ayarlamaları yapabilirsiniz.

“Raporlar” – “Ziyaretçiler” – “Günün saatine göre katılım”.

Gruplandırmalara şunları ekliyoruz: Davranış: tarih ve saat – “Tarih/saat parçaları” – “Ziyaret haftasının günü” (2). Bir hedef seçin ve dönüşüme göre sıralayın. Dönüşümün hangi gün ve saatte maksimum olduğunu gösteren bir rapor alıyoruz.

Coğrafya

“Raporlar” – “Ziyaretçiler” – “Coğrafya”.

Rapor, sitelerin diğerlerinden daha iyi satış yapan bölgeleri belirlemesine yardımcı olacak. Tipik olarak, birçok niş için satışların aslan payı Moskova veya St. Petersburg ve bölgelerinden geliyor. Bu nedenle, reklamverenlerin büyük kısmı Kazakistan Cumhuriyeti'ni federal şehirlere ve Rusya'nın geri kalanına bölüyor.

Coğrafya raporu, Direct'teki kampanyaların daha fazla parçalanması için bir yol bulmanıza veya getirisi zayıf olan bölgesel reklam kampanyalarını belirlemenize yardımcı olacaktır.

Segment "Unutulan sepet"

Şunları oluşturuyoruz: “Raporlar” – “Ziyaretçiler” – “İlk ziyaretten bu yana geçen süre”.

Hedefler için bir makro hedef seçeceğiz - satın alma, ofiste danışma için randevu vb. Dönüşüme göre sıralıyoruz. Grafiği çizmek için ilk 2 satırı seçin. Bunun sonucunda müşterilerimizin satın alma kararlarını düşünürken ne kadar zaman harcadıkları hakkında bilgi sahibi olacağız. Ayrıca, teklifimize artık ihtiyaç duymayan kişilere reklam gösterilmesini önlemek için Direct arayüzündeki verileri kullanabileceğiz.

Rapordan, hedefe esas olarak ziyaret gününde ulaşıldığını ancak ay boyunca kullanıcıların geri döndüğünü ve dönüşüm sağladığını görüyoruz.

Şimdi segmentin kendisi. Ürünü sepetinde bırakan ancak hiç satın almayanlar için yaratacağız.

Zaten tanıdık olan “Kaynaklar” – “Özet” raporuna gidelim, yalnızca “Reklam dönüşümleri” sütununa bir onay işareti bırakın, +'ya tıklayın ve menüden seçim yapın: “Davranış” – “Hedeflere ulaşma” – “Hedef: sepete eklendi ” (javascript hedefi "Sepete Ekle" butonlarına ayarlanmalıdır). Segmenti kaydedip adlandırıyoruz, şimdi Direct'e gidiyoruz.

Bu segmente göstermek istediğimiz reklamı buluyoruz, “Hedef kitle seçim koşulları”na ve ardından “Koşul ekle”ye tıklıyoruz.

Web sitesi analizine yönelik raporlar: inceleyin ve geliştirin

Webvizörü

Verileri, sitenin zayıf yönlerini belirlememize ve kullanıcıların karşılaştığı zorlukları anlamamıza yardımcı olacaktır.

Makro hedefimize ulaştığımız ziyaretler için Web Yöneticisi segmentlerine bakalım.

Bir örnek alalım ve kullanıcıların bunu nasıl başardığını görelim. Belki müşterilerimizin farkında olmadığımız davranış kalıplarını anlayacağız. Peki ya çoğu, bir sipariş vermeden önce bir fotoğraf albümüne baksa veya sitedeki etkileşimli öğelerle etkileşime girse ve belki de incelemeler üzerinde uzun süre vakit geçirse? Bu tür veriler, blokları sitede nasıl doğru şekilde konumlandıracağınıza ve tasarlayacağınıza karar vermenize yardımcı olacaktır.

İkinci segment, web sitemizde satın alma işlemi gerçekleştirmek için yeterli zaman harcayan ancak bunu hiç yapmayan kullanıcılardır. Bu tür ziyaretleri analiz etmek, ziyaretçilerin karşılaştığı temel zorluklara dair fikir verecektir.

Haritaları kaydırma/tıklama

Kaydırma haritası, ziyaretçilerinizin hangi ekranda daha fazla zaman harcadığını anlamanıza yardımcı olacaktır. Belki de satın alma kararı vermenize yardımcı olacak bazı gerekli bilgiler “soğuk bölgededir” ve başka bir yere taşınması gerekmektedir. Örneğin, bir müşterinin yalnızca bir metro istasyonunu belirten talepler için reklamı yapılır ve sayfanın altında adres ve yol tariflerini içeren bir harita bulunur.

Sonuç olarak yüksek bir ret yüzdesi ortaya çıkıyor çünkü kurumun ofisinin konumu, bu tür taleplerle gelen müşteriler için önemli.

SLOC'ye ek olarak niceliksel özellikler şunları da içerir:

  • boş satır sayısı,
  • yorum sayısı,
  • yorumların yüzdesi (yorum içeren satır sayısının toplam satır sayısına oranı, yüzde olarak ifade edilir),
  • işlevler için ortalama satır sayısı (sınıflar, dosyalar),
  • içeren ortalama satır sayısı kaynak işlevler için (sınıflar, dosyalar),
  • modüller için ortalama satır sayısı.
Bazen programın biçimsel derecelendirmesi (F) arasında ek bir ayrım yapılır. Programın n eşit parçaya bölünmesinden ve F i = SIGN (Ncomm. i / N i - 0.1) formülünü kullanarak her parça için tahminin hesaplanmasından oluşur; burada Ncomm. i - yorum sayısı i-inci parça, N i - i'inci parçadaki toplam kod satırı sayısı. Daha sonra tüm programın genel puanı belirlenecektir. Aşağıdaki şekilde: F = TOPLA F ben .

Program kodunda belirli birimlerin sayılmasına dayalı metrikler grubuna Halstead metrikleri de dahildir. Bu ölçümler aşağıdaki göstergelere dayanmaktadır:

N1 - semboller dahil benzersiz program ifadelerinin sayısı

Ayırıcılar, prosedür adları ve işlem işaretleri (operatör sözlüğü),

N2 - benzersiz program işlenenlerinin sayısı (işlenen sözlüğü),

N1 - programdaki toplam ifade sayısı,

N2 - programdaki toplam işlenen sayısı,

N1" - benzersiz operatörlerin teorik sayısı,

N2" benzersiz işlenenlerin teorik sayısıdır.

Sunulan notasyonları dikkate alarak şunları belirleyebiliriz:

N=n1+n2 - program sözlüğü,

N=N1+N2 - program uzunluğu,

N"=n1"+n2" - programın teorik sözlüğü,

N"= n1*log 2 (n1) + n2*log 2 (n2) - teorik program uzunluğu (üslup için) doğru programlar N'nin N"den sapması %10'u geçmez

V=N*log 2 n - program hacmi,

V"=N"*log 2 n" programın teorik hacmidir; burada n*, programın teorik sözlüğüdür.

L=V"/V - ideal bir program için programlama kalite seviyesi L=1

L"= (2 n2)/ (n1*N2) - yalnızca parametrelere dayalı programlama kalite seviyesi gerçek program teorik parametreler dikkate alınmadan,

E C =V/(L")2 - programı anlama zorluğu,

D=1/ L" - program kodlamasının karmaşıklığı,

Y" = V/ D2 - ifade dili düzeyi

I=V/D - programın bilgi içeriği, bu karakteristik bir program oluşturmanın zihinsel maliyetlerini belirlemenizi sağlar

E=N" * log 2 (n/L) - bir program geliştirirken gerekli entelektüel çabanın değerlendirilmesi, bir program yazarken gerekli temel çözümlerin sayısının karakterize edilmesi

Halstead metrikleri kullanıldığında, aynı işlevselliği kaydetme yeteneğiyle ilgili dezavantajlar kısmen telafi edilir farklı miktarlar dizeler ve operatörler.

Niceliksel olan diğer bir yazılım metriği türü Gilb metrikleridir. Programın koşullu ifadelerin veya döngüsel ifadelerin yoğunluğuna dayalı olarak yazılımın karmaşıklığını gösterirler. Bu ölçüm, basitliğine rağmen, programı yazmanın ve anlamanın karmaşıklığını ve şöyle bir gösterge eklerken oldukça iyi yansıtıyor: maksimum seviye koşullu ve döngüsel operatörlerin iç içe geçmesiyle bu metriğin etkinliği önemli ölçüde artar.

2. Program kontrol akışı karmaşıklığının ölçümleri

Niceliksel göstergelere değil, program kontrol grafiğinin analizine dayanan bir sonraki büyük metrik sınıfına, program kontrol akışı karmaşıklığı metrikleri adı verilir.

Metriklerin kendilerini doğrudan tanımlamadan önce, daha iyi anlaşılması için programın kontrol grafiği ve onu oluşturma yöntemi açıklanacaktır.

Bir program sunulsun. Bu program için, yalnızca bir giriş ve bir çıkış içeren yönlü bir grafik oluşturulurken, grafiğin köşeleri program kodunun yalnızca sıralı hesaplamaların olduğu ve dal ve döngü operatörlerinin olmadığı bölümleriyle ilişkilendirilir. yaylar bloktan bloğa geçişler ve program yürütme dalları ile ilişkilidir. Bu grafiği oluşturmanın koşulu: her köşeye ilk köşeden ulaşılabilir ve son köşeye başka herhangi bir köşeden ulaşılabilir.

Ortaya çıkan grafiğin analizine dayanan en yaygın tahmin, programın döngüsel karmaşıklığıdır (McCabe döngüsel sayısı). V(G)=e - n + 2p olarak tanımlanır; burada e yay sayısı, n köşe sayısı, p bağlı bileşenlerin sayısıdır. Bir grafiğin bağlı bileşenlerinin sayısı, grafiği güçlü bağlantılı bir grafiğe dönüştürmek için eklenmesi gereken yayların sayısı olarak düşünülebilir. Herhangi iki köşe karşılıklı olarak ulaşılabilirse, bir grafa güçlü bağlantılı denir. Doğru programların grafikleri için, yani giriş noktasından erişilemeyen bölümleri olmayan ve "sarkan" giriş ve çıkış noktaları olmayan grafikler için, genellikle programın sonunu belirten bir tepe noktasından bir yayın kapatılmasıyla güçlü bağlantılı bir grafik elde edilir. programı, bu programa giriş noktasını belirten bir köşeye yerleştirin. Temel olarak V(G), güçlü bağlantılı bir grafikteki doğrusal olarak bağımsız devrelerin sayısını belirler. Yani doğru yazılmış programlarda p=1 olduğundan siklomatik karmaşıklığın hesaplanmasına yönelik formül şu şekli alır:

V(G)=e - n + 2.

Ne yazık ki bu değerlendirme döngüsel ve koşullu yapıları birbirinden ayıramamaktadır. Bir tane daha önemli dezavantaj Bu yaklaşım, aynı grafiklerle temsil edilen programların tamamen farklı karmaşıklığa sahip tahminlere sahip olabilmesidir (bir yüklem, en az bir değişken içeren mantıksal bir ifadedir).

Düzeltme için bu eksiklik G. Myers yeni bir teknik geliştirdi. Tahmin olarak, basit yüklemler için h'nin sıfıra eşit olduğu ve n-ary yüklemler için h = n-1 olduğu bir aralığın alınmasını önerdi (bu tahmin aynı zamanda aralık olarak da adlandırılır). Bu yöntem, farklı karmaşıklıktaki yüklemleri ayırt etmeyi mümkün kılar, ancak pratikte neredeyse hiç kullanılmaz.

McCabe yönteminin bir başka modifikasyonu da Hansen yöntemidir. Bir programın karmaşıklığının ölçüsü bu durumda bir çift olarak temsil edilir (döngüsel karmaşıklık, operatör sayısı). Bu önlemin avantajı yazılımın yapısına olan duyarlılığıdır.

Chen'in topolojik ölçüsü, program grafiğinin oluşturduğu bölgeler arasındaki sınır geçişlerinin sayısı açısından bir programın karmaşıklığını ifade eder. Bu yaklaşım yalnızca izin veren yapılandırılmış programlara uygulanabilir. seri bağlantı Kontrol Yapıları. Yapılandırılmamış programlar için Chen ölçüsü önemli ölçüde koşullu ve koşulsuz dallara bağlıdır. Bu durumda ölçümün üst ve alt sınırlarını belirleyebilirsiniz. En üstteki m+1'dir; burada m, karşılıklı iç içe geçmiş mantıksal operatörlerin sayısıdır. Düşük olan 2'ye eşittir. Bir programın kontrol grafiği yalnızca bir bağlantılı bileşene sahip olduğunda Chen ölçüsü McCabe siklomatik ölçüsüyle çakışır.

Bir programın kontrol grafiğini analiz etme konusuna devam edersek, başka bir metrik alt grubunu - Harrison ve Majel metriklerini - ayırt edebiliriz.

Bu önlemlerde yatırım düzeyi ve programın uzunluğu dikkate alınır.

Her köşeye, temsil ettiği operatöre göre kendi karmaşıklığı atanır. Bu başlangıç ​​köşe karmaşıklığı, Halstead ölçümleri de dahil olmak üzere herhangi bir şekilde hesaplanabilir. Her yüklem tepe noktası için, ondan çıkan yayların uçları olan köşe noktaları tarafından oluşturulan bir alt grafiğin yanı sıra bu tür her köşe noktasından (alt grafiğin alt sınırı) ulaşılabilen köşe noktalarını ve bu köşelerin üzerinde yer alan köşe noktalarını seçiyoruz. yüklem tepe noktasından bazı alt sınırlara giden yollar. Bu alt grafa yüklem tepe noktasının etki alanı denir.

Bir yüklem tepe noktasının azaltılmış karmaşıklığı, etki alanına dahil olan köşelerin başlangıç ​​veya azaltılmış karmaşıklıklarının toplamı ile yüklem tepe noktasının kendisinin birincil karmaşıklığının toplamıdır.

Bir programın işlevsel ölçüsü (SCOPE), kontrol grafiğinin tüm köşelerinin azaltılmış karmaşıklıklarının toplamıdır.

Fonksiyonel ilişki (SCORT), bir kontrol grafiğindeki köşe sayısının işlevsel karmaşıklığına oranıdır ve terminal köşe noktaları, köşe sayısından hariç tutulur.

SCORT kabul edebilir Farklı anlamlar aynı siklomatik sayıya sahip grafikler için.

Pivovarsky metriği, siklomatik karmaşıklık ölçüsünün başka bir modifikasyonudur. Yalnızca sıralı ve iç içe geçmiş kontrol yapıları arasındaki değil, aynı zamanda yapılandırılmış ve yapılandırılmamış programlar arasındaki farkları da izlemenize olanak tanır. N(G) = v *(G) + SUMMAPi ilişkisiyle ifade edilir; burada v *(G), V(G) ile aynı şekilde hesaplanan değiştirilmiş siklomatik karmaşıklıktır, ancak bir farkla: bir CASE ifadesi n çıkışlı bir olarak kabul edilir mantıksal operatör n - 1 operatör olarak değil.

Pi, i'inci yüklemin tepe noktasının yuvalanma derinliğidir. Yüklem köşelerinin yuvalanma derinliğini hesaplamak için "etki alanları" sayısı kullanılır. Yuvalama derinliği, söz konusu tepe noktasında tamamen bulunan veya onunla kesişen yüklemlerin tüm "etki alanlarının" sayısı olarak anlaşılmaktadır. Yüklemlerin değil, “etki alanlarının” iç içe geçmesi nedeniyle yuvalamanın derinliği artar. Pivovarsky ölçüsü, sıralı programlardan iç içe geçmiş programlara ve daha sonra yapılandırılmamış programlara geçerken artar; bu, bu grubun diğer birçok ölçüsüne göre büyük bir avantajdır.

Woodward ölçüsü - kontrol grafiğinin yaylarının kesişme sayısı. İyi yapılandırılmış bir programda bu tür durumların ortaya çıkmaması gerektiğinden, bu ölçüm esas olarak zayıf durumlarda kullanılır. yapılandırılmış diller(Montajcı, Fortran). Kontrol sıralı operatörler olan iki köşenin ötesine geçtiğinde bir kesişme noktası oluşur.

Sınır değer yöntemi aynı zamanda programın kontrol grafiğinin analizine dayanmaktadır. Belirlemek için Bu method Birkaç ek kavramın tanıtılması gerekir.

G, tek bir başlangıç ​​ve tek bir son köşeye sahip bir programın kontrol grafiği olsun.

Bu grafikte yayların gelen köşe sayısına köşenin negatif derecesi, tepe noktasından çıkan yay sayısına ise köşenin pozitif derecesi denir. Daha sonra grafik köşeleri kümesi iki gruba ayrılabilir: pozitif dereceli köşeler<=1; вершины, у которых положительная степень >=2.

Birinci grubun köşelerine alıcı köşeler, ikinci grubun köşelerine ise seçim köşeleri diyeceğiz.

Her alıcı köşe noktasının azaltılmış karmaşıklığı 1'dir, ancak uç noktanın karmaşıklığı 0'dır. G'deki tüm köşelerin azaltılmış karmaşıklıkları, programın mutlak sınır karmaşıklığını oluşturmak için toplanır. Bundan sonra programın göreceli marjinal karmaşıklığı belirlenir:

Burada S0 programın göreceli marjinal karmaşıklığıdır, Sa programın mutlak marjinal karmaşıklığıdır, v program grafiğinin toplam köşe sayısıdır.

Kontrol grafiğindeki olası yolların sayısı cinsinden ifade edilen bir Schneidewind metriği vardır.

3. Veri akışı karmaşıklığı ölçümleri

Bir sonraki metrik sınıfı, veri kontrol akışı karmaşıklığı metrikleridir.

Chapin metriği: Yöntemin özü, bir bireyin bilgi gücünü değerlendirmektir. yazılım modülü G/Ç listesindeki değişkenlerin kullanımının doğasını analiz ederek.

G/Ç listesini oluşturan değişkenlerin tamamı 4 işlevsel gruba bölünmüştür:

1. P - hesaplamalar ve çıktı sağlamak için girdi değişkenleri,

2. M - program içerisinde değiştirilen veya oluşturulan değişkenler,

3. C - yazılım modülünün çalışmasının kontrolünde yer alan değişkenler (kontrol değişkenleri),

Her değişken aynı anda birden fazla işlevi yerine getirebildiğinden, karşılık gelen her bir işlevsel grupta dikkate alınması gerekir.

Chapin metriği:

Q = a1*P + a2*M + a3*C + a4*T,

Burada a1, a2, a3, a4 ağırlıklandırma katsayılarıdır.

S = P + 2M + 3C + 0,5T

Span metriği, her program bölümündeki veri erişimlerinin yerelleştirilmesine dayanmaktadır. Spen, program metninde ilk ve son görünümü arasında belirli bir tanımlayıcıyı içeren ifadelerin sayısıdır. Bu nedenle, n kez görünen bir tanımlayıcının aralığı n-1'dir. Geniş bir aralıkta test etme ve hata ayıklama daha karmaşık hale gelir.

Veri akışının karmaşıklığını dikkate alan bir diğer ölçüm, programların karmaşıklığını küresel değişkenlere erişimle ilişkilendiren bir ölçümdür.

Bir modül-global değişken çifti (p,r) ile gösterilir; burada p, r global değişkenine erişimi olan modüldür. Programda r değişkenine gerçek bir referansın varlığına bağlı olarak, iki tür “modül - global değişken” çifti oluşturulur: gerçek ve olası. r'ye p ile olası referans, r'nin varoluş alanının p'yi içerdiğini gösterir.

Bu özellik Aup ile gösterilir ve Up modüllerinin gerçekte global değişkenlere kaç kez eriştiğini gösterir; Pup sayısı ise bunlara kaç kez erişebileceklerini gösterir.

Gerçek çağrı sayısının olası çağrı sayısına oranı belirlenir

Bu formül, rastgele bir global değişkene referans veren rastgele bir modülün yaklaşık olasılığını gösterir. Açıkçası, bu olasılık ne kadar yüksek olursa, herhangi bir değişkenin "yetkisiz" olarak değiştirilme olasılığı da o kadar yüksek olur ve bu, programın değiştirilmesiyle ilgili çalışmayı önemli ölçüde karmaşıklaştırabilir.

Konsepte dayalı bilgi akışları Kafur ölçüsü oluşturuldu. Bu önlemi kullanmak için yerel ve küresel akış kavramları tanıtılır: A'dan B'ye yerel bir bilgi akışı şu durumlarda mevcuttur:

1. Modül A, modül B'yi çağırır (doğrudan yerel iş parçacığı)

2. Modül B, A modülünü çağırır ve A, B'ye B'de kullanılan bir değeri döndürür (dolaylı yerel akış)

3. Modül C, A ve B modüllerini çağırır ve A modülünün sonucunu B'ye aktarır.

Daha sonra, küresel bilgi akışı kavramını vermeliyiz: A modülünün D'ye bilgi koyması ve B modülünün D'den gelen bilgiyi kullanması durumunda, D küresel veri yapısı aracılığıyla A'dan B'ye küresel bir bilgi akışı vardır.

Bu kavramlara dayanarak, I değeri - prosedürün bilgi karmaşıklığı:
I = uzunluk * (fan_in * fan_out)2
Burada:

Uzunluk - prosedür metninin karmaşıklığı (Halstead, McCabe, LOC ölçümleri vb. gibi hacim ölçümlerinden biri aracılığıyla ölçülür)

Fan_in - prosedüre giren yerel iş parçacıklarının sayısı artı prosedürün bilgi aldığı veri yapılarının sayısı

Fan_out - prosedürden kaynaklanan yerel iş parçacıklarının sayısı artı prosedür tarafından güncellenen veri yapılarının sayısı

Bir modülün bilgi karmaşıklığı, içinde yer alan prosedürlerin bilgi karmaşıklıklarının toplamı olarak tanımlanabilir.

Bir sonraki adım, bir modülün bilgi karmaşıklığının bazı veri yapılarına göre dikkate alınmasıdır. Bilgi ölçüsü veri yapısına ilişkin modül karmaşıklığı:

J = W * R + W * RW + RW *R + RW * (RW - 1)

W, yalnızca veri yapısını güncelleyen prosedürlerin sayısıdır;

R - yalnızca veri yapısından bilgileri okuyun;

RW - veri yapısındaki bilgileri hem okur hem de günceller.

Bu gruptaki diğer bir ölçü ise Oviedo ölçüsüdür. Özü, programın doğrusal, kesişmeyen bölümlere (programın kontrol grafiğini oluşturan operatör ışınları) bölünmesidir.

Metriğin yazarı aşağıdaki varsayımlarda bulunur: Programcı, bir ışın içindeki bir değişkenin oluşumlarını tanımlamak ve kullanmak arasındaki ilişkiyi, ışınlar arasında olduğundan daha kolay bulabilir; Her ışındaki farklı tanımlayıcı oluşumların sayısı, her ışındaki değişken oluşumların toplam sayısından daha önemlidir.

R(i) ile i ışınının etki yarıçapı içinde yer alan değişkenlerin tanımlayıcı oluşumlarını gösterelim (bir değişkenin tanımlayıcı bir oluşumu, eğer değişken onun içinde yerel ise, bir ışının etki yarıçapı içindedir). ve tanımlayıcı bir oluşumu vardır veya bunun için daha önceki bir ışında tanımlayıcı bir oluşum vardır ve yol boyunca yerel bir tanım yoktur). Oluşumları zaten i ışınında olan değişkenler kümesini V(i) ile gösterelim. Daha sonra i-inci ışının karmaşıklığının ölçüsü şu şekilde verilir:

DF(i)=TOPLA(DEF(v j)), j=i...||V(i)||

Burada DEF(v j), v j değişkeninin R(i) kümesinden tanımlayıcı oluşumlarının sayısıdır ve ||V(i)|| - V(i) kümesinin kuvveti.

4. Kontrol akışı ve program verilerinin karmaşıklığına ilişkin ölçümler

Dördüncü metrik sınıfı, hem niceliksel metrikler sınıfına, program kontrol akışı karmaşıklığı metrikleri sınıfına hem de veri kontrol akışı karmaşıklığı metrikleri sınıfına (kesin olarak konuşursak, bu metrikler sınıfı ve program kontrolü sınıfı) yakın olan metriklerdir. akış karmaşıklığı metrikleri aynı sınıf topolojik metriklerdir, ancak netlik açısından bunları bu bağlamda ayırmak mantıklıdır). Bu metrik sınıfı, program yapısının karmaşıklığını hem niceliksel hesaplamalara hem de kontrol yapılarının analizine dayanarak belirler.

Bu metriklerden ilki M-Measure testidir. Bir test ölçüsü M, aşağıdaki koşulları karşılayan bir karmaşıklık ölçüsüdür:

Ölçü, yerleştirme derinliğiyle birlikte artar ve programın uzunluğu dikkate alınır. Test tedbiriyle yakından ilgili olan, düzenli yerleştirmelere dayalı bir tedbirdir. Program karmaşıklığının bu ölçüsünün fikri, programdaki toplam sembol sayısını (işlenenler, operatörler, parantez) saymaktır. Düzenli ifade Programın kontrol grafiğini açıklayan gerekli minimum sayıda parantez ile. Bu gruptaki tüm önlemler, kontrol yapılarının iç içe geçmesine ve programın uzunluğuna duyarlıdır. Ancak hesaplama karmaşıklığı düzeyi artar.

Ayrıca yazılım kalitesinin bir ölçüsü de program modüllerinin tutarlılığıdır. Modüller sıkı bir şekilde birleştirilirse programın değiştirilmesi ve anlaşılması zorlaşır. Bu ölçü sayısal olarak ifade edilmez. Modül bağlantı türleri:

Veri bağlantısı - eğer modüller parametrelerin aktarımı yoluyla etkileşime giriyorsa ve her parametre bir temel bilgi nesnesidir. En çok tercih edilen bağlantı (kaplin) türüdür.

Veri yapısına göre bağlantı - eğer bir modül diğerine bileşik gönderirse bilgi nesnesi(yapı) veri alışverişi için.

Kontrol bağlantısı - eğer biri diğerine bir bilgi nesnesi gönderirse - dahili mantığını kontrol etmek için tasarlanmış bir bayrak.

Modüller, aynı küresel veri alanına başvuruyorlarsa ortak bir alanla bağlanırlar. Küresel kapsam üzerinden bağlantı istenmez çünkü ilk olarak, küresel kapsamı kullanan bir modüldeki bir hata, başka herhangi bir modülde beklenmedik bir şekilde ortaya çıkabilir; ikincisi, programcının belirli bir modül tarafından hangi verilerin kullanıldığını belirlemesi zor olduğundan bu tür programların anlaşılması zordur.

İçeriğe göre uyum - modüllerden birinin diğerinin içine bağlanması durumunda. Bu, modülerlik ilkesiyle tamamen çeliştiği için kabul edilemez bir bağlantı türüdür; modülün kara kutu olarak temsili.

Harici bağlantı - iki modül, iletişim protokolü gibi harici verileri paylaşır.

Mesajları kullanan bağlantı, en özgür bağlantı türüdür; modüller birbirine doğrudan bağlı değildir; parametreleri olmayan mesajlar aracılığıyla iletişim kurarlar.

Bağlantı eksikliği - modüller birbirleriyle etkileşime girmez.

Alt sınıf birleştirme, bir ebeveyn sınıfı ile bir alt sınıf arasındaki, çocuğun ebeveynle ilişkili olduğu, ancak ebeveynin çocukla ilişkili olmadığı bir ilişkidir.

Zamana bağlılık - iki eylemin tek bir modülde gruplandırılmasının nedeni, koşullar nedeniyle aynı anda meydana gelmeleridir.

Bir modülün kararlılığı ile ilgili diğer bir ölçü Colofello ölçüsüdür, kararlılığı kontrol edilen modül dışındaki modüllerde yapılması gereken değişiklik sayısı olarak tanımlanabilir ve bu değişiklikler test edilen modülle ilgili olmalıdır. .

Aşağıdaki metrik bu sınıfın- McClure metriği. Bu metriğin hesaplanmasında üç aşama vardır:

1. Her bir kontrol değişkeni i için, karmaşıklık fonksiyonu C(i)'nin değeri şu formül kullanılarak hesaplanır: C(i) = (D(i) * J(i))/n.

Burada D(i), i değişkeninin kapsamını ölçen bir değerdir. J(i), modüllerin i değişkeni aracılığıyla etkileşiminin karmaşıklığının bir ölçüsüdür, n, bölümleme şemasındaki bireysel modüllerin sayısıdır.

2. Bölümleme küresine dahil olan tüm modüller için, karmaşıklık fonksiyonlarının M(P) değeri, M(P) = fp * X(P) + gp * Y(P) formülüyle belirlenir.
burada fp ve gp sırasıyla P modülünden hemen önceki ve hemen sonraki modüllerin sayısıdır, X(P), P modülüne erişmenin karmaşıklığıdır,

Y(P) - diğer modüllerin P modülünden kontrolü çağırmanın karmaşıklığı.

3. Bir programı modüllere bölmek için MP hiyerarşik şemasının genel karmaşıklığı aşağıdaki formülle verilir:

MP = SUM(M(P)) P - program modüllerinin tüm olası değerleri üzerinden.

Bu metrik, işlevsel özellikleri ve kontrol yapısını tanımlayan hiyerarşik modüllerden oluşan, iyi yapılandırılmış programlara odaklanır. Ayrıca her modülün bir giriş noktası ve bir çıkış noktası olduğu, modülün tam olarak bir işlevi yerine getirdiği ve modüllerin, birden fazla program modülündeki çağrı ilişkisini belirleyen hiyerarşik bir kontrol sistemine uygun olarak çağrıldığı varsayılmaktadır.

Ayrıca buna dayalı bir ölçüm de vardır. bilgi kavramı- Berlinger ölçüsü. Karmaşıklık ölçüsü M=SUMf i *log 2 pi olarak hesaplanır; burada f i, i'inci sembolün ortaya çıkma sıklığıdır, pi ise ortaya çıkma olasılığıdır.

Bu ölçümün dezavantajı, çok sayıda benzersiz karakter içeren, ancak küçük miktarlardaki bir programın, az sayıda, ancak büyük miktarlarda benzersiz karakter içeren bir programla aynı karmaşıklığa sahip olmasıdır.

5. Nesneye yönelik ölçümler

Nesneye yönelik programlama dillerinin geliştirilmesiyle bağlantılı olarak, yeni sınıf metriklere nesne yönelimli metrikler de denir. Bu grupta en yaygın kullanılanlar Martin metrik seti ile Chidamber ve Kemerer metrik setidir. Öncelikle ilk alt gruba bakalım.

Martin metriklerini dikkate almaya başlamadan önce sınıf kategorisi kavramını tanıtmak gerekir. Gerçekte bir sınıf nadiren diğer sınıflardan ayrı olarak yeniden kullanılabilir. Hemen hemen her sınıfın işbirliği içinde çalıştığı ve kolayca ayrılamadığı bir sınıflar grubu vardır. Bu tür sınıfları yeniden kullanmak için sınıf grubunun tamamını yeniden kullanmanız gerekir. Böyle bir sınıf grubu güçlü bir şekilde birbirine bağlıdır ve sınıf kategorisi olarak adlandırılır. Bir sınıf kategorisinin varlığı için aşağıdaki koşullar mevcuttur:

Bir sınıf kategorisindeki sınıflar, hepsini birden değiştirmeye yönelik herhangi bir girişime karşı kilitlenir. Bu, eğer bir sınıf değişirse, o kategorideki tüm sınıfların muhtemelen değişeceği anlamına gelir. Eğer sınıflardan herhangi biri bir tür değişime açıksa, hepsi de o tür bir değişime açıktır.

Bir kategorideki sınıflar yalnızca birlikte yeniden kullanılır. Bunlar birbirine o kadar bağlıdır ki birbirlerinden ayrılamazlar. Bu nedenle, eğer bir kategorideki bir sınıfı yeniden kullanmak için herhangi bir girişimde bulunulursa, diğer tüm sınıfların da onunla birlikte yeniden kullanılması gerekir.

Bir kategorinin sorumluluğu, bağımsızlığı ve istikrarı, o kategoriyle etkileşime giren bağımlılıkların sayılmasıyla ölçülebilir. Üç metrik tanımlanabilir:

1. Ca: Merkezcil uyum. Bu kategorinin içindeki sınıflara bağlı olarak bu kategorinin dışındaki sınıfların sayısı.

2. Ce: Santrifüj kavrama. Bu kategori içindeki, bu kategorinin dışındaki sınıflara bağlı olan sınıfların sayısı.

3. I: Kararsızlık: I = Ce / (Ca+Ce). Bu metriğin bir dizi değeri vardır.

I = 0 en kararlı kategoriyi gösterir.

I = 1 en kararsız kategoriyi gösterir.

Bir kategorinin soyutluğunu ölçen bir metriği (kategori soyutsa yeterince esnektir ve kolayca genişletilebilir demektir) aşağıdaki gibi tanımlayabilirsiniz:

A: Soyutluk: A = nA / nAll.

Yok - kategorideki soyut_sınıfların sayısı.

NAll - kategorideki_sınıfların_toplam_sayısı.

Bu metriğin değerleri aralıkta değişmektedir.

Şimdi yukarıdaki Martin ölçümlerine dayanarak soyutlama ile istikrarsızlık arasındaki ilişkiyi gösteren bir grafik oluşturabilirsiniz. Üzerine I+A=1 formülüyle verilen düz bir çizgi çizersek, bu düz çizgi soyutluk ve istikrarsızlık arasında en iyi dengeye sahip kategorileri içerecektir. Bu çizgiye ana dizi denir.

Ana diziye uzaklık: D=|(A+I-1)/sqrt(2)|

Ana diziye normalleştirilmiş mesafe: Dn=|A+I-2|

Hemen hemen her kategori için ana diziye ne kadar yakın olursa o kadar iyi olduğu doğrudur.

Bir sonraki metrik alt grubu Chidamber ve Kemerer metrikleridir. Bu ölçümler sınıf yöntemlerinin, miras ağacının vb. analizine dayanmaktadır.

WMC (Sınıf başına ağırlıklı yöntemler), sınıfın tüm yöntemlerinin toplam karmaşıklığı: WMC=SUMAc i , i=1...n, burada c i, i'inci yöntemin karmaşıklığıdır ve metriklerden herhangi biri kullanılarak hesaplanır ( İlgilenilen kritere bağlı olarak Halstead, vb.), eğer tüm yöntemler aynı karmaşıklığa sahipse, bu durumda WMC=n olur.

DIT (Kalıtım Ağacının Derinliği) - miras ağacının derinliği (sınıf hiyerarşisi boyunca ata sınıftan belirli bir sınıfa giden en uzun yol), ne kadar büyükse o kadar iyidir, çünkü derinlik arttıkça veri soyutlaması artar, doygunluk yöntemlerin bulunduğu sınıf azalır, ancak yeterince büyük bir derinlikle, bir programı anlama ve yazmanın karmaşıklığı büyük ölçüde artar.

NOC (Çocuk sayısı) - nesillerin sayısı (hemen), ne kadar fazla olursa, veri soyutlaması da o kadar yüksek olur.

CBO (Nesne sınıfları arasında bağlantı) - sınıflar arasında bağlantı, orijinal sınıfın ilişkili olduğu sınıfların sayısını gösterir. Bu metrik için, modüllerin bağlantısına ilişkin daha önce tanıtılan tüm ifadeler geçerlidir, yani yüksek CBO ile veri soyutlaması azalır ve sınıfın yeniden kullanımı daha zor hale gelir.

RFC (Bir sınıf için yanıt) - RFC=|RS|, burada RS, bir sınıfın yanıt kümesidir; yani, sınıfın bir nesnesi tarafından alınan verilere yanıt olarak bir sınıf yöntemi tarafından potansiyel olarak çağrılabilen yöntemler kümesidir. sınıf. Yani, RS=(((M)((R i ))), i=1...n, burada M'nin tümü olası yöntemler sınıf, R i - çağrılabilecek tüm olası yöntemler i. sınıf. O zaman RFC bu setin önem derecesi olacaktır. Ne kadar çok RFC olursa, test etmek ve hata ayıklamak da o kadar zor olur.

LCOM (Yöntemlerde Uyum Eksikliği) - Yöntemlerde uyum eksikliği. Bu parametreyi belirlemek için, n yöntemli C sınıfını düşünün M1, M2,… ,Mn, o zaman (I1),(I2),...,(In) bu yöntemlerde kullanılan değişken kümeleridir. Şimdi P'yi tanımlıyoruz - ortak değişkenleri olmayan bir dizi yöntem çifti; Q, ortak değişkenlere sahip bir dizi yöntem çiftidir. O zaman LCOM=|P|-|Q|. Uyum eksikliği, sınıfın birkaç başka sınıfa veya alt sınıfa bölünebileceğinin bir işareti olabilir; bu nedenle, veri kapsüllemesini artırmak ve sınıfların ve yöntemlerin karmaşıklığını azaltmak için uyumu artırmak daha iyidir.

6. Güvenilirlik ölçümleri

Bir sonraki metrik türü nicelliğe yakın olan ancak programdaki hata ve kusur sayısına dayalı metriklerdir. Bu metriklerin her birinin özelliklerini dikkate almanın bir anlamı yok, bunları basitçe listelemek yeterli olacaktır: son kontrolden bu yana yapılan yapısal değişikliklerin sayısı, kod incelemesi sırasında tespit edilen hataların sayısı, program sırasında tespit edilen hataların sayısı için gereken test ve gerekli yapısal değişiklik sayısı doğru işlem programlar. İçin büyük projeler Genellikle bu göstergeler binlerce kod satırıyla ilişkili olarak değerlendirilir; Bin kod satırı başına ortalama kusur sayısı.

7. Hibrit ölçümler

Son olarak hibrit metrikler olarak adlandırılan başka bir metrik sınıfından da bahsetmek gerekir. Bu sınıfın metrikleri daha basit metrikleri temel alır ve bunların ağırlıklı toplamını temsil eder. Bu sınıfın ilk temsilcisi Kokol metriğidir. Aşağıdaki şekilde tanımlanır:

H_M = (M + R1 * M(M1) +… + Rn * M(Mn)/(1 + R1 +… + Rn)

Nerede M - temel metrik, Mi - diğer ilginç ölçümler, Ri - doğru seçilmiş katsayılar, M(Mi) - fonksiyonlar.

M(Mi) fonksiyonları ve Ri katsayıları, regresyon analizi veya programa özel problem analizi kullanılarak hesaplanır.

Zolnovsky, Simmons, Thayer metriği de çeşitli göstergelerin ağırlıklı toplamıdır. Bu metrik için iki seçenek vardır:

(yapı, etkileşim, hacim, veri) SUM(a, b, c, d).

(arayüz karmaşıklığı, hesaplama karmaşıklığı, G/Ç karmaşıklığı, okunabilirlik) SUM(x, y, z, p).

Her seçenekte kullanılan metrikler şunlara bağlı olarak seçilir: Özel görev, katsayılar - belirli bir durumda karar vermeye yönelik metriğin değerine bağlı olarak.

Çözüm

Özetlemek gerekirse tek bir evrensel ölçütün olmadığını belirtmek isterim. Programın izlenen herhangi bir metrik özelliği, ya birbirine bağlı olarak ya da belirli göreve bağlı olarak izlenmelidir; ayrıca hibrit ölçümler kullanılabilir, ancak bunlar aynı zamanda daha basit metriklere de bağlıdır ve aynı zamanda evrensel olamaz. Açıkça söylemek gerekirse, herhangi bir metrik yalnızca dile ve programlama stiline büyük ölçüde bağlı olan bir göstergedir, dolayısıyla hiçbir ölçü mutlak değere yükseltilemez ve yalnızca buna dayalı olarak hiçbir karar alınamaz.

gibi yeni teknikleri dikkate alarak aşırı programlama veya Scrum, geliştirme daha hızlı yapılabilir ve yeni platformların varlığı ve daha düşük seviyelerden soyutlama birçok hatanın önlenmesine olanak tanır. Bununla birlikte kalite kontrol, kalite kontrol süreçlerinin gerçekleştiği metodolojik seviyeden teknolojik seviyeye kadar çeşitli seviyelerde gerçekleştirilmelidir. otomatik modörneğin otomatik proje oluşturma sırasında. Bununla birlikte, herhangi bir kontrol, bir yazılım projesinin belirli bir kalite düzeyine ulaşılmasının değerlendirilmesine izin veren ölçümlerin varlığını varsayar.

Kod Metrikleri

Yazılım Metriği (yazılım ölçüsü) – program kodunun belirli bir bölümünün belirli özelliklerini değerlendirmenize olanak tanıyan sayısal bir ölçü. Her metrik için genellikle kodun belirli bir bölümüne hangi uç değerlerde dikkat edilmesi gerektiğini gösteren kriterler vardır. Kod metrikleri kategorilere ayrılmıştır ve tamamen farklı yönleri ölçebilir yazılım sistemi: program kodunun karmaşıklığı ve yapısı, bileşenlerin bağlantısı, göreceli hacim yazılım bileşenleri vb. Anlaşılması en kolay metrik, bir yazılım sistemindeki kod satırı sayısıdır; her ne kadar basit bir şekilde hesaplanmış olsa da, diğer metriklerle birlikte kod değerlendirmesi için resmileştirilmiş veriler elde etmeye hizmet edebilir. Örneğin, bir sınıftaki kod satırı sayısı ile sınıftaki yöntem/özellik sayısı arasında bir ilişki kurarak belirli bir sınıfın yöntemlerinin ne kadar kapsamlı olduğunu gösteren bir karakteristik elde edebilirsiniz. Ayrıca bu tür tahminler, program kodundaki en zor alanları belirlemek ve uygun önlemleri almak için karmaşıklık ölçümleriyle (örneğin McCabe siklomatik karmaşıklık) birlikte kullanılabilir.

Kod metrikleri aynı zamanda mimari özelliklerin belirlenmesine de hizmet edebilir. Bu tür ölçümlerin kullanımı, büyük yazılım sistemlerini analiz ederken, kaynak kodunun manuel olarak analiz edilmesi ve gözden geçirilmesinin oldukça zaman alabileceği durumlarda en büyük etkiye sahiptir. Örneğin, metrikleri Şekil 2'de gösterildiği gibi farklı şekillerde görselleştirebilirsiniz. 1, herkesin olduğu yer program bloğu bir dikdörtgen olarak temsil edilir ve dikdörtgenin her bir tarafının uzunluğu herhangi bir ölçümün (örneğin karmaşıklık, yapı vb.) değerini yansıtır. Böyle bir temsil, hem üst düzey yazılım varlıkları (derlemeler, kitaplıklar, ad alanları) hem de daha özel öğeler (özellikler, yöntemler) için oluşturulabilir. Aynı zamanda üst düzey bir diyagramı analiz ederken sorunlu kütüphaneleri hızlı bir şekilde tespit edebilir ve daha alt düzeye inerek sorunlu varlıkları inceleyebilirsiniz.

Program kodu ölçümleri önemli bir araçtır ve günümüzde birçok yazılım üreticisi tarafından halihazırda kullanılmaktadır. Böylece, daha fazlası için sertifikalandırıldığında yüksek seviyeler ISO/IEC veya CMM/CMMI modellerine göre kod metriklerinin kullanılması zorunludur ve bu da belirli bir dereceye kadar geliştirme sürecinin kontrol edilebilirliğini sağlamaya olanak tanır.

Yazılım metriklerinin birçok farklı sınıflandırması vardır; metrikler farklı bakış açılarından yorumlanır ve aynı özellikler farklı kriterlere göre sıralanır. Bu tür sınıflandırmalardan biri, metriklerin değerlendirme konularına göre gruplara ayrılması olabilir:

    boyut– yazılım boyutlarının karşılaştırmalı değerlendirmesi;

    karmaşıklık– yazılım sisteminin mimarisinin ve algoritmalarının değerlendirilmesi (bu ölçüm grubunun olumsuz göstergeleri, program kodunun geliştirilmesi, desteklenmesi ve hata ayıklaması sırasında karşılaşılabilecek sorunları gösterir);

    desteklenebilirlik- yazılım sisteminin sonraki değişikliklere yönelik potansiyelinin değerlendirilmesi.

Elbette bu sınıflandırmaya dahil olmayan başka gruplar da var, örneğin kullanıcı memnuniyeti ölçümleri veya başlangıç ​​​​gereksinimlerine uygunluk göstergeleri, ancak bu durumda teknik uygulama açısından yazılımın kalitesiyle ilgileneceğiz. .

Boyut önemli midir?

SLOC (kaynak kod satırları) metriği, kaynak kod satırlarının sayısını yansıtır. Bu gösterge her zaman bir yazılım sisteminin hacmini objektif olarak değerlendirmek için kullanılamaz - Sayısal değer kodlama stili gibi birçok rastgele faktöre bağlıdır. İki yazılım sistemini yalnızca bu kritere göre karşılaştırmak pek meşru değildir, SLOC için pek çok türetilmiş gösterge ortaya çıkmıştır: boş satırların sayısı; yorum içeren satır sayısı; yüzde yorumlar; yöntemlerde/işlevlerde bulunan kod satırı sayısı; yöntem/işlev başına ortalama kod satırı sayısı; sınıf/paket başına ortalama kod satırı sayısı; modül başına ortalama kod satırı sayısı vb.

SLOC'ye ek olarak, boyutu tahmin ederken, listenin normalleştirilmesinden (kaynak kodunun uygun forma getirilmesinden) sonra hesaplanan "mantıksal" kod satırları LSI göstergesi (mantıksal kaynak talimatları) sıklıkla kullanılır: bir satırda birkaç talimat, boş satırlar, açıklamaların temizlenmesi, verileri başlatmak için kod satırlarının biçimlendirilmesi vb. Böyle bir gösterge, sistem hacminin daha objektif bir değerlendirmesine hizmet edebilir (normalleştirmeyi kullanan gösterge SLOC ile aynı görünür - satır sayısı, ancak fiziksel değil, mantıksal). LSI'nin ayrıca türevleri de vardır; örneğin, orijinal programlama dilindeki kod satırlarının fiziksel sayısı olarak değil, bir dildeki talimatların sayısı olarak hesaplanan bir metrik düşük seviye(Assembler dili, MSIL vb.) normalleştirme ihtiyacını ortadan kaldırır.

Bu türdeki diğer ölçümler, belirli bir programlama paradigmasına özgü varlıklara dayanmaktadır. Günümüzde en popüler olanı nesne yönelimli programlama paradigmasıdır, ancak programlamaya yönelik işlevsel ve prosedürel yaklaşımların da kendi özel ölçümleri vardır. Nesneye yönelik bir yaklaşımla bir sistemin boyutu, içerdiği sınıfların sayısıyla hesaplanabilir. Sınıf sayısı göstergesi bu yaklaşımdaki ana metriklerden biridir ancak kullanılan programlama diline bağlı olarak projedeki ad alanı sayısı, yapı sayısı, numaralandırma, yöntem sayısı vb. gibi metrikler de kullanılabilir. Ayrıca bu metriklerin değerlerinin oranını belirleyerek bu göstergelerin “yoğunluğunu” hesaplayabilirsiniz. Örneğin sınıf sayısının yöntem sayısına oranını hesaplayabilir ve bir sınıfta ortalama kaç yöntemin yer aldığını anlayabilirsiniz. Ancak bu tür metrik için eşik değerlerinin belirlenmesi için daha fazla araştırmaya ihtiyaç vardır. En basit bir şekilde sınır değerlerinin belirlenmesi, bu metriklerin değerlerinin zaten hesaplandığı bir deney olabilir mevcut sistemler. Bu tür oranların hesaplanması, niceliksel metriklere dayanarak geliştirilen sistem fikrini düzeltmemize olanak sağlayacaktır.

Sistemin kalitesi doğrudan bu göstergelerin kullanımına bağlı değildir, ancak zamanla deneyimli geliştiriciler, müşterinin ihtiyaç duyduğu belirli bir işlevsellik için sistemin hacmini yaklaşık olarak tahmin edebilir. Bu durumda gözle görülür bir sapma ile verilen göstergeler(örneğin, sınıf başına yöntem sayısının az olduğu sınıf sayısında önemli bir artış), sistemde aşırı sayıda nesne olabileceği gerçeğini düşünmeye ve kodu daha erken bir aşamada yeniden düzenlemeye değer. .

Karmaşıklık

Kod kalitesini değerlendirmek ve kontrol etmek için karmaşıklık ölçümleri doğrudan kullanılabilir: döngüsel karmaşıklık, kod tutarlılığı, mirasın derinliği vb.

Döngüsel karmaşıklık metriği, programın kontrol akışının dal sayısını bir artırılarak gösterir. Bu ölçümü hesaplamak için kaynak koduna dayalı olarak bir girdi ve bir çıktı içeren yönlendirilmiş bir grafik oluşturulur. Bu durumda, grafiğin köşeleri, program kodunun yalnızca sıralı hesaplamalar içeren ve dal ve döngü operatörlerini içermeyen bölümleriyle ilişkilendirilir. Bu durumda yaylar bloktan bloğa geçişlerle ilişkilidir. Ayrıca grafiğin her köşesine başlangıç ​​noktasından, bitiş noktasına ise herhangi bir noktadan ulaşılabilir. Bu durumda siklomatik karmaşıklık, yay sayısı ile köşe sayısı arasındaki farkın iki katına çıkarılmasıyla hesaplanabilir. Böyle bir gösterge, programın kontrol akışının karmaşıklığını yansıtabilir ve hakkında bir sinyal verebilir. olası kullanılabilirlik kodun düşük kaliteli bölümü. Ne yazık ki, bariz pratik kullanışlılığına rağmen, bu metrik döngüsel operatörler arasında ayrım yapamıyor. Ayrıca, aynı grafiklerle temsil edilen program kodları, karmaşıklık açısından tamamen farklı yüklemlere (bir değişken içeren mantıksal ifadeler) sahip olabilir. Bu nedenle bazen döngüsel karmaşıklık diğer metriklerle, örneğin operatör sayısı metriğiyle eş zamanlı olarak kullanılır.

Sınıf bağlantı ölçüsü, sistemin yazılım bileşenlerinin birbirine bağımlılık derecesini belirlemenizi sağlar. Bu metriğin eşik değerlerine göre artan değerleri, zayıf modüler kapsülleme nedeniyle ortaya çıkan sistemin aşırı bağlanmasını gösterebilir. Bir yazılım sisteminin bu özelliği, kodun yeniden kullanılmasında zorluklara yol açabilir. Bu ölçüm, bir yazılım sisteminin mimarisini oluştururken ve yeniden tasarlarken bir kılavuz olarak kullanılabilir. Nesne uyumunu azaltmanın ana yolları, mantığı nesnelere daha sıkı bir şekilde kapsüllemek, algoritmaların işleyişini kavramsal bir bakış açısıyla gözden geçirmek ve yapısal ayrıştırmadır. Bu durumda, sınıf örnekleri oluşturulurken gereksiz bağlantıyı önleyen nesne fabrikaları kullanılır. Bu metriğin ham değerlerinin kullanılması sayesinde yazılım sisteminin tutarlılığının ve dolayısıyla kodun karmaşıklığının azaltılması mümkündür.

Bazen kodun tutarlılığını yansıtan bir ölçüt çeşidi kullanılır: operasyon çağrılarının sayısı. Bu ölçüm, sistem bağlantısını yöntem çağrıları biçiminde ölçmenize olanak tanır. Metrik, yalnızca kullanıcı tarafından tanımlanan işlemlere yapılan çağrıları sayar. Örneğin, A() yöntemi B() yöntemini üç kez çağırırsa bu metriğin değeri bir olacaktır; A(), C() ve D() yöntemlerinden B() yöntemi bir kez çağrılırsa, metrik değer üçe eşit olacaktır. Ancak bu metriğin mutlak değeri, yazılım sistemlerinin tasarlanması ve kodlanmasına yönelik yaklaşımlara bağlı olarak projeden projeye önemli ölçüde farklılık gösterebilir. Aynı projelerde aynı geliştirme ekibi içinde bile, bu metriğin değeri, yazılım sisteminin yapısını etkileyen öznel faktörlerden (örneğin, belirli bir geliştiricinin mantığı ayrı yöntemlere ayırırken kullandığı stil) dolayı farklılık gösterebilir.

Bu ölçümün hesaplanmasının doğrudan sonucu şüphelidir pratik önemi ancak metriğin toplam değeriyle birlikte sınıftaki yöntemlerin sayısı sistemin tutarlılığına ilişkin objektif bir değerlendirme verebilir. Örneğin, bu metriği karmaşıklık metriği ve hacimsel özelliklerle birlikte kullanırsanız, bu metriklerin değerlerinin toplamına dayanarak, yeterince yüksek kalitede olmayan kodu tespit edebilirsiniz.

Karmaşıklığı değerlendirmeye yönelik bir diğer önemli ölçüm, sistemdeki tüm kullanıcı tanımlı sınıflar için miras derinliğinin ortalama değeri olarak hesaplanan ortalama miras derinliğidir. Bu, miras hiyerarşisinin en alt düzeyinde olmayan sınıfları hesaba katmaz. Metriğin yüksek değerleri, yazılım sisteminin mimarlarının nesne yönelimli programlama tekniklerine fazla kapıldığına işaret edebilir ve bu, sistemin daha da gelişmesini olumsuz yönde etkileyebilir. Kalıtım tutarlılığı önemli ölçüde artırır ve bu durum diğer sistem değerlendirme ölçümlerine yansıtılamayabilir. Çoğu zaman, program kodunu oluştururken, onu eşdeğer tekniklerle değiştirerek kalıtım kullanmaktan kaçınabilirsiniz. Örneğin, bunun yerine bağımlılık enjeksiyonunu ve IoC kapsayıcılarını kullanabilirsiniz. Bu metriğin hesaplanmasının sonucu genellikle ham haliyle mimari ve yeniden düzenlemenin pratik problemlerinde kullanılır. Ortaya çıkan metrikler daha karmaşık karmaşık metriklerde de kullanılabilir. Başka bir deyişle, eğer bu metriğin değeri büyükse, o zaman bir anormallik hemen tespit edilebilir. Ayrıca bu ölçüm, bir yazılım sistemini daha doğru bir şekilde ölçmek için McCabe sistem karmaşıklığı ve hacmi gibi diğer ölçümlerle birlikte kullanılabilir.

Genel olarak karmaşıklık ölçümleri, yazılım kalitesinin izlenmesi ve yönetilmesi sürecinde yazılım üreticilerine önemli ölçüde yardımcı olabilir.

Desteklenebilirlik

Bu tür ölçümler, program kodunu koruma ve geliştirme sürecinin karmaşıklığını gösterir ve kural olarak karmaşıklık ölçümleriyle yakından ilişkilidir, ancak sistemin destek yeteneklerini yansıtan kendi özelliklerine sahiptir.

Bu kategorideki ana metriklerden biri, bir programın dört ölçülebilir özelliğini tanımlayan Halstead metriğidir: ayırıcı karakterleri, prosedür adlarını ve işlem işaretlerini (ifade sözlüğü) içeren benzersiz program ifadelerinin sayısı; benzersiz program işlenenlerinin sayısı (işlenen sözlüğü); programdaki toplam ifade sayısı; programdaki toplam işlenen sayısı. Bu özelliklere dayanarak temel değerlendirmeler yapılır: bir program sözlüğü derlenir; programın uzunluğu, hacmi ve karmaşıklığı belirlenir. Daha sonra, değerlendirmemize olanak tanıyan çeşitli önlemleri hesaplamayı öneriyoruz. program kodu. Örneğin, programlamanın kalitesini hesaplamak için kullanılan bir ifade, bir programı anlamanın zorluğu, bir program oluşturmanın zihinsel maliyeti vb.

Halsted metriği yalnızca bilgilendirme amaçlıdır; ancak sistemin gelecekte desteklenebilirliğini ölçmemize olanak tanıyan birkaç ölçümden biri olmaya devam etmektedir; bu göstergeüretilen ürünün kalitesiyle doğrudan ilişkilidir.

Kod Analiz Aracı

Microsoft platformundaki geliştiriciler sürümü kullanabilir Görsel stüdyo 2008, hesaplamanıza olanak tanır temel set temel metrikleri kullanın ve bunları gerçek zamanlı olarak takip edin (Şekil 2). Ancak metriklerin ana kullanım durumu, geliştirme yöneticilerine bir ürünün kalitesinin azalmış veya artmış olabileceği konusunda bilgi vermektir. Bu nedenle bu tür ölçümleri proje oluşturma sürecinde hesaplamak mantıklıdır.

Visual Stuido 2008 ve Microsoft Build, ciddi bir metrik hiyerarşisi oluşturmanıza izin vermez ve bunun için hesaplamanıza izin veren NDepend gibi diğer araçları kullanmalısınız. Çeşitli türler uyum, kalıtım ve soyutlamanın gereksinimlere uygun program oluşturma sürecine entegre edilmesi özel takım geliştiriciler.

Kod metriklerini kullanmayla ilgili sorunlar

Metrikler geliştirme sürecini kontrol etmenize izin vermesine rağmen onlarla çalışmak bir takım sorunları beraberinde getirir.

İlk olarak, şu anda bilinen tüm kod ölçümleri yeterince anlamlı veya doğru değil. Yazılım sisteminin durumunun objektif bir resmini sağlayamazlar, yalnızca belirli bir algoritma kullanılarak hesaplanan göstergeleri sağlarlar. İkinci olarak, çalışanların program kodlarını metriklerin üreteceği şekilde "optimize etmeleri" nedeniyle ölçüm süreci yapay olarak bozulabilir. En iyi skorlar. Ayrıca metriklerin resmi kullanımı çalışanların deneyimini, şirketin seviyesini hesaba katmaz ve yalnızca fayda sağlamakla kalmaz, aynı zamanda zarar da getirebilir.

Bununla birlikte metrikler, geliştiricilerin ve proje yöneticilerinin elinde, geliştirmenin daha düşük bir düzeye doğru ilerlediği anları belirlemelerine olanak tanıyan oldukça yararlı bir araçtır. kalite düzeyi ve sistemdeki en karmaşık alanları tanır. Sayısal göstergelerin belirlenmesi, geliştirilmekte olan ürün hakkında yeni bilgiler sağlayabilir ve ürünün daha da geliştirilmesi için maliyetlerin daha yetkin bir şekilde planlanmasına yardımcı olabilir.

Sergey Zvezdin ([e-posta korumalı]) – Güney Ural Devlet Üniversitesi'nde (Chelyabinsk) yüksek lisans öğrencisi.

MSU'da uzaktan eğitim portalı açıldı

Moskova Devlet Üniversitesi Uzaktan Eğitim Okulu. M.V. Lomonosov kendi İnternet portalını açtı. Moskova Devlet Üniversitesi ve Rusya Bilimler Akademisi'nin ortak açık elektronik kütüphanesine, ders kitaplarına ve kurslara, ses ve video materyallerine ve ayrıca Eğitim programları uzaktan kumanda kullanarak eğitim teknolojileri. Bazı portal kaynakları yalnızca dinleyicilerin kullanımına açıktır mesafe programlarıüniversite ile yapılan anlaşma uyarınca öğrenim ücretini ödeyenler. MSU videoları şu anda mevcut: kanal YouTube'da üniversite. Eğitim kanalı, derslerin yanı sıra üniversite etkinliklerinin kayıtlarını da içerir.

Yalnızca %17 için e-Öğrenim Rus şirketleri

SuperJob.ru portalının araştırma merkezi, Rus şirketlerinin personeli için çevrimiçi eğitime ilişkin bir anketin sonuçlarını sundu. Yerli işverenler arasında kullanım uzaktan EğitimİK çalışmalarında pek yaygın değildir. Şirketlerin yalnızca %17'si personeline bu tür bir eğitim sunuyor. Bu teknolojiler ağırlıklı olarak 5 bin kişilik (%50) kadroya sahip büyük şirketlerde kullanılıyor. İşverenlerin %79'u bu uygulamayı hiç kullanmıyor. Bunun nedenleri ya gerekli teknik ekipmanın bulunmamasından ya da yönetimin bu tür eğitimleri uygulama konusundaki isteksizliğinden kaynaklanmaktadır. Genel olarak Rusların yalnızca %11'inin uzaktan eğitim deneyimi var. Bu sayıdan yanıt verenlerin %9'u sonuçtan memnun kaldı ve %2'si ders çalışmayı bırakıp okulu bıraktı. Eğitimi tamamlayanlar arasında kadınların neredeyse iki katı kadar erkek vardı (sırasıyla %11 ve %6). Aynı zamanda 35-55 yaş arası Ruslar gençlere göre daha sık internet üzerinden eğitim görüyor. 40-50 yaşlarındaki katılımcıların %12'si ve 23 yaşın altındaki Rusların yalnızca %9'u uzaktan eğitimde başarılı deneyime sahip olabilir.

“Maksimum Ölçeklenebilirlik 2009” yarışmasının sonuçları

“Maksimum Ölçeklenebilirlik” yüksek performanslı bilgi işlem projesi yarışması, geçen yıl olduğu gibi, uluslararası nanoteknoloji forumuna denk gelecek şekilde zamanlandı. Yirmi Rus şehrinden bilim adamları zafer ilan etti, ancak organizatörler Intel ve Rus Nanoteknoloji Şirketi tüm ödülleri başkentteki projelere verdi. Büyük Ödül, Moskova Devlet Üniversitesi Kimya Fakültesi'nden Vladimir Bochenkov'a verildi. Lomonosov'a "Sıcaklıkla hızlandırılmış dinamikler için paralel bir algoritmanın geliştirilmesi ve uygulanması" projesi için. Yazar tarafından önerilen sistem, nanoyapıların yoğunlaşmasını, moleküler ışın epitaksisini ve biyolojik moleküllerin etkileşimini incelemeyi mümkün kılar.

Dünya Programlama Şampiyonası başladı

Bilgisayar Makineleri Birliği'nin (ACM) ev sahipliği yaptığı ve IBM sponsorluğunda düzenlenen 34. yıllık Uluslararası Üniversite Programlama Yarışması'nın (ICPC) finalleri, bölgesel yarışmalarda kazanan yüz öğrenci takımını birbirleriyle karşı karşıya getirecek. Onlara 5 saat içinde çözülmesi gereken en az sekiz problem verilecek. Final 5 Şubat 2010'da Harbin Mühendislik Üniversitesi'nde (Çin) gerçekleştirilecektir. Geçmişteki zorluklar arasında, örneğin denizde kaybolan bir gemiyi bulmak, hasarlı bir radyo vericisinin konumunu belirlemek, golf oyunundaki engelleri hesaplamak, mesajları kodlamak ve kodunu çözmek, Braille alfabesiyle yazdırmak ve labirentten çıkış yolu bulmak yer alıyor. Geçen yıl dört altın madalyadan üçü Rus takımları tarafından kazanılmıştı. Eleme aşamasında şampiyonaya 88 ülkeden 1.838 üniversiteden 7.109 takım katıldı. St. Petersburg Devlet Bilgi Teknolojileri, Mekanik ve Optik Üniversitesi ekibi üst üste ikinci kez dünya şampiyonu oldu.


dipnot

Çalışma, 7 metrik sınıfına ve bunların 50'den fazla temsilcisine genel bir bakış sunmaktadır. Detaylı Açıklama ve kullanılan hesaplama algoritmaları, metriklerin yazılım geliştirmedeki rolü anlatılmaktadır.

giriiş

Makale Systems LLC tarafından yürütülen çalışmanın ilk aşamasıdır yazılım doğrulama"Metrikleri hesaplamak için yeni özel araçlar oluşturmak. Bir dizi sorunun çözümüne sistematik olarak yaklaşmaya yardımcı olacak mevcut metriklere genel bir bakıştır. Yazılımın diğer platformlara aktarılmasının karmaşıklığını değerlendirmek için bir metodoloji geliştirilmesi planlanmaktadır. program kodunun paralelleştirilmesinin karmaşıklığının değerlendirilmesi için de bu yön, PVS-Studio ürününün yalnızca statik bir analizör olarak değil, aynı zamanda 64 bit sistemlerde uzmanlaşırken programcıların işçilik maliyetlerini tahmin etmek için bir araç olarak yeteneklerinin geliştirilmesidir. Algoritmaların çok çekirdekli sistemlere uyarlanması.

Bu makale çok çeşitli yazılım ölçümlerini tanıtacaktır. Doğal olarak, mevcut tüm metriklerin sunulması tavsiye edilmez; sonuçların daha fazla kullanılmasının imkansızlığı, ölçümlerin otomatikleştirilmesinin imkansızlığı veya bunların dar uzmanlığı nedeniyle çoğu pratikte asla kullanılmaz. Ancak oldukça sık kullanılan metrikler de vardır ve bunların incelemesi aşağıda verilecektir.

Genel olarak ölçümlerin kullanımı, proje ve işletme yöneticilerinin geliştirilen veya geliştirilmekte olan bir projenin karmaşıklığını incelemesine, iş miktarını, geliştirilmekte olan programın stilini ve her geliştiricinin belirli bir çözümü uygulamak için harcadığı çabaları değerlendirmesine olanak tanır. . Bununla birlikte, metrikler yalnızca tavsiye niteliğindeki özellikler olarak hizmet edebilir; tamamen yönlendirilemezler, çünkü yazılım geliştirirken, programları için şu veya bu önlemi en aza indirmeye veya en üst düzeye çıkarmaya çalışan programcılar hilelere başvurabilir, hatta programın verimliliğini azaltabilir. Ek olarak, örneğin programcı az sayıda kod satırı yazmışsa veya küçük sayı yapısal değişiklikler, bu onun hiçbir şey yapmadığı anlamına gelmez, ancak program hatasının bulunmasının çok zor olduğu anlamına gelebilir. Son sorun ancak karmaşıklık ölçümleri kullanılarak kısmen çözülebilir, çünkü daha fazlası karmaşık program Hatayı bulmak daha zordur.

1. Nicel ölçümler

Öncelikle programların kaynak kodlarının niceliksel özelliklerini (basitliğinden dolayı) dikkate almalıyız. En temel ölçüm, kod satırı sayısıdır (SLOC). Bu metrik başlangıçta bir projedeki işçilik maliyetlerini tahmin etmek için geliştirildi. Ancak aynı işlevsellik birden fazla satıra bölünebildiğinden veya tek bir satıra yazılabildiğinden, tek satıra birden fazla komut yazabilen dillerin ortaya çıkmasıyla metrik neredeyse kullanılamaz hale geldi. Bu nedenle mantıksal ve fiziksel kod satırları arasında bir ayrım yapılır. Mantıksal dizeler kod program komutlarının sayısıdır. Bu seçenek açıklamanın aynı zamanda dezavantajları da vardır, çünkü kullanılan programlama diline ve programlama stiline büyük ölçüde bağlıdır.

SLOC'ye ek olarak niceliksel özellikler şunları da içerir:

boş satır sayısı,

yorum sayısı,

yorumların yüzdesi (yorum içeren satır sayısının toplam satır sayısına oranı, yüzde olarak ifade edilir),

işlevler için ortalama satır sayısı (sınıflar, dosyalar),

işlevler (sınıflar, dosyalar) için kaynak kodunu içeren ortalama satır sayısı,

modüller için ortalama satır sayısı.

Bazen programın biçimsel derecelendirmesi (F) arasında ek bir ayrım yapılır. Programın n eşit parçaya bölünmesinden ve Fi = SIGN (Ncomm.i / Ni - 0.1) formülünü kullanarak her parça için puanın hesaplanmasından oluşur; burada Ncomm.i, i'inci parçadaki yorumların sayısıdır, Ni i'inci parçadaki toplam satır kodu sayısıdır. Daha sonra tüm programın toplam puanı şu şekilde belirlenecektir: F = SUMFi.

Program kodunda belirli birimlerin sayılmasına dayalı metrikler grubuna Halstead metrikleri de dahildir. Bu ölçümler aşağıdaki göstergelere dayanmaktadır:

n1 - semboller dahil benzersiz program ifadelerinin sayısı

sınırlayıcılar, prosedür adları ve işlem işaretleri (operatör sözlüğü),

n2 - benzersiz program işlenenlerinin sayısı (işlenen sözlüğü),

N1 - programdaki toplam ifade sayısı,

N2 - programdaki toplam işlenen sayısı,

n1" - benzersiz operatörlerin teorik sayısı,

n2" benzersiz işlenenlerin teorik sayısıdır.

Sunulan notasyonları dikkate alarak şunları belirleyebiliriz:

n=n1+n2 - program sözlüğü,

N=N1+N2 - program uzunluğu,

n"=n1"+n2" - programın teorik sözlüğü,

N"= n1*log2 (n1) + n2*log2 (n2) - teorik program uzunluğu (biçimsel olarak doğru programlar için N'nin N"den sapması %10'u aşmaz)

V=N*log2 n - program hacmi,

V"=N"*log2 n" programın teorik hacmidir; burada n*, programın teorik sözlüğüdür.

L=V"/V - ideal bir program için programlama kalite seviyesi L=1

L"= (2 n2)/ (n1*N2) - teorik parametreleri hesaba katmadan yalnızca gerçek bir programın parametrelerine dayanan programlama kalitesi düzeyi,

EC =V/(L")2 - programı anlama zorluğu,

D=1/ L" - program kodlamasının karmaşıklığı,

y" = V/ D2 - ifade dili düzeyi

I=V/D - programın bilgi içeriği; bu özellik, programı oluşturmanın zihinsel maliyetlerini belirlemenizi sağlar

E=N" * log2 (n/L) - bir program geliştirirken gerekli entelektüel çabanın değerlendirilmesi, bir program yazarken gerekli temel çözümlerin sayısını karakterize eder

Halstead metrikleri kullanıldığında, aynı işlevselliği farklı sayıda hat ve operatörle kaydetme yeteneğiyle ilgili dezavantajlar kısmen telafi edilir.

Niceliksel olan diğer bir yazılım metriği türü Gilb metrikleridir. Programın koşullu ifadelerin veya döngüsel ifadelerin yoğunluğuna dayalı olarak yazılımın karmaşıklığını gösterirler. Bu ölçüm, basitliğine rağmen, bir programı yazmanın ve anlamanın karmaşıklığını oldukça iyi yansıtır ve koşullu ve döngüsel ifadelerin maksimum iç içe geçme düzeyi gibi bir gösterge eklendiğinde, bu metriğin etkinliği önemli ölçüde artar.

2. Program kontrol akışı karmaşıklığının ölçümleri

Niceliksel göstergelere değil, program kontrol grafiğinin analizine dayanan bir sonraki büyük metrik sınıfına, program kontrol akışı karmaşıklığı metrikleri adı verilir.

Metriklerin kendilerini doğrudan tanımlamadan önce, daha iyi anlaşılması için programın kontrol grafiği ve onu oluşturma yöntemi açıklanacaktır.

Bir program sunulsun. Bu program için, yalnızca bir giriş ve bir çıkış içeren yönlü bir grafik oluşturulurken, grafiğin köşeleri program kodunun yalnızca sıralı hesaplamaların olduğu ve dal ve döngü operatörlerinin olmadığı bölümleriyle ilişkilendirilir. yaylar bloktan bloğa geçişler ve program yürütme dalları ile ilişkilidir. Bu grafiği oluşturmanın koşulu: her köşeye ilk köşeden ulaşılabilir ve son köşeye başka herhangi bir köşeden ulaşılabilir.

Ortaya çıkan grafiğin analizine dayanan en yaygın tahmin, programın döngüsel karmaşıklığıdır (McCabe döngüsel sayısı). V(G)=e - n + 2p olarak tanımlanır; burada e yay sayısı, n köşe sayısı, p bağlı bileşenlerin sayısıdır. Bir grafiğin bağlı bileşenlerinin sayısı, grafiği güçlü bağlantılı bir grafiğe dönüştürmek için eklenmesi gereken yayların sayısı olarak düşünülebilir. Herhangi iki köşe karşılıklı olarak ulaşılabilirse, bir grafa güçlü bağlantılı denir. Doğru programların grafikleri için, yani giriş noktasından erişilemeyen bölümlere ve "sarkan" giriş ve çıkış noktalarına sahip olmayan grafikler için, güçlü bağlantılı bir grafik genellikle programın sonunu belirten bir tepe noktasından bir köşeye bir yayın kapatılmasıyla elde edilir. bu programa giriş noktasını belirtir. Temel olarak V(G), güçlü bağlantılı bir grafikteki doğrusal olarak bağımsız devrelerin sayısını belirler. Yani doğru yazılmış programlarda p=1 olduğundan siklomatik karmaşıklığın hesaplanmasına yönelik formül şu şekli alır:

Ne yazık ki bu değerlendirme döngüsel ve koşullu yapıları birbirinden ayıramamaktadır. Bu yaklaşımın bir diğer önemli dezavantajı, aynı grafiklerle temsil edilen programların tamamen farklı karmaşıklığa sahip tahminlere sahip olabilmesidir (bir yüklem, en az bir değişken içeren mantıksal bir ifadedir).

Bu eksikliği gidermek için G. Myers yeni bir teknik geliştirdi. Tahmin olarak, basit yüklemler için h'nin sıfıra eşit olduğu ve n-ary yüklemler için h = n-1 olduğu bir aralığın alınmasını önerdi (bu tahmin aynı zamanda aralık olarak da adlandırılır). Bu yöntem, farklı karmaşıklıktaki yüklemleri ayırt etmeyi mümkün kılar, ancak pratikte neredeyse hiç kullanılmaz.

McCabe yönteminin bir başka modifikasyonu da Hansen yöntemidir. Bu durumda program karmaşıklığının ölçüsü bir çift (döngüsel karmaşıklık, ifade sayısı) olarak temsil edilir. Bu önlemin avantajı yazılımın yapısına olan duyarlılığıdır.

Chen'in topolojik ölçüsü, program grafiğinin oluşturduğu bölgeler arasındaki sınır geçişlerinin sayısı açısından bir programın karmaşıklığını ifade eder. Bu yaklaşım yalnızca kontrol yapılarının sıralı bağlantısına izin veren yapılandırılmış programlara uygulanabilir. Yapılandırılmamış programlar için Chen ölçüsü önemli ölçüde koşullu ve koşulsuz dallara bağlıdır. Bu durumda ölçümün üst ve alt sınırlarını belirleyebilirsiniz. En üstteki m+1'dir; burada m, karşılıklı iç içe geçmiş mantıksal operatörlerin sayısıdır. Düşük olan 2'ye eşittir. Bir programın kontrol grafiği yalnızca bir bağlantılı bileşene sahip olduğunda Chen ölçüsü McCabe siklomatik ölçüsüyle çakışır.

Bir programın kontrol grafiğini analiz etme konusuna devam edersek, başka bir metrik alt grubunu - Harrison ve Majel metriklerini - ayırt edebiliriz.

Bu önlemlerde yatırım düzeyi ve programın uzunluğu dikkate alınır.

Her köşeye, temsil ettiği operatöre göre kendi karmaşıklığı atanır. Bu başlangıç ​​köşe karmaşıklığı, Halstead ölçümleri de dahil olmak üzere herhangi bir şekilde hesaplanabilir. Her yüklem tepe noktası için, ondan çıkan yayların uçları olan köşe noktaları tarafından oluşturulan bir alt grafiğin yanı sıra bu tür her köşe noktasından (alt grafiğin alt sınırı) ulaşılabilen köşe noktalarını ve bu köşelerin üzerinde yer alan köşe noktalarını seçiyoruz. yüklem tepe noktasından bazı alt sınırlara giden yollar. Bu alt grafa yüklem tepe noktasının etki alanı denir.

Bir yüklem tepe noktasının azaltılmış karmaşıklığı, etki alanına dahil olan köşelerin başlangıç ​​veya azaltılmış karmaşıklıklarının toplamı ile yüklem tepe noktasının kendisinin birincil karmaşıklığının toplamıdır.

Bir programın işlevsel ölçüsü (SCOPE), kontrol grafiğinin tüm köşelerinin azaltılmış karmaşıklıklarının toplamıdır.

Fonksiyonel ilişki (SCORT), bir kontrol grafiğindeki köşe sayısının işlevsel karmaşıklığına oranıdır ve terminal köşe noktaları, köşe sayısından hariç tutulur.

SCORT aynı siklomatik sayıya sahip grafikler için farklı değerler alabilir.

Pivovarsky metriği, siklomatik karmaşıklık ölçüsünün başka bir modifikasyonudur. Yalnızca sıralı ve iç içe geçmiş kontrol yapıları arasındaki değil, aynı zamanda yapılandırılmış ve yapılandırılmamış programlar arasındaki farkları da izlemenize olanak tanır. N(G) = v *(G) + SUMAPi ilişkisiyle ifade edilir; burada v *(G), V(G) ile aynı şekilde hesaplanan değiştirilmiş siklomatik karmaşıklıktır, ancak bir farkla: bir CASE ifadesi n çıkışlı, n - 1 operatör yerine tek bir mantıksal operatör olarak kabul edilir.

Pi, i'inci yüklemin tepe noktasının yuvalanma derinliğidir. Yüklem köşelerinin yuvalanma derinliğini hesaplamak için "etki alanları" sayısı kullanılır. Yuvalama derinliği, söz konusu tepe noktasında tamamen bulunan veya onunla kesişen yüklemlerin tüm "etki alanlarının" sayısı olarak anlaşılmaktadır. Yüklemlerin değil, “etki alanlarının” iç içe geçmesi nedeniyle yuvalamanın derinliği artar. Pivovarsky ölçüsü, sıralı programlardan iç içe geçmiş programlara ve daha sonra yapılandırılmamış programlara geçerken artar; bu, bu grubun diğer birçok ölçüsüne göre büyük bir avantajdır.

Woodward ölçüsü - kontrol grafiğinin yaylarının kesişme sayısı. İyi yapılandırılmış bir programda bu tür durumların ortaya çıkmaması gerektiğinden bu metrik esas olarak zayıf yapılandırılmış dillerde (Assembler, Fortran) kullanılır. Kontrol sıralı operatörler olan iki köşenin ötesine geçtiğinde bir kesişme noktası oluşur.

Sınır değer yöntemi aynı zamanda programın kontrol grafiğinin analizine dayanmaktadır. Bu yöntemi tanımlamak için birkaç ek kavramın tanıtılması gerekir.

G, tek bir başlangıç ​​ve tek bir son köşeye sahip bir programın kontrol grafiği olsun.

Bu grafikte yayların gelen köşe sayısına köşenin negatif derecesi, tepe noktasından çıkan yay sayısına ise köşenin pozitif derecesi denir. Daha sonra grafik köşeleri kümesi iki gruba ayrılabilir: pozitif dereceli köşeler<=1; вершины, у которых положительная степень >=2.

Birinci grubun köşelerine alıcı köşeler, ikinci grubun köşelerine ise seçim köşeleri diyeceğiz.

Her alıcı köşe noktasının azaltılmış karmaşıklığı 1'dir, ancak uç noktanın karmaşıklığı 0'dır. G'deki tüm köşelerin azaltılmış karmaşıklıkları, programın mutlak sınır karmaşıklığını oluşturmak için toplanır. Bundan sonra programın göreceli marjinal karmaşıklığı belirlenir:

burada S0 programın göreceli marjinal karmaşıklığıdır, Sa programın mutlak marjinal karmaşıklığıdır, v program grafiğinin toplam köşe sayısıdır.

Kontrol grafiğindeki olası yolların sayısı cinsinden ifade edilen bir Schneidewind metriği vardır.

3. Veri akışı karmaşıklığı ölçümleri

Bir sonraki metrik sınıfı, veri kontrol akışı karmaşıklığı metrikleridir.

Chapin metriği: Yöntemin özü, girdi-çıktı listesindeki değişkenlerin kullanımının doğasını analiz ederek tek bir yazılım modülünün bilgi gücünü değerlendirmektir.

G/Ç listesini oluşturan değişkenlerin tamamı 4 işlevsel gruba bölünmüştür:

1. P - hesaplamalar ve çıktı sağlamak için girdi değişkenleri,

2. M - program içerisinde değiştirilen veya oluşturulan değişkenler,

3. C - yazılım modülünün çalışmasının kontrolünde yer alan değişkenler (kontrol değişkenleri),

Her değişken aynı anda birden fazla işlevi yerine getirebildiğinden, karşılık gelen her bir işlevsel grupta dikkate alınması gerekir.

Chapin metriği:

Q = a1*P + a2*M + a3*C + a4*T,

burada a1, a2, a3, a4 ağırlıklandırma katsayılarıdır.

S = P + 2M + 3C + 0,5T

Span metriği, her program bölümündeki veri erişimlerinin yerelleştirilmesine dayanmaktadır. Spen, program metninde ilk ve son görünümü arasında belirli bir tanımlayıcıyı içeren ifadelerin sayısıdır. Bu nedenle, n kez görünen bir tanımlayıcının aralığı n-1'dir. Geniş bir aralıkta test etme ve hata ayıklama daha karmaşık hale gelir.

Veri akışının karmaşıklığını dikkate alan bir diğer ölçüm, programların karmaşıklığını küresel değişkenlere erişimle ilişkilendiren bir ölçümdür.

Bir modül-global değişken çifti (p,r) ile gösterilir; burada p, r global değişkenine erişimi olan modüldür. Programın gerçekten r değişkenine erişip erişmediğine bağlı olarak iki tür "modül - global değişken" çifti oluşturulur: gerçek ve mümkün. r'ye p ile olası referans, r'nin varoluş alanının p'yi içerdiğini gösterir.

Bu özellik Aup ile gösterilir ve Up modüllerinin gerçekte global değişkenlere kaç kez eriştiğini gösterir; Pup sayısı ise bunlara kaç kez erişebileceklerini gösterir.

Gerçek çağrı sayısının olası çağrı sayısına oranı belirlenir

Bu formül, rastgele bir global değişkene referans veren rastgele bir modülün yaklaşık olasılığını gösterir. Açıkçası, bu olasılık ne kadar yüksek olursa, herhangi bir değişkenin "yetkisiz" olarak değiştirilme olasılığı da o kadar yüksek olur ve bu, programın değiştirilmesiyle ilgili çalışmayı önemli ölçüde karmaşıklaştırabilir.

Kafur ölçüsü bilgi akışları kavramına dayalı olarak oluşturulmuştur. Bu önlemi kullanmak için yerel ve küresel akış kavramları tanıtılır: A'dan B'ye yerel bir bilgi akışı şu durumlarda mevcuttur:

1. Modül A, modül B'yi çağırır (doğrudan yerel iş parçacığı)

2. Modül B, A modülünü çağırır ve A, B'ye B'de kullanılan bir değeri döndürür (dolaylı yerel akış)

3. Modül C, A ve B modüllerini çağırır ve A modülünün sonucunu B'ye aktarır.

Daha sonra, küresel bilgi akışı kavramını vermeliyiz: A modülünün D'ye bilgi koyması ve B modülünün D'den gelen bilgiyi kullanması durumunda, D küresel veri yapısı aracılığıyla A'dan B'ye küresel bir bilgi akışı vardır.

Bu kavramlara dayanarak, I değeri - prosedürün bilgi karmaşıklığı:
I = uzunluk * (fan_in * fan_out)2
Burada:

uzunluk - prosedür metninin karmaşıklığı (Halstead, McCabe, LOC ölçümleri vb. gibi hacim ölçümlerinden biri aracılığıyla ölçülür)

fan_in - prosedüre giren yerel iş parçacıklarının sayısı artı prosedürün bilgi aldığı veri yapılarının sayısı

fan_out - prosedürden çıkan yerel iş parçacıklarının sayısı artı prosedür tarafından güncellenen veri yapılarının sayısı

Bir modülün bilgi karmaşıklığı, içinde yer alan prosedürlerin bilgi karmaşıklıklarının toplamı olarak tanımlanabilir.

Bir sonraki adım, bir modülün bilgi karmaşıklığının bazı veri yapılarına göre dikkate alınmasıdır. Veri yapısına göre modül karmaşıklığının bilgi ölçüsü:

J = W * R + W * RW + RW *R + RW * (RW - 1)

W, yalnızca veri yapısını güncelleyen prosedürlerin sayısıdır;

R - yalnızca veri yapısından bilgileri okuyun;

RW - veri yapısındaki bilgileri hem okur hem de günceller.

Bu gruptaki diğer bir ölçü ise Oviedo ölçüsüdür. Özü, programın doğrusal, kesişmeyen bölümlere (programın kontrol grafiğini oluşturan operatör ışınları) bölünmesidir.

Metriğin yazarı aşağıdaki varsayımlarda bulunur: Programcı, bir ışın içindeki bir değişkenin oluşumlarını tanımlamak ve kullanmak arasındaki ilişkiyi, ışınlar arasında olduğundan daha kolay bulabilir; Her ışındaki farklı tanımlayıcı oluşumların sayısı, her ışındaki değişken oluşumların toplam sayısından daha önemlidir.

R(i) ile i ışınının etki yarıçapı içinde yer alan değişkenlerin tanımlayıcı oluşumlarını gösterelim (bir değişkenin tanımlayıcı bir oluşumu, eğer değişken onun içinde yerel ise, bir ışının etki yarıçapı içindedir). ve tanımlayıcı bir oluşumu vardır veya bunun için daha önceki bir ışında tanımlayıcı bir oluşum vardır ve yol boyunca yerel bir tanım yoktur). Oluşumları zaten i ışınında olan değişkenler kümesini V(i) ile gösterelim. Daha sonra i-inci ışının karmaşıklığının ölçüsü şu şekilde verilir:

DF(i)=TOPLA(DEF(vj )), j=i...||V(i)||

burada DEF(vj), vj değişkeninin R(i) kümesinden tanımlayıcı oluşumlarının sayısıdır ve ||V(i)|| - V(i) kümesinin kuvveti.

4. Kontrol akışı ve program verilerinin karmaşıklığına ilişkin ölçümler

Dördüncü metrik sınıfı, hem niceliksel metrikler sınıfına, program kontrol akışı karmaşıklığı metrikleri sınıfına hem de veri kontrol akışı karmaşıklığı metrikleri sınıfına (kesin olarak konuşursak, bu metrikler sınıfı ve program kontrolü sınıfı) yakın olan metriklerdir. akış karmaşıklığı metrikleri aynı sınıf topolojik metriklerdir, ancak netlik açısından bunları bu bağlamda ayırmak mantıklıdır). Bu metrik sınıfı, program yapısının karmaşıklığını hem niceliksel hesaplamalara hem de kontrol yapılarının analizine dayanarak belirler.

Bu metriklerden ilki M-Measure testidir. Bir test ölçüsü M, aşağıdaki koşulları karşılayan bir karmaşıklık ölçüsüdür:

Ölçü, yerleştirme derinliğiyle birlikte artar ve programın uzunluğu dikkate alınır. Test tedbiriyle yakından ilgili olan, düzenli yerleştirmelere dayalı bir tedbirdir. Program karmaşıklığının bu ölçüsünün fikri, programın kontrol grafiğini tanımlayan gerekli minimum sayıda parantez ile düzenli bir ifadedeki toplam karakter sayısını (işlenenler, operatörler, parantez) saymaktır. Bu gruptaki tüm önlemler, kontrol yapılarının iç içe geçmesine ve programın uzunluğuna duyarlıdır. Ancak hesaplama karmaşıklığı düzeyi artar.

Ayrıca yazılım kalitesinin bir ölçüsü de program modüllerinin tutarlılığıdır. Modüller sıkı bir şekilde birleştirilirse programın değiştirilmesi ve anlaşılması zorlaşır. Bu ölçü sayısal olarak ifade edilmez. Modül bağlantı türleri:

Veri bağlantısı - eğer modüller parametrelerin aktarımı yoluyla etkileşime giriyorsa ve her parametre bir temel bilgi nesnesidir. En çok tercih edilen bağlantı (kaplin) türüdür.

Veri yapısına göre bağlantı - eğer bir modül diğerine veri alışverişi için bir bileşik bilgi nesnesi (yapı) gönderirse.

Kontrol bağlantısı - eğer biri diğerine bir bilgi nesnesi gönderirse - dahili mantığını kontrol etmek için tasarlanmış bir bayrak.

Modüller, aynı küresel veri alanına başvuruyorlarsa ortak bir alanla bağlanırlar. Küresel kapsam üzerinden bağlantı istenmez çünkü ilk olarak, küresel kapsamı kullanan bir modüldeki bir hata, başka herhangi bir modülde beklenmedik bir şekilde ortaya çıkabilir; ikincisi, programcının belirli bir modül tarafından hangi verilerin kullanıldığını belirlemesi zor olduğundan bu tür programların anlaşılması zordur.

İçeriğe göre uyum - modüllerden birinin diğerinin içine bağlanması durumunda. Bu, modülerlik ilkesiyle tamamen çeliştiği için kabul edilemez bir bağlantı türüdür; modülün kara kutu olarak temsili.

Harici bağlantı - iki modül, iletişim protokolü gibi harici verileri paylaşır.

Mesajları kullanan bağlantı, en özgür bağlantı türüdür; modüller birbirine doğrudan bağlı değildir; parametreleri olmayan mesajlar aracılığıyla iletişim kurarlar.

Bağlantı eksikliği - modüller birbirleriyle etkileşime girmez.

Alt sınıf birleştirme, bir ebeveyn sınıfı ile bir alt sınıf arasındaki, çocuğun ebeveynle ilişkili olduğu, ancak ebeveynin çocukla ilişkili olmadığı bir ilişkidir.

Zamana bağlılık - iki eylemin tek bir modülde gruplandırılmasının nedeni, koşullar nedeniyle aynı anda meydana gelmeleridir.

Bir modülün kararlılığı ile ilgili diğer bir ölçü Colofello ölçüsüdür, kararlılığı kontrol edilen modül dışındaki modüllerde yapılması gereken değişiklik sayısı olarak tanımlanabilir ve bu değişiklikler test edilen modülle ilgili olmalıdır. .

Bu sınıftaki bir sonraki metrik McClure Metric'tir. Bu metriğin hesaplanmasında üç aşama vardır:

1. Her bir kontrol değişkeni i için, karmaşıklık fonksiyonu C(i)'nin değeri şu formül kullanılarak hesaplanır: C(i) = (D(i) * J(i))/n.

Burada D(i), i değişkeninin kapsamını ölçen bir değerdir. J(i), modüllerin i değişkeni aracılığıyla etkileşiminin karmaşıklığının bir ölçüsüdür, n, bölümleme şemasındaki bireysel modüllerin sayısıdır.

2. Bölümleme küresine dahil olan tüm modüller için, karmaşıklık fonksiyonlarının M(P) değeri, M(P) = fp * X(P) + gp * Y(P) formülüyle belirlenir.
burada fp ve gp sırasıyla P modülünden hemen önceki ve hemen sonraki modüllerin sayısıdır, X(P), P modülüne erişmenin karmaşıklığıdır,

Y(P) - diğer modüllerin P modülünden kontrolü çağırmanın karmaşıklığı.

3. Bir programı modüllere bölmek için MP hiyerarşik şemasının genel karmaşıklığı aşağıdaki formülle verilir:

MP = SUM(M(P)) P - program modüllerinin tüm olası değerleri üzerinden.

Bu metrik, işlevsel özellikleri ve kontrol yapısını tanımlayan hiyerarşik modüllerden oluşan, iyi yapılandırılmış programlara odaklanır. Ayrıca her modülün bir giriş noktası ve bir çıkış noktası olduğu, modülün tam olarak bir işlevi yerine getirdiği ve modüllerin, birden fazla program modülündeki çağrı ilişkisini belirleyen hiyerarşik bir kontrol sistemine uygun olarak çağrıldığı varsayılmaktadır.

Bilgi kavramına dayalı bir ölçüm de vardır; Berlinger ölçüsü. Karmaşıklık ölçüsü M=SUMfi *log2 pi şeklinde hesaplanır; burada fi, i'inci sembolün ortaya çıkma sıklığı, pi ise oluşma olasılığıdır.

Bu ölçümün dezavantajı, çok sayıda benzersiz karakter içeren, ancak küçük miktarlardaki bir programın, az sayıda, ancak büyük miktarlarda benzersiz karakter içeren bir programla aynı karmaşıklığa sahip olmasıdır.

5. Nesneye yönelik ölçümler

Nesne yönelimli programlama dillerinin gelişmesiyle birlikte, nesne yönelimli metrikler olarak da adlandırılan yeni bir metrik sınıfı ortaya çıktı. Bu grupta en yaygın kullanılanlar Martin metrik seti ile Chidamber ve Kemerer metrik setidir. Öncelikle ilk alt gruba bakalım.

Martin metriklerini dikkate almaya başlamadan önce sınıf kategorisi kavramını tanıtmak gerekir. Gerçekte bir sınıf nadiren diğer sınıflardan ayrı olarak yeniden kullanılabilir. Hemen hemen her sınıfın işbirliği içinde çalıştığı ve kolayca ayrılamadığı bir sınıflar grubu vardır. Bu tür sınıfları yeniden kullanmak için sınıf grubunun tamamını yeniden kullanmanız gerekir. Böyle bir sınıf grubu güçlü bir şekilde birbirine bağlıdır ve sınıf kategorisi olarak adlandırılır. Bir sınıf kategorisinin varlığı için aşağıdaki koşullar mevcuttur:

Bir sınıf kategorisindeki sınıflar, hepsini birden değiştirmeye yönelik herhangi bir girişime karşı kilitlenir. Bu, eğer bir sınıf değişirse, o kategorideki tüm sınıfların muhtemelen değişeceği anlamına gelir. Eğer sınıflardan herhangi biri bir tür değişime açıksa, hepsi de o tür bir değişime açıktır.

Bir kategorideki sınıflar yalnızca birlikte yeniden kullanılır. Bunlar birbirine o kadar bağlıdır ki birbirlerinden ayrılamazlar. Bu nedenle, eğer bir kategorideki bir sınıfı yeniden kullanmak için herhangi bir girişimde bulunulursa, diğer tüm sınıfların da onunla birlikte yeniden kullanılması gerekir.

Bir kategorinin sorumluluğu, bağımsızlığı ve istikrarı, o kategoriyle etkileşime giren bağımlılıkların sayılmasıyla ölçülebilir. Üç metrik tanımlanabilir:

1. Ca: Merkezcil uyum. Bu kategorinin içindeki sınıflara bağlı olarak bu kategorinin dışındaki sınıfların sayısı.

2. Ce: Santrifüj kavrama. Bu kategori içindeki, bu kategorinin dışındaki sınıflara bağlı olan sınıfların sayısı.

3. I: Kararsızlık: I = Ce / (Ca+Ce). Bu metriğin bir dizi değeri vardır.

I = 0 en kararlı kategoriyi gösterir.

I = 1 en kararsız kategoriyi gösterir.

Bir kategorinin soyutluğunu ölçen bir metriği (kategori soyutsa yeterince esnektir ve kolayca genişletilebilir demektir) aşağıdaki gibi tanımlayabilirsiniz:

A: Soyutluk: A = nA / nAll.

nA - kategorideki soyut_sınıfların sayısı.

nTümü - kategorideki_sınıfların_toplam_sayısı.

Bu metriğin değerleri aralıkta değişmektedir.

Şimdi yukarıdaki Martin ölçümlerine dayanarak soyutlama ile istikrarsızlık arasındaki ilişkiyi gösteren bir grafik oluşturabilirsiniz. Üzerine I+A=1 formülüyle verilen düz bir çizgi çizersek, bu düz çizgi soyutluk ve istikrarsızlık arasında en iyi dengeye sahip kategorileri içerecektir. Bu çizgiye ana dizi denir.

Ana diziye uzaklık: D=|(A+I-1)/sqrt(2)|

Ana diziye normalleştirilmiş mesafe: Dn=|A+I-2|

Hemen hemen her kategori için ana diziye ne kadar yakın olursa o kadar iyi olduğu doğrudur.

Bir sonraki metrik alt grubu Chidamber ve Kemerer metrikleridir. Bu ölçümler sınıf yöntemlerinin, miras ağacının vb. analizine dayanmaktadır.

WMC (Sınıf başına ağırlıklı yöntemler), sınıfın tüm yöntemlerinin toplam karmaşıklığı: WMC=SUMci , i=1...n, burada ci, herhangi bir metrik (Halstead) tarafından hesaplanan i. yöntemin karmaşıklığıdır. vb., ilgilenilen kritere bağlı olarak), eğer tüm yöntemler aynı karmaşıklığa sahipse, bu durumda WMC=n olur.

DIT (Kalıtım Ağacının Derinliği) - miras ağacının derinliği (sınıf hiyerarşisi boyunca ata sınıftan belirli bir sınıfa giden en uzun yol), ne kadar büyükse o kadar iyidir, çünkü derinlik arttıkça veri soyutlaması artar, doygunluk yöntemlerin bulunduğu sınıf azalır, ancak yeterince büyük bir derinlikle, bir programı anlama ve yazmanın karmaşıklığı büyük ölçüde artar.

NOC (Çocuk sayısı) - nesillerin sayısı (hemen), ne kadar fazla olursa, veri soyutlaması da o kadar yüksek olur.

CBO (Nesne sınıfları arasında bağlantı) - sınıflar arasında bağlantı, orijinal sınıfın ilişkili olduğu sınıfların sayısını gösterir. Bu metrik için, modüllerin bağlantısına ilişkin daha önce tanıtılan tüm ifadeler geçerlidir, yani yüksek CBO ile veri soyutlaması azalır ve sınıfın yeniden kullanımı daha zor hale gelir.

RFC (Bir sınıf için yanıt) - RFC=|RS|, burada RS, bir sınıfın yanıt kümesidir; yani, sınıfın bir nesnesi tarafından alınan verilere yanıt olarak bir sınıf yöntemi tarafından potansiyel olarak çağrılabilen yöntemler kümesidir. sınıf. Yani, RS=(((M)((Ri )), i=1...n, burada M sınıfın tüm olası yöntemleridir, Ri ise i'inci sınıf tarafından çağrılabilen tüm olası yöntemlerdir. O zaman RFC belirli bir kümenin gücü olacaktır, ne kadar çok RFC olursa, test ve hata ayıklama o kadar zor olur.

LCOM (Yöntemlerde Uyum Eksikliği) - Yöntemlerde uyum eksikliği. Bu parametreyi belirlemek için, n yöntemi olan bir C sınıfını düşünün M1, M2, ... ,Mn, o zaman (I1), (I2), ..., (In) bu yöntemlerde kullanılan değişken kümeleridir. Şimdi P'yi tanımlıyoruz - ortak değişkenleri olmayan bir dizi yöntem çifti; Q, ortak değişkenlere sahip bir dizi yöntem çiftidir. O zaman LCOM=|P|-|Q|. Uyum eksikliği, sınıfın birkaç başka sınıfa veya alt sınıfa bölünebileceğinin bir işareti olabilir; bu nedenle, veri kapsüllemesini artırmak ve sınıfların ve yöntemlerin karmaşıklığını azaltmak için uyumu artırmak daha iyidir.

6. Güvenilirlik ölçümleri

Bir sonraki metrik türü nicelliğe yakın olan ancak programdaki hata ve kusur sayısına dayalı metriklerdir. Bu metriklerin her birinin özelliklerini dikkate almanın bir anlamı yok, bunları basitçe listelemek yeterli olacaktır: son kontrolden bu yana yapılan yapısal değişikliklerin sayısı, kod incelemesi sırasında tespit edilen hataların sayısı, program sırasında tespit edilen hataların sayısı Testlerin ve programın doğru çalışması için gereken yapısal değişikliklerin sayısı. Büyük projeler için bu göstergeler genellikle binlerce kod satırıyla ilişkili olarak değerlendirilir; Bin kod satırı başına ortalama kusur sayısı.

7. Hibrit ölçümler

Son olarak hibrit metrikler olarak adlandırılan başka bir metrik sınıfından da bahsetmek gerekir. Bu sınıfın metrikleri daha basit metrikleri temel alır ve bunların ağırlıklı toplamını temsil eder. Bu sınıfın ilk temsilcisi Kokol metriğidir. Aşağıdaki şekilde tanımlanır:

H_M = (M + R1 * M(M1) + ... + Rn * M(Mn)/(1 + R1 + ... + Rn)

Burada M temel metriktir, Mi diğer ilginç ölçümlerdir, Ri doğru seçilmiş katsayılardır, M(Mi) fonksiyonlardır.

M(Mi) fonksiyonları ve Ri katsayıları, regresyon analizi veya programa özel problem analizi kullanılarak hesaplanır.

Zolnovsky, Simmons, Thayer metriği de çeşitli göstergelerin ağırlıklı toplamıdır. Bu metrik için iki seçenek vardır:

(yapı, etkileşim, hacim, veri) SUM(a, b, c, d).

(arayüz karmaşıklığı, hesaplama karmaşıklığı, G/Ç karmaşıklığı, okunabilirlik) SUM(x, y, z, p).

Her seçenekte kullanılan metrikler, belirli göreve bağlı olarak, katsayılar ise bu durumda karar vermeye yönelik metriğin değerine bağlı olarak seçilir.

Çözüm

Özetlemek gerekirse tek bir evrensel ölçütün olmadığını belirtmek isterim. Programın izlenen herhangi bir metrik özelliği, ya birbirine bağlı olarak ya da belirli göreve bağlı olarak izlenmelidir; ayrıca hibrit ölçümler kullanılabilir, ancak bunlar aynı zamanda daha basit metriklere de bağlıdır ve aynı zamanda evrensel olamaz. Açıkça söylemek gerekirse, herhangi bir metrik yalnızca dile ve programlama stiline büyük ölçüde bağlı olan bir göstergedir, dolayısıyla hiçbir ölçü mutlak değere yükseltilemez ve yalnızca buna dayalı olarak hiçbir karar alınamaz.

Kaynakça

  • CProVer blog girişi: "Metrik hesaplama alanındaki pratik araştırmamız."
  • Metrik kavramı. Metrikleri kullanma talimatları.
    Metrik ölçekler. Zorluk ölçümleri. Stilistik ölçümler. http://www.met-rix.narod.ru/
  • T.J. McCabe, "Bir karmaşıklık ölçüsü", Yazılım Mühendisliğinde IEEE İşlemleri, cilt. SE-2, hayır. 4, s. 308-320, Aralık, 1976.
  • Bogdanov D.V., "Yaşam döngüsü standardizasyonu yazılım", St. Petersburg - 2000, 210 s.
  • G.N. Kalyanov. Kurumsal otomasyon danışmanlığı: Bilimsel ve pratik yayın. Dizi "21. yüzyılın eşiğinde Rusya'nın bilgilendirilmesi." - M.: SINTEG, 1997. - 320 s.
  • Chernonozhkin S.K., "Metrik geliştirme desteği için yöntemler ve araçlar kaliteli programlar", özet, Novosibirsk - 1998
  • Curtis R. Cook, "Assembly Dili için Bilgi Teorisi Metriği"
  • Shyam R. Chidamber, Chris F. Kemerer, "Nesneye Yönelik Tasarım için Bir Metrik Paketi", 1994