Salı, Temmuz 01, 2014

Bir Takım Geçişken Şeyler


İnsanın hayatında pis rezil olduğu durumlar vardır. Gavur bunu WTF moment olarak havalı bir biçimde söylese de yurdum insanı "astir bea" olarak daha net anlaşılır hale getirmiştir bu olguyu.

Neyse efendim, bendeniz de dün itibariyle benzer bir anı yaşadım ve bu girdiyi yazmak şart oldu kendime ceza kabilinden. Burada resim puslanır sahne siyah beyaza döner ve olaylar şöyle gelişir;

Doktora aday adayımız giriş mülakatına girmek üzere 12 saatlik bir yolculuğun ardından ülkemizin tanınmış üniversitelerinden birine ulaşır. Mülakat saatine kadar araştırma konusu ile ilgili jüri hocalarının yazdığı makaleleri ve kitap bölümlerini okuyarak kendince özgüven depolamaktadır, gelişecek olaylara pek bir hazır olduğunu sanmaktadır.

Derken, mülakat saati gelir lakin, her toplumsal sıralama olayında olduğu gibi olay olması gereken vakitte cereyan etmemekte ısrarlıdır. Mülakat salonu önünde beklemekten sıkıldığı bir anda telefonla konuşmaktadır ki, adı okunur ve kahramanımız telefonunu aceleyle kapatıp olay mahalline intikal eder.

Salona girdiğinde karşısında 6 kişilik bir jüri vardır (WTF moment 1). 6 ya 1 eşitsizliği ilk başta kahramanımızın gözünü korkutsa da, çocukluğu "Kara Murat" serisini izleyerek geçmiş esas oğlanı yıldırmaz bu durum.

Yüksek lisans çalışmalarını kısaca özetlemesinin ardından bir South Park sessizliği oluşmuşken, yüksek lisans jürisinde bulunan bir hoca malum soruyu sorar;

"Sana yüksek lisans jürisinde bir soru sormuştum, hatırladın mı ?"

(Hatırladım lakin hatırlamak istemiyorum, çünkü bildiğin cevaplayamayıp mal gibi kalmıştım)

"Hatırladım hocam" der kahramanımız. Hoca işin peşini bırakmamaktadır;

"Baktın mı sınavdan sonra çözümüne sorunun ?"

"Baktım hocam" der esas oğlan.

(Baktın ama yetmez) der hoca içinden ve bu ses dışarı şöyle yansır;

"Anlat bakalım o zaman, difüzyon denklemlerinde neden ikinci derece türev kullanılır !!! "

"Bakın şimdi hocam, basitçe anlatmak gerekirse geçişen (diffuse) eden maddemizin ilgilendiğimiz bölümünü bir araba gibi düşünelim. Biliyoruz ki bir arabanın hareketini hesaplarken birinci derece türev bize hızı , ikinci derece türev ise hızdaki değişimi (hızlanma/acceleration) verir. Bizim derdimiz t anında x konumunda olduğunu bildiğimiz arabanın t+1 anında nerede olduğunu bulabilmekse eğer, hız ki, biz buna halk arasında birinci dereceden türev deriz bizim için tek başına birşey ifade etmez çünkü; arabamız t anından t+1 anı arasında hızlanmış veya yavaşlamış olabilir, arabanın hızının bu zaman aralığında nasıl değiştiğini bulmak için Anadolu'da ikinci dereceden türev olarak adlandırılan matematiksel işleme ihtiyaç duyarız."

Bu konu aşağıdaki videoda detaylı olarak açıklanmıştır ve dahi tam ekran olarak izlemeniz tavsiye edilir;




"Aslında bu konuyu matematiksel olarak Fick kanunları (ki onlar iki tanedir) ile açıklayabiliriz. Moleküllerin bir bölgeden diğer bölgeye geçişine akı der ve bunu J ile gösterirsek akıyı zamandan bağımsız olarak

  

şeklinde ifade edebiliriz. Burada D ilgilendiğimiz molekülün difüzyon katsayısı C derişim ve x molekülün katettiği mesafeyi gösterir. Bu kanun zamandan bağımsız olarak, derişimi farklı, iki bölge arasındaki geçişi ifade eder ve bu geçiş çok yoğun bölgeden az yoğun bölgeye doğru derişimler eşitlenene kadar devam eder."

