Yazılımperver Kavramlar – Geçerleme (“Validation”), Doğrulama (“Verification”)

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 Doğrulama  ve Geçerleme 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 Doğrulaması (“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 Geçerlemesi (“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. Doğrulama (“Verification”) ve Geçerleme (“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):

  • Geçerleme: Doğru ürünü geliştiriyor muyuz? (Orj: “Are we building the right product?”)
  • Doğrulama: Ü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, doğrulama aktiviteleri, yazılım halen geliştirilirken uygulanırken, geçerleme 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, geçerleme(“Validation“) faaliyeti, geçerleme 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 geçerleme noktasında mıyız değil miyiz ona bakar.

Doğrulama 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 geçerleme, doğrulamaya 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 :). Doğrulama 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. Geçerleme 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 doğrulama ve geçerleme 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:

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

2 Comments Yazılımperver Kavramlar – Geçerleme (“Validation”), Doğrulama (“Verification”)

  1. AvatarZeki

    Merhaba, yazınızda doğrulama ile geçerleme yer değiştirmiş. Düzeltirseniz güzel bir yazı olur. Bu durumuyla anlatılanlar yanlış.

    Reply
    1. yazılımperveryazılımperver

      Geri bildirim için çok teşekkürler, faydalı olduysa ne mutlu. Belirttiğiniz üzere kavramlar başta karışmış ve yazının devamında da ne yazık ki bu şekilde devam etmiş 🙂 İçeriği bu doğrultuda güncelledim.

      Reply

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.