İşlevsel Büyüklük Ölçümü: COSMIC Function Points ile Yazılım Büyüklüğü Kestirimi

Yazılım Büyüklük Ölçümünde İşlevselliği Kullanmak

Yazılımda işlevsel büyüklük (functional size) yazılımları kullanıcının bakış açısından ölçmek için kullanılan bir metriktir. İşlevsel boyut teknik uygulamalardan veya geliştirmelerden bağımsız olmalıdır. İşlev puanı (function point) yazılımın kullanıcıya sağlaması gereken fonksiyonları ölçmek için kullanılan yazılım ölçüsüdür. İşlevsel puanın en önemli avantajı geliştiricinin deneyiminden, programlama dilinden, kullanılan teknolojiden bağımsız olmasıdır.

Yazılımda Kestirim ve Yazılım Büyüklük Ölçümü yazısında yazılım ölçümü ve kestiriminin ne olduğunu, neden yapıldığını, LOC ile yazılım büyüklük ölçümünü ve kısaca işlev puanı ile yazılım ölçümünü görmüştük. Bu yazıda COSMIC İşlevsel Boyut Ölçümü (Functional Size Measurement, FSM) yönteminin detaylarını ve bu yöntem özelinde işlevsel özellik kullanılarak ölçüm nasıl yapılır bunu göreceğiz.

İşlevsel Büyüklük Ölçümü Nedir?

İşlevsel büyüklük ölçümü (functional size measurement, FSM) yazılımın fonksiyonel yani işlevsel gereksinimlerini ölçme yöntemleri demektir. Çoğu FSM yöntemi işlevsel gereksinimin ne olduğu detaylı olarak bilinmese bile yaklaşık büyüklük tahmininin yapılabilmesi gibi bir avantaja sahiptir.

FSM yöntemlerinin diğer büyük avantajı teknolojiden bağımsız olmasıdır. Yazılım büyüklük tahmini yapılırken yazılımın hangi teknolojiyle geliştirildiğine bakılmaz.

Ek olarak bazı FSM yöntemleri için ölçü birimleri uluslararası standardize edilmiştir. Dolayısıyla metre gibi nasıl bir standart uzunluk ölçüsü varsa FSM’nin ölçü birimlerini de yazılım endüstrisinde standart bir ölçü birimi olarak görebiliriz.

İşlevsel büyüklük ölçümü için ISO/IEC 14143-1 uluslararası ISO standardı tanımlanmıştır. Bu standart işlevsel büyüklük ölçümü kavramlarını tanımlar. İşlevsel boyutlandırmadan faydalanılarak daha önceki yazılım ölçümlerinde yaşanan kısıtların üstesinden gelinebilmesi için ortaya çıkarılmıştır.

İşlevsel Büyüklük Ölçüm Yöntemleri

Yazılımın boyutunu ölçmenin birçok yöntemi vardır. Yazılımda Kestirim ve Yazılım Büyüklük Ölçümü yazısında da gördüğümüz gibi bu yöntemler yazılımın fiziksel nesneleri üzerinden hesaplama ve işlevselliğini hesaplama olarak temelde ikiye ayrılır. Yazılımın fiziksel özelliği olan LOC ile büyüklük ölçümünü Yazılımda Kestirim ve Yazılım Büyüklük Ölçümü yazısında incelemiştik. Bu yazıda ise işlevsellik kullanılarak yapılan öne çıkan tüm yazılım büyüklük ölçüm yöntemlerini göreceğiz.

İşlev Puanı (Function Point) ve Özellik Puanı (Feature Point) haricinde öne çıkan diğer işlevsel büyüklük ölçüm yöntemleri şu şekildedir:

  • UML’de, Kullanım Durum Puanı (Use Case Point)
  • Çevik (agile) yöntemlerde, Kullanıcı Hikâye Puanı (User Story Point)
  • Nesne yönelimli yöntemlerde, Nesne Puanı (Object Points)

Bu yöntemlerin hiçbiri net ve iyi bir şekilde tanımlanmamıştır, uluslararası olarak standardize edilmemiştir. Örneğin kullanıcı hikâye puanları oldukça özneldir. Bunların neredeyse tamamı belirli geliştirme yöntemleriyle veya geliştirmenin belirli bir aşamasında boyutun ölçülmesiyle ilgilidir.

İşlevsel Olan ve İşlevsel Olmayan Gereksinimler

İşlevsel yani fonksiyonel büyüklük ölçümünün kaynağı işlevsel gereksinimlerdir. Dolayısıyla öncelikle işlevsel olan ve işlevsel olmayan gereksinimleri tam olarak ayırmamız gerekir. Ayrıca bu yöntemlerde işlevsel gereksinimlerin net bir şekilde ortaya çıkarılması önemlidir.

Yazılım gereksinimlerine daha yakından bakıldığında, “işlevsel kullanıcı gereksinimleri” (functional user requirements, FUR) ve “işlevsel olmayan gereksinimler” (non-functional requirements, NFR) olmak üzere iki tür yazılım gereksinimi olduğunu görmekteyiz. Çok basit terimlerle:

  • İşlevsel kullanıcı gereksinimi, yazılımın kullanıcıları için görevler ve hizmetler açısından ne yapması gerektiğini belirtir (ISO 14143-1).
  • İşlevsel olmayan gereksinim ise çoğunlukla tüm donanım ve yazılım için geçerli olan kısıtlamalardır.

Örneğin, bir sisteme kayıt esnasında ad, soyad, e-posta adresi ve adres bilgilerinin girilmesi işlevsel bir gereksinim iken, bu sistemin kullanılabilirliği, güvenilirliği, yanıt süresi ve benzeri gereksinimler işlevsel olmayan gereksinimlerdir.

islevsel-olan-ve-olmayan-gereksinimler

Şunu da not almayı unutmayın, başlangıçta işlevsel olmayan gibi görünen birçok sistem gereksinimi proje geliştikçe işlevsel gereksinimlere dönüşebilir.

COSMIC FSM yöntemi işlevsel kullanıcı gereksinimlerini kullanır. İşlevsel kullanıcı gereksinimleri işlevsel gereksinimlerin bir alt kümesidir. Yazılımın hangi görevleri olacağını ve hangi hizmetleri sağlayacağını belirtir. Bu gereksinimler işlevsel süreç içerisinde aşağıdaki işlemleri yapar:

  1. Verinin iletilmesi / transferi
  2. Verinin dönüşümü
  3. Verinin depolanması
  4. Verinin alınması (verinin çıkışı)

Peki işlevsel kullanıcı gereksinimleri nasıl ortaya çıkarılır? Bunun birçok yolu bulunmaktadır. UML use cases, user story, ER diyagramları, modelleri ve dinamik modeller gibi yöntemler yazılım henüz ortada yokken gereksinimleri ortaya çıkarmak için kullanılmaktadır.

COSMIC: Bir İşlevsel Boyut Ölçüm Yöntemi

COSMIC İşlevsel Boyut Ölçümü (Functional Size Measurement, FSM) yöntemi, ismiyle müsemma olduğu üzere bir yazılımın ölçülmesi istenen kısmının işlevleri kullanılarak kullanılan büyüklük ölçüm yöntemidir.

COSMIC FSM yöntemi 1999 yılında orijinal ismi Common Software Measurement International Consortium olan konsorsiyum tarafından geliştirilmiştir. Görüleceği üzere ismini baş harflerden almaktadır. COSMIC, ISO/IEC 19761 – uluslararası ISO standardı olarak kabul edilmiştir.

Bu yöntem yazılımın işlevsel boyutunu ölçmek için kendine has bir dizi kural ve süreç tanımlar. COSMIC boyutu genellikle gereksinimlerden belirlenir ancak tasarım, kurulu sistem gibi diğer yazılım çıktılarından da faydalanılabilir. COSMIC FSM yöntemi çevik (agile) dâhil her türlü yazılım ve geliştirme tekniği için geçerlidir.

COSMIC’ten farklı olarak, ilgilenenler için, başka onaylı işlevsel büyüklük ölçüm yöntemleri de bulunmaktadır:

  • IFPUG (ISO/IEC 20926)
  • Mark II (ISO/IEC 20968)
  • NESMA (ISO/IEC 24570)
  • FISMA (ISO/IEC 29881)
  • COSMIC (ISO/IEC 19761)

COSMIC FSM yönteminin birimi CFP yani COSMIC Function Point’tir. Uzunluk birimi olarak nasıl metreyi kullanıyorsak burada da birim olarak CFP kullanılmaktadır. CFP, ölçme evresinde tanımlayacağımız her bir veri hareketleridir. Yazının ölçüm evresi başlığı ve vereceğimiz örnekte bu birim daha anlaşılır olacaktır.

logo-cosmicCOSMIC FSM resmî web sitesi https://cosmic-sizing.org/ adresidir. Tüm belgeler ücretsiz olarak indirilebilir.

COSMIC Prensipleri

COSMIC FSM yönteminin iki ana ilkesi bulunur. Bunlardan birincisi, yazılım bağlam modelidir (software context model). Bu ilke ölçülecek yazılımı tanımlar. Yani bu yazıda gördüğümüz tanımlar bu ilkeye dayanmaktadır. Bu ilkeye göre bir yazılım parçasının kesin bir COSMIC boyut ölçümü, gereksinimlerin işlevsel süreçlerinin ve alt süreçlerinin tanımlanabileceği bir ayrıntı düzeyinde bilinmesini gerektirir.

İkinci ilkesi ise genel yazılım modelidir (generic software model). Bu ilke de tüm yazılımlara uygulanabilecek genel kavramları belirtir. Bu ilkeye göre bir yazılım parçası, işlevsel kullanıcılarıyla bir sınır boyunca ve sınır içindeki kalıcı depolama alanıyla etkileşime girer. İşlevsel kullanıcı gereksinimleri benzersiz işlevsel süreçlerle eşleştirilebilir. Giriş, çıkış, yazma ve okuma olmak üzere dört veri hareketi türü vardır. Bir işlevsel süreç en az bir giriş, bir yazma ya da bir çıkış hareketi içermelidir ancak veri hareketleri için üst sınır yoktur. Her işlevsel süreç alt süreçlerden, veri hareketlerinden ve veri manipülasyonlarından oluşur. Ayrıca bu ilkeye göre bir veri hareketi, ilgi konusu nesneyi (object of interest) tanımlayan benzersiz bir veri öznitelikleri kümesinden oluşan tek bir veri grubunu hareket ettirir.

İlgi nesnesi (object of interest) nedir onu tanımlayalım. İlgi konusu nesneler, işlevsel kullanıcının dünyasında yer alan ve hakkında ölçüm yapılan yazılımın veri işlemesi veya depolaması/alması gereken fiziksel veya kavramsal herhangi bir şey demektir. Veri grubu ise hepsinin tek bir ilgi nesnesini tanımladığı bir veya daha fazla veri özniteliğe denir.

Örnek vermek gerekirse çalışan ilgi konusu nesne; veri grubu da çalışanın adı, soyadı, adresi veri özniteliklerinden oluşan gruptur. Telefon rehberi ilgi konusu nesne; isim, telefon numarası ve numaranın türü veri grubudur. Bir başka örnek; ekran bir ilgi konusu nesne, mesaj ve semboller de veri grubudur.

COSMIC ile Yazılım Büyüklüğü Ölçme

COSMIC FSM yöntemi işlevsellik baz alınarak yapılan bir ölçüm olduğu için ölçüm yapılacak kapsamın işlevselliklerinin ortaya çıkarılması gerekir. Yani öncelikle işlevsel kullanıcı gereksinimlerinin (functional user requirements, FUR) en alt seviyesine kadar inerek ortaya çıkarılması gerekir. Dolayısıyla güvenlik, performans gibi işlevsel olmayan (non-functional requirements, NFR) kalite gereksinimleri konuya dahil değildir.

İlkede açıklananla veri grubunu (data group) ve ilgi konusu nesneyi (object of interest)

COSMIC FSM yönteminin 3 ana evresi vardır:

  1. Ölçme Stratejisi Evresi (Measurement Strategy Phase): Amaç ve kapsam belirlenir.
  2. Eşleme Evresi (Mapping Phase): İşlevsel süreçler, veri grupları ve verilerin öznitelikleri belirlenir.
  3. Ölçme Evresi (Measurement Phase): Veri hareketleri belirlenir ve yazılımın işlevsel boyutu ölçülür.

Ölçme Stratejisi Evresi (Measurement Strategy Phase)

Bu evrede öncelikle ölçümün amacı belirlenir. Yani ölçümün neden gerekli olduğu ve sonucun ne için kullanılacağı belirlenir. Örneğin yazılım ekibinin verimliliğini ölçmek için ölçü olarak kullanmak isteyebiliriz. Ya da bu ölçümü yazılım efor kestirim sürecinde kullanabiliriz.

Amacın belirlenmesinden sonra ölçme işleminin yapılacağı yazılım parçasının genel kapsamı belirlenir. Burada kapsam ilgili işlevsel kullanıcı gereksinimleridir.

Bir sonraki adımda ölçülecek yazılım parçasının işlevsel kullanıcıları (functional users) belirlenir. Burada kullanıcı olarak yazılımla etkileşime giren her şeydir. İşlevsel kullanıcı ise işlevsel kullanıcı gereksinimi üzerinden veri gönderen veya alan kullanıcıdır. İşlevsel kullanıcıyı tanımlamamızın özel bir sebebi vardır. Yazılımla etkileşime giren her şeyi kullanıcı olarak tanımlamıştık. Burada örneğin kullanıcılara işletim sistemi de dahildir. Çünkü o da yazılımla etkileşime girer. Ancak işlevsel büyüklüğü ölçmek için işlevsel gereksinimleri kullanan kullanıcıları baz almamız gerekir. Dolayısıyla burada işletim sisteminin etkileşime geçtiği noktaları ölçüme dahil etmiyoruz. Son adımda ise ölçüm yapılacak yazılım kısmının ayrıntı düzeyi belirlenir.

ölçme-stratejisi-measurement-strategy-phase

Eşleme Evresi (Mapping Phase)

Bir sonraki aşama olan eşleme evresi fonksiyonel/işlevsel süreçlerin, veri gruplarının ve verilerin özniteliklerin belirlendiği evredir. Bu aşama ölçümü yapılacak yazılımın çıktılarında yani somut olarak ortaya çıkan tüm yazılım ürünlerindeki işlevsel kullanıcı gereksinimlerini girdi olarak kullanır. Vereceğimiz örneklerde bu tanımları daha da netleştireceğiz.

Öncelikle işlevsel süreç nedir bunu tanımlayalım. İşlevsel süreç COSMIC Function Points kitabındaki tanıma göre benzersiz, uyumlu ve bağımsız olacak şekilde yürütülebilen veri hareketlerini içeren bir dizi işlevsel kullanıcı gereksinimlerinin temel bileşenidir.

Yani işlevsel süreç ölçüm için standart ayrıntı düzeyidir. İşlevsel bir süreç işlevsel bir kullanıcı tarafından oluşturulan bir veri hareketiyle tetiklenir. Bu veri hareketleri İşlevsel Olan ve İşlevsel Olmayan Gereksinimler başlığındaki 4 veri hareketinden biridir. En az ikisini içerir yani bir veri girişi ile veri çıkışı/veri yazma işlemlerinden en az ikisi olur. Örneğin web uygulamanızda yeni ürünleri listelemek işlevsel bir süreçtir. İşlevsel süreci ya bir event (olay) tetikler ya da bir giriş tetikler. Tetikleyici olaya yangın detektörünün çalışmasını örnek olarak verebiliriz. Bu örnekte dumanın dedektöre ulaşması tetikleyici olay, sensör ise işlevsel kullanıcıdır.

İşlevsel sürecin tanımının önemli olmasının sebebi, bir sonraki ölçme evresinde her bir işlevsel sürecin hesaplamada kullanılacak olmasıdır.

eşleme-mapping-phase

Ölçme Evresi (Measurement Phase)

İkinci evreden sonra bu evrede ölçüm işlemi yapılarak işlevsel büyüklük hesaplanır. Bu ölçüm işleminden önce veri hareketlerini tanımlamamız gerekiyor çünkü hesaplama işlemi bunların üzerinden yapılmaktadır.

Veri hareketi gene kitap tanımına göre tek bir veri grubunu ilerleten temel işlevsel bileşen demektir. Veri grubu bir süreç içerisinde sadece ürün id’sini örnek olarak verebiliriz ya da abonenin adı, soyadı, e-posta adresi de olabilir. Burada önemli olan 4 çeşit veri hareketi bulunmaktadır:

  1. Giriş – Entry (E): Veri grubunu işlevsel süreç içerisine dahil eder.
  2. Çıkış – Exit (X): Veri grubunu işlevsel süreçten sınırın dışındaki kullanıcıya taşır.
  3. Okuma – Read (R): Veri grubunu kalıcı depolama alanından bunu gerektiren işlevsel sürecin içerisine dahil eder.
  4. Yazma – Write (W): İşlevsel süreç içerisinde bulunan veri grubunu kalıcı depolama alanına taşır.

işlevsel-büyüklük-ölçme-measurement-phase

Peki hesaplama nasıl yapılır?

  • Her bir veri hareketi = 1 CFP (COSMIC Function Point)
  • BoyutCFP (İşlevsel Süreçi)= Σ boyut(Ei) + Σ boyut(Xi) + Σ boyut(Ri) + Σ boyut(Wi)

Yani toplam işlevsel boyut tüm veri hareketlerinin toplamıdır.

COSMIC FSM İçin Bir Örnek

Burayı basit bir örnekle açıklamaları netleştirelim. Örneğin; işlevsel kullanıcı gereksinimi sistemdeki ürünlerden birinin bilgisini güncellemek olsun. Bu durumda gereksinimin ayrıntılarına inerek netleştirdiğimiz işlevsel süreçler ve boyut hesaplama şu şekilde olacak:

İşlevsel süreç1= Tüm ürünleri listelemek.

E = Ürün listeleme isteği

R = Ürünler

X = Ürünlerin bilgileri

Yani toplamda işlevsel sürecin boyutu = E+R+X = 3 CFP

İşlevsel süreç2= Listeden seçilen güncellenecek ürün bilgilerini getirmek.

E = Ürün ID (seçilen bu bilgiye göre ürün bilgileri gelecek.)

R = Ürün bilgileri

X = Ürün bilgileri

Yani toplamda işlevsel sürecin boyutu = E+R+X = 3 CFP

İşlevsel süreç3 = Ürün bilgilerini güncellemek.

E = Güncellenen ürün verisi

W = Ürün verisi

Yani toplamda işlevsel sürecin boyutu = E+R+W = 2 CFP

Sonuç olarak bu gereksinimin büyüklüğü = Boyut(FP1) + Boyut(FP2) + Boyut(FP3) = 3 + 3 + 2 = 8 CFP olacaktır.

Bu yazı size ne kadar faydalı oldu?

Değerlendirmek için bir yıldıza tıklayın!

Yazının sizin için faydalı olmadığını duymaktan dolayı müteessiriz...

Bu yazıyı geliştirmek isteriz!

Bu yazıyı nasıl geliştirebileceğimizi paylaşmak ister misiniz?