Yazılımperver Kavramlar – Geçerleme, Doğrulama

Merhaba arkadaşlar bugün farklı bir yazı ile karşınızdayım. Bu ve benzeri yazılarımda sizler ile yazılım dünyasında kullanılan kavramlara çok hızlı bir bakış atıyor olacağız. Özellikle güncel ya da karıştırılabilen konuları bu yazılarımda sizler ile paylaşmak istiyorum. Madem hepimiz öyle ya da böyle silikon emekçisiyiz, yazılım mühendisliği konularına da eğilmemek olmazdı değil mi :). Tabi her zaman olduğu gibi ana amaç az ve öz (tabi olabildiğince 😀 )bir şekilde bunu size aktarmak.

İlk yazımda da yazılım mühendisliği dünyasında sıklıkla kullanılan İngilizce karşılıkları “Verification” ve “Validation” olan Geçerleme ve Doğrulama kavramlarına göz atacağız. Ben dahil bir çok insan bu iki kavramı ilk duyduklarında bir bocalama yaşayabiliyorlar. Burada uzun uzadıya bunların ne olduğuna girmeden kısaca farklı örnek ve analojiler ile bu iki kavramı size aktarıp, zihinlerimizde yer etmesine yardımcı olmayı umuyorum.

Öncelikle bu iki kelimenin hemen sözlük anlamlarına bakalım. Bunun için IEEE’nin yazılım mühendisliği terminoloji sözlüğüne  (IEEE-STD-610, bunu da notlarımız arasına alalım. Benzer kavramlar için bakabilirsiniz) göz atalım:

  • Yazılım Geçerlemesi (“Software Verification”): Yazılım geliştirme sürecinin herhangi geliştirme fazının sonunda elde edilen çıktıların, ilgili fazın başında tanımlanan koşulları karşılayıp/karşılamadığının kontrol edilmesi sürecidir.
  • Yazılım Doğrulaması (“Software Validation”): Yazılım geliştirme süreci sırasında ya da sonunda ilgili yazılımın değerlendirilerek belirtilen gereksinimleri karşılayıp/karşılamadığının değerlendirildiği süreçtir.

Bunun ile birlikte CMMI’da seviye üç olgunluğu için bu iki aktiviteye ihtiyaç duymakta ve seviye 3 olgunluk için bu süreç alanlarına ilişkin hedeflerin sağlanmasını beklemektedir. Geçerleme (“Verification”) ve Doğrulama (“Validation”) sayfalarından CMMI’ın açısında bu iki aktivitenin nasıl ele alındığını ve nelerin beklendiğini görebilirsiniz.

Wright Brothers

Bu iki kavramı daha irdelemeden önce ilk analojimizi de hemen verelim (Kaynak: Boehm):

  • Doğrulama: Doğru ürünü geliştiriyor muyuz? (Orj: “Are we building the right product?”)
  • Geçerleme: Ürünü doğru geliştiriyor muyuz? (Orj: “Are we building the product right?”)

Şimdi yazılım geliştirme süreci açısından bu iki kavrama bakalım, geçerleme aktiviteleri, yazılım halen geliştirilirken uygulanırken, doğrulama  aktiviteleri genelde bir faz/modül bittiğinde ya da bütün yazılım tamamlandığında gerçekleştiriliyor. Yazılım doğrulama sürecinin ürün geliştirilirken (analiz, tasarım, geliştirme) devamlı olarak kontrol edilerek, uygulamanın sürekli olarak belirtilen şartlara göre oluşturulduğunu kontrol altına alırken, doğrulama (“Validation“) faaliyeti, doğrulama noktasına nasıl geldiğimiz ile de ilgilenmez (arada kodları gözden geçirdik mi, ara test yaptık mı ya da gereksinimleri gözden geçirdik mi). Sadece doğrulama noktasında mıyız değil miyiz ona bakar.

Geçerleme yüksek kalitede bir yazılım elde etmek için kullanılabilecek test, muayene, tasarım analizi, gözden geçirme gibi bir çok aktiviteyi içerisinde barındırır. Burada izlenen süreç genel olarak objektiftir ve genel olarak bu süreçteki aktivitelerde de bu amaçlanır.  Bunun ile birlikte doğrulama, geçerlemeye göre oldukça subjektif olabilmektedir. Çünkü burada önemli olan ortaya çıkan yazılım veya ürünün son kullanıcı veya müşterilerin veya ihtiyaç duyulan isterlerin ne kadar sağladığına bakılır. Bu noktada da kullanıcı değerlendirmesi her zaman son kararda etkilidir.

Son olarak duyduğum bir diğer güzel analojiye de değinmeden geçemeyeceğim :). Geçerleme süreci başardığımız her iş için güzel olmuşu kendi kendimize genelde deriz ve kendi ortamımızda bu süreçleri gerçekleştiririz. Doğrulama sürecinde ise güzel olmuşu genelde müşteri der ve bu süreç çoğunlukla müşteri veya nihai ortamda gerçekleşir.

Buraya kadar güzelce her iki kavramı da irdeledik, pek gerçekte bu iki süreç altında ne tür aktiviteler gerçekleştiriliyor sorusuna bakalım. Bunu da Kaynak site aşağıdaki figür ile güzel bir şekilde özetlemiş. Elbette bunları hepsi illa belirtildiği şekilde olacak diye bir kanun yok, fakat fikir vermesi açısında önemli. Ayrıca ne kadar ve ne seviyede geçerleme ve doğrulama yapılması gerektiği de yine projenin yapısına (Ör. emniyet kritik yazılım mı?Ya da basit bir görsel yazılım mı?) ve ihtiyaçlara göre değişebilir.

Son olarak bu yazıya son vermeden önce aşağıdaki gibi bir özet ile yazıyı kapatalım:

  • Geçerleme ürünü belirtilen koşullara göre doğru geliştiriyor muyuz’a bakıyoruz? Doğrulamada ise doğru ürünü geliştirdik mi?
  • Geçerleme genel olarak planlar, gereksinimler, tasarım, kod ve test adımlarını değerlendirilirken, doğrulamada ise yazılımın kendisi değerlendirilir,
  • Geçerleme genel olarak gözden geçirmeler, muayene ve statik analiz aktiviteleri içerirken, doğrulama fonksiyonel veya kabul testleri gibi daha dinamik aktivitleri içerir,
  • Geçerleme genelde hiç ya da az kod koşumuna ihtiyaç duyarken, doğrulamada kod muhakkak koşulur,
  • Geçerleme daha alt seviye ve geliştirme ortamında yapılan bir aktivite olsa da doğrulama daha üst seviye ve paydaşların da dahil olduğu bir aktivitedir.

Daha detaylı bilgiler için aşağıdaki kaynaklara da göz atabilirsiniz.

The difference between Verification and Validation

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.