"Fick birinci kanununda zaman mefhumunu ihmal edip benim bu soruya sonsuza kadar cevap verebilme şansım varmış gibi davranırken, gerçek durum böyle değildir. Aslında bu soruyu hiç cevaplamayıp doktora yeterlilikte bu soruyu sormanızı garanti altına almak ve daha sınava girmeden bir soru fazla cevaplayarak zamanı bükmek istesem de bunun evrende yol açacağı kaostan korktuğumdan bu ihtimali hızla eliyor ve konuya kaldığım yerden devam ediyorum"

"Neyse, yaptığı eşşekliğin farkına varan Fick "Achtung" der yani "Ben ne yaptım". Bunun üzerine ikinci kanununu yazar,

  

bu noktada akının kendisi hesaplanmaya muhtaç bir dede kaldı ki gayrıya himmet ede diye düşünen Fick bruder J yi birinci denklemden getirip yerine koyarak

  

denklemini elde eder. Bu da neden 2. dereceden türev sorusunun daha kitabi bir açıklamasını sunar bize"


Diyemedim ya la...


Pazartesi, Eylül 17, 2012

Yeni Eğitim Öğretim Yılı Kutlu Olsun

Her maaş zammında her hak ihlalinde seslerini seslerini yükseltiyor öğretmenler. İşte o zaman aklımdan geçiyor, "Öğretmenler haftada 15 saat çalışıyor sonra yatıyor" diyen bu günün muktedir nesillerini kimler yetiştirdi diye ?

Sadece 1-2 kişi olsa bunu söyleyen 5-10 tane yaptığı işin hakkını vermeyen öğretmeni suçlayabilirsiniz ama bunu söyleyen muktedirlerin çevresinde onlat gibi düşünen başka muktedirler var, onların etrafında onlardan nemalanmak için onlar gibi görünmekteyen çekinmeyen başka yarı muktedirler mevcut. Çemberin bir dış halkasında ise bunlar bizden diyerek kendi çıkarlarına aykırı işler yapsalarda bunu görmek istemeyen oy kaynakları bulunuyor.

E hocam bunları topla çarp böl memleketin %50'si ediyor. Ha kalan %50 nin ne kadarı kendi tercihleri iktidarda olsa daha farklı davranır o da ayrı bir konu.

Bu kadar insanın düşünmeyi, dürüstlüğü, sevgiyi, hoşgörüyü, doğruyu savunurken - haksızlığa uğradığında dik durmayı, kimsenin hakkını yemeden hakkını savunmayı öğrenmeden yetişmesinde hiç mi payı yok işlerini müfredat defterinden öte görmeyen öğretmenlerin ?

Size başka bir öğretmenin hikayesini anlatmak isterdim ama uzun uzun anlatsam biliyorum ki o utanır övüldüğü için. Çünkü istese çok daha yüksek ücretlerle çalışabileceği kimya mühendisliğini bırakıp kimya öğretmenliğini seçtiğinde ve yıllarca sabırla öğrenci yetiştirdiğinde aklında alacağı övgüler yoktu.

Ne kadar anlamsız gelmişti lise yıllarımızda parayı değil öğretmenliği seçmesi. Ama zaten bütün seçimleriyle şaşırttı bizi. Sınıfta arkadaşına tokat atan öğrenciyi tokatla terbiye etmeyi seçebilecek iken bütün beyefendiliği ile "Egonuzu tatmin ettiyseniz yerinize oturur musunuz ?" diyerek utanmayı öğretirken de, Pınar Su etiketinin arkasındaki içeriği sınavda verip "hadi bakalım ph değerini bulun" derken de, "Zeytin yağından yapılan sabun nasıl oluyorda yağı çözüyor" diye sorarken de, Sınavda kopya çekenlerin çektiği kopyaların yüzüne söyleyip tam not verirken de hep farklıydı ve sadece düşünmeyi değil, hayata karşı insanca durmayı da öğretmeye çalışıyormuş Ethem Hocam.

Belki bu günden sonra öğretmenler sınıfın kapısını her açışlarında sadece kendi geleceklerini değil, kendi çocuklarının ve ülkede yaşayacak diğer bütün insanların geleceğini de şekillendiriyor olduklarını fark ederler bir ihtimal. Çokça ortada gezinen klişe yazıları sevmem ama Haim Ginott'tan bir alıntı ile bitsin bu yazı da;

 Bir toplama kampından sağ kurtulmuş bir insanım. Gözlerim, hiçbir insanın görmemesi gereken şeyleri gördü.
Bilgili mühendisler tarafından yapılan gaz odaları. İyi eğitim görmüş doktorlar tarafından zehirlenen çocuklar. Eğitilmiş hemşireler tarafından öldürülen bebekler. Lise ve yüksekokul mezunları tarafından vurularak öldürülen kadınlar ve bebekler.
Bu nedenle, öğrenim olgusuna kuşkuyla bakıyorum. Sizden tek dileğim şudur: Öğrencilerinize insan olmayı öğretin. Çabalarınız bilgili canavarlar, yetenekli ruh hastaları ya da eğitilmiş Eichmann'lar yaratmamalı. Okuma-yazma, yazım, tarih ve matematik, ancak öğrencilerimizin insan olmasını sağlarsa önem kazanırlar.

Cumartesi, Mart 31, 2012

Türkiyede Patentler Üzerine

Türkiye'de bir süredir ülkede alınan patent sayısını arttırmak yönünde çalışmalar yürütülüyor. Özetle "Yaw yayın sayımız tavana vurdu, ama para kazanamıyoruz biz bu işten, bi eksiğimiz patent kaldı, onuda halledersek tamamdır" şeklindeki önermeden yola çıkan bu çalışmalar kapsamında Cuma günü izlediğim bir sunum " Bayh-Dole" yasasının bir benzerinin ülkemizde çıkartılacağı yönündeki hazırlıklardan bahsediyordu.

Temel yaklaşımdaki eksikler atıf sayılarından başlar, ulusal intihal alışkanlığımız ve doçentlik atama kriterlerine kadar uzun bir tartışma konusu olur.

Ancak bahsedilen yasa tasarısı özetle üniversitelerde yapılan tüm çalışmaların patent hakkının öncelikli olarak lüniversiteye ait olmasını buluşu yapan araştırmacının ise bundan pay almasını öngörüyor. Bu durum getirdiği artılar (daha çok patent, patent haklarının kurumsal ölçekte takibi ve satışı vb.) ve eksiler (araştırmacıların demotivasyonu, araştırmacıların kurduğu/ortak olduğu garaj şirketlerinin azalması vb.) daha bir süre tartışılır ancak konu ile ilgili önemli bir saptama var.

Türk Amerikan Bilim İnsanları ve Akademisyenleri Derneği (TASSA: www.tassausa.org) Başkanı Prof. Dr. Banu ONARAL diyor ki:

“Bildiğiniz gibi bilginin ve bilimin ekonomik değere dönüşmesi çok kapsamlı ve doğal olarak çok yönlü gelişmiş bir ‘ekosistem’ gerektiriyor. Fikri haklar ve yatırım sermayesi bu düzenin önemli öğeleri.
ABD’de Bayh-Dole Act geçtiğinden beri (1980′ler) kamu desteğiyle yapılan ArGe’den doğan buluşlara üniversitelerin sahip çıkması gerekiyor. Bu görev onların yükümlülüğü. Tüm kamu desteği alan üniversiteler gibi bizim okulumuz da ayni kurala tabi. Yani buluşçularımız üniversitede kurulmuş ‘teknoloji transfer’ ofisinin kanalıyla buluşlarını yola çıkarmak zorundalar.

Bilginin ticari ürüne dönüşmesi yolunda atılan bu adımın yararları kadar zararları da var. Girişimci ve stratejik üniversitelerde açılan bu tür merkezler (Stanford, MIT…) veya mezunların önderliğinde kurulan vakıflar (Wisconsin Univ’de WARF) başarılara imza atarken, bürokratik (yani riskten korkan) ve daha kötüsü hiyerarşik (emir-kumanda) yapılı devlet veya özel üniversiteler adeta buluş mezarlıkları haline geliyorlar. Ayrıca, girişimcilik ruhuyla ve işbilgisi ve deneyimi ile yaklaşılmayan fikri haklar portfolyosunun bakımı ve pazarlanması müthiş masraflı bir  hale geliyor. Üniversitelere yük oluyor… Ve kısır döngünün çarkları dönmeye başlıyor.
Kanımca, Türkiye’de fikri hakların korunması ve işlenmesi ‘İnovent’ veya ‘Embrio’ türü girişimci ve kar gayesi güden ve akademik buluşlara odaklanmış firmalar, yerel, yöresel veya ulusal kar gayesi gütmeyen vakıflar ve meslek, işinsanlari veya sektör kuruluşlarının oluşturduğu çok sesli ve çeşitliliği olan bir ‘ekosistem’ kavramıyla süratle yola koyulmalı.”

Daha fazla okuma için bu bağlantıyı takip edebilirsiniz.

Cumartesi, Temmuz 16, 2011

Veri madenciliği için Veri Ambarları İnşaası

Birkaç gündür veri ambarı inşaası ile ilgili çok sayıda doküman okudum. En büyük sıkıntım bu dökümanların daha çok BI sistemlerine odaklanmış olması karar destek sistemleri ve veri madenciliği konularında "bunlar da var" şeklinde özetlenebilecek yaklaşımlarıydı.

Ancak aşağıdaki sunum veri ambarlarının inşaa sürecine ilişkin kavramları düzgün bir şekilde özetlemiş. Öncesinde işin temellerine dair 1-2 döküman okuduysanız konuyu netleştirmek için ideal;

http://www.slideshare.net/idnats/data-warehousing-and-data-mining-presentation-725476



Pazartesi, Ağustos 16, 2010

Pazar, Temmuz 11, 2010

Özgür Kuşlar Üzerine...

Aslında Gürer'in blog girdisine yorum olarak yazmaya başlamıştım ama laf çok uzayınca bir ayrı bir girdi olarak yazmaya karar verdim.

Sesli düşünmeye çalışacağım. Öncelikle Pardus, Debian ve benzeri dağıtımlardan farklı olarak belirli bir sponsor tarafından finanse edilen, belirli bir büyüklüğe ulaşmış (kanımca kritik eşiği aşmış) ve finanse edilmeye devam edecek bir proje. Bu bağlamda gönüllü geliştiricilerin ayrılması iş gücü olarak ciddi bir kayıp yaratmaz bence.

Hatta bugün bütün gönüllü geliştiriciler ayrılsa dahi projede çok önemsenecek bir değişim yaşanmaz. Projenin kullanıcıları zaten bu tip tartışmaların dışındalar çoğunlukla. Özellikle kurumsal kullanıcılar genel olarak tamamen habersizler camia ve topluluk süreçlerinden.

Eğer ayrılanlar gönüllü geliştiricilerin içerisinde kaliteli bir topluluksa bir süre boyunca gönüllü geliştiricilerin genel kalitesi düşer ancak kritik eşik aşıldığı için durum bir süre sonra normale döner.

Kaybedilecek olan büyüme ölçeklenebilirlik vs. değildir bana göre. İşe bu kavramlardan girilirse, proje yönetimi bunun aksini rakamlarla kısa süre içinde ispat edecektir muhtemelen.

Ama kaybedilen daha değerli bir şeymiş gibi geliyor bana. Maddi olmayan, öyle grafikle tabloyla falan gösterilemeyecek birşeyler. Projeye katkı verirken yaptığı işten zevk alan, bunu yaparken temel motivasyonu özgürlük olan geliştiricilerin kaybedilmesi demek, projenin her durumda ona doğruları çekinmeden söyleyen ve onun özgürlüğünü karşılığında hiçbirşey beklemeden savunan dostlarını kaybetmesi demektir bence.

Hele ayrılanların ardından "Biz süreçlerimizi başkalarına göre mi belirleyeceğiz" ve "Giden gider kalan sağlar bizimdir" türünden yaklaşımlar kalan geliştiricilerle bağları zayıflatmaktan başka bir sonuç doğurmaz. Bu durum değişmediği takdirde bunun sonuçları bugünden yarına da çıkmayacaktır ortaya .

Yalnız kamu ( Başbakanlık, UEKAE, DPT ne dediğiniz fark etmez ) tarafından fonlanan bir proje olduğunu da unutmamak gerekir Pardus'un. Malum devlet de genel olarak sahip olduğu otoriteyi bulabildiği her boşlukta arttırmaya çalışan bir yapıya sahip ülkemizde.

Bu gün özgürlüğü savunan gönüllüler bu projeden kopmaya devam ederse ve projenin büyüklüğüne güvenilip bu durumu değiştirmek için gerekenler yapılmazsa, yarın bu günkü yönetim kadar özgürlük kaygısı olmayan başka birileri bu projenin büyüklüğüne güvenerek ayrılacak 3-5 kişiyi önemsemeyip onu kendi tekellerine aldığında, Pardus'un yalnızca adı ve kodları kalır geriye ve sizin özgürlüğünüzü savunacak kimse kalmamış olabilir ortalıkta. Üstelik bu vaka ilk de olmaz, son da olmaz yalnız ve güzel ülkemde.

Cumartesi, Mayıs 29, 2010

Kod Kalite Ölçümleri ve Sık Kullanılan Metrikler

Bütün programcılar yazdıkları kodun iyi olmasını ister ancak iyinin neye karşılık geldiğini bulmak zordur genelde. Bu noktada günlük hayattan aldığımız birtakım dersler vardır aklımızda kalan.

Örneğin yazdığımız kodda mümkün olduğunca az hata çıksın isteriz, eğer hata çıkarsa da en kısa zamanda bizim veya başka bir programcının hatayı çözebilmesini isteriz, ürünümüzde bir değişiklik yapacaksak bunu ürünümüzün diğer bileşenlerini mümkün olduğunca az etkilemesiniz isteriz.

Bütün bunlar kurumsal dilde, yazdığımız kodun hatasız, esnek, kararlı, anlaşılır, düşük bakım maliyetine sahip olması demektir. Ancak normal şartlarda bunları ancak yazdığımız kod ürün haline gelip piyasaya çıktığında görebiliyoruz.

İşte tam bu noktada yazılım metrikleri devreye giriyor. Geliştirme esnasında sürekli ölçüm ve iteratif düzeltmeler ile yazılım metriklerini geliştirme sürecinin bir parçası haline getirdiğimizde tasarım ve geliştirme sırasında bize ileride daha büyük maliyetler getirecek pek çok hatadan kurtuluyoruz.

Yazılım mühendisliği ve yazılım kalitesinin ölçümü başlığı altında pek çok kod ölçüm metodu bulunuyor. Bunların hepsini uygulamak pratik olarak çok olası değil, öyleyse bizde piyasada en çok kullanılan metrikleri dikkate alarak bir orta yol bulabiliriz.

Koda dayalı ölçümler


1- Code Coverage
     Yazılan testlerin kodun ne kadarını kapsadığını ölçer. Code coverage için %80 gibi bir oran oldukça iyi görünse de aslında az sayıda basit test yazarak dahi bu orana ulaşılabildiği gözlemlendiği için hedeflenen oranın %100 olması önerilir. (Oran hakkında detaylı bilgi için [1] )

2- Cohesion
    Bu ölçüm sınıfın sorumlu olduğu işlerin kendi içindeki uyumluluğunu ölçer. Her sınıfın tek bir sorumluluğu olmalıdır. [3] [4]. Uyumluluk LCOM (Lack of Cohesion in Methods) adı verilen ölçüt ile bulunur. Değişik türleri bulunan LCOM sınıfta yer alan alanlara metodların ortak erişim sayısını temel alan bir ölçümdür. LCOM3 için bu değer 0 ile 2 arasında değişir ve 1'in üzerindeyse sınıf bölünmelidir. [5]

3- Coupling
    Bir nesnenin diğeri ile etkileşime girmesine denir. Program içerinde mutlaka etkileşim olacaktır, ancak bu ilişkinin nesnelerin implementasyon detaylarından mümkün olduğunca bağımsız olması istenir. Farklı ilişki türleri üzerinden ölçülebilir. En çok kullanılanlardan birisi CBO'dur.
Coupling Between Objects (CBO): Miras alınan sınıflar hariç, sınıfın çalışmak için ihtiyaç duyduğu sınıf sayısıdır. (kısaca importları say :)) Kütüphanelerde bu sayı yüksek olabilir ancak çalıştırılabilir sınıflarda 6 ile 10 arası makul kabul edilebir. [6][9]

4- Cyclomatic Complexity
    Bir metodun içerisinde yer alan karar noktalarının (if, else vb.) sayısıdır. Kabul edilen eşik değer 10'dur.[6] [7] Bunun yanı sıra Essential Complexty denilen bir metrik daha mevcuttur ancak Cyclomatic Complexity'nin daha etkili bir metrik olduğu belirtilmektedir.  [8]

5-  Cyclomatic Density
     Koddaki karar noktalarının toplam çalıştırılabilir koda oranıdır. 0.14 ile 0.42 arasındaki değerler için kodun basit ve anlaşılabilir olduğu kabul edilir.[6]

6- Response For Class (RFC)
    Bir sınıfta yazılan ve çağırılan toplam metotların sayısıdır. Bu değer yükseldikçe kodun bakımı zorlaşır. Önerilen eşik değer 55 dir. [9]

7- Weighted Methods for Class (WMC)
    Bir sınıfta yazılan toplam metot sayısıdır. Eşik değeri olarak 6 ile 33 arasında değişik rakamlar önerilmektedir. Ancak Cohesion değeri WMC'ye kıyasla daha önemlidir. [6] [9]

8-  Class Hierarchy Level veya Depth of Inheritance Tree (DIT)
     Miras ilişkisinde sınıfın üzerinde kaç tane atası olduğunu gösterir. 6'nın üzerinde ise test edilebilirliği çok düşük olduğunu, 2 nin altında ise OO ilkerinin fazla kullanılmadığına işaret eder. Uygulamanın genelinde 2 ve 3 düzeyinde olması hedeflenmelidir. [6]

9-  Number of Methods in Class (NOM)
     İdeal değerler 6 ile 20 arasında değişse de 40'ın üzerinde sınıf kesinlikle bölünmelidir. [6] Ancak tek başına bir gösterge olmaktan çok LCOM ile birlikte değerlendirilmelidir.

10- Specialization Index (SIX)
      Kod karmaşıklığını ve bakım maliyetlerini arttırmasından dolayı overload edilmiş fonksiyon sayısının mümkün olduğunca az olması istenir. Bundan dolayı SIX = (Overload Edilmiş Metot Sayısı * DIT) / NOM şeklinde hesaplanır. 1.2 (veya %120)'ye kadar normal kabul edilir.

* Bunların dışındaki ölçülerden metot başına düşen satır sayısının 7-9 arasında olması tavsiye edilse de Cyclomatic Complexty'nin bundan daha önemli olduğu belirtilmektedir. ([2])

Dizayna dayalı ölçümler [11]

1- Afferent Couplings (Ca)
İncelenen paketin dışında yer aldığı halde söz konusu pakete bağımlı paketlerin sayısıdır. Paketin değişmesi halinde etkilenecek paket sayısını gösterir. Bunu paketin sorumluluğun ölçüsü olarak da düşünebiliriz.

2- Efferent Couplings (Ce)
İncelenen paketin kendi dışında kaç tane pakete bağımlı olduğunu gösterir. Paketin yeniden kullanılabilirliğinin ölçüsüdür.

3- Abstractness (A)
İncelenen pakette yer alan soyut sınıfların ve arayüzlerin sayısının paketteki toplam sınıf sayısına oranıdır. 0 ile 1 arasında değişen bu oran 1'e yaklaştıkça paketin esnekliği artar.

4- Instability (I)
I = Ce / (Ce + Ca) şeklinde hesaplanır. 0 ile 1 arasında değişen bu oran 1'e yaklaştıkça paketin kararlılığı azalır. (Yani paketin değişimi sistemdeki başka pek çok paket üzerinde değişiklik yapmayı gerektirir.)

Devam etmeden küçük bir not girelim araya. Karalılık genelde iyi yönde yorumlansa da bir paketin tamamen kararlı olması demek paketin değiştirilebilirliğinin de minimum düzeyde olması anlamına gelir. Bu durumda hangi paketlerin esnek hangi paketlerin daha az esnek ama kararlı yapıda olmasını istediğimizi sorgulamalıyız. Bu konuda cevabı bize "Open/Closed Principle" veriyor. Buna göre yazılımı oluşturan birimler geliştirilmeye açık ancak değiştirilmeye kapalı olmalıdır. Bu noktada hangi tür sınıflar geliştirilmeye açık diye bakarsak soyut sınıfları ve arayüzleri görürüz.

Sonuca bakarsak; Abstractness = 1 ve Instability = 0 olduğu durumda hem kararlı hem de değiştirilebilir paketleri buluruz. Aynı biçimde Abstractness = 0 ve Instability = 1 olduğu durumda ise kararsız ancak değişime kapalı (ve böylece başka paketlerin değişimini gerektirmeyecek) durumdaki paketleri buluruz.

Ancak incelediğimiz paketler her zaman bu iki ideal durumdan birinde olmazlar. Bu durumda bu iki değerin dengede olması yani ;(A,I) = (1,0) dan (0,1) e gittikçe aynı miktarda değişmesi tasarımımız için optimal çözüm olarak görülebilir. Bunu grafiksel olarak ifade edersek;


Main Sequence denilen bu çizgi üzerinde yer alan bütün noktaları ideal noktalar kabul ettiğimize göre bunların dışında elde ettiğimiz değerleri bu çizgiye olan uzaklıklarına göre değerlendirebiliriz. Tasarım veya yeniden yapılandırma sırasındaki amacımız paketlerimizin bu çizgi üzerinde ve çizgiye en yakın durumda olmasıdır.

5- Distance from the Main Sequence (D)
D = |A+I-1| ile hesaplanır ve 0 ile 1 arasında değişir. 0 olması analiz edilen pakete ait değerin Main Sequence çizgisinin üzerinde olması demektir.

Bunların yanı sıra kod tekrar sayısı ile dizayn ve kod izlenebilirliği de dikkate alınması gereken unsurlardır. Kod tekrarı için bütün proje içerisinde kod tekrarı yapılan bölümler tesbit edilerek uygun biçimde (ortak sınıflar, soyut sınıflar, arayüzler) yeniden tasarlanmalıdır. Dizayn ve Kod izlenebilirliği ise (Tasarım belgelerinde yer alan birimlerin, uygulamadaki birimlere (sınıf,modül vb.) oranı) de yazılımın kalitesini belirleyenbir unsur olarak görülebilir.

[1] http://codebetter.com/blogs/patricksmacchia/archive/2009/06/07/high-test-coverage-ratio-is-a-good-thing-anyway.aspx

[2] http://stackoverflow.com/questions/312642/how-many-classes-per-package-methods-per-class-lines-per-method

[3] http://www.cihataltuntas.com/?p=111

[4] http://en.wikipedia.org/wiki/Single_responsibility_principle

[5] http://javaboutique.internet.com/tutorials/coupcoh/

[6] http://www.mccabe.com/pdf/McCabeCodeQualityMetrics-OutsourcedDev.pdf

[7] http://javaboutique.internet.com/tutorials/metrics/

[8] http://www.nasa.gov/centers/ivv/ppt/172536main_Mike_Chapman_The_Relationship_of_Cyclomatic_Complexity_Essential_Complexity_and_Error_Rates.ppt

[9] http://www.issre2009.org/archive/2006_supplemental/student_papers/An_Investigation_of_CK_Metrics_Thresholds.pdf

[10] http://support.objecteering.com/objecteering6.1/help/us/metrics/metrics_in_detail/specialization_index.htm

[11] http://www.objectmentor.com/resources/articles/oodmetrc.pdf