Use Case, kullanım senaryolarına giriş

Herkese merhaba,

Biliyorum konularda dağınık gidiyorum ama arada aklıma anlatmam gerektiğini düşündüğüm şeyler geldiğinde sırayı sapıtıyorum. Normalde bu seferki yazımda geçen ingilizce olarak yayımladığım özet design patterns yazısını türkçeye çevirecektim ama konu gene değişti.. Ve bugünkü konum kullanım senaryoları olarak türkçeye çevrilmiş olan use case mantığı.

Yazılım dünyasında kullanıcı gereksinimleri diye bir kavram var ilgilenen arkadaşların bildiği gibi. Bu kullanıcı gereksinimleri başlamanız gereken projenizde, sonuçta oluşacak yazılımın sahip olması gereken özellikleri madde madde sıralayan bir belgedir. Her madde, yazılımınızda kesinlikle olması gereken bir özelliği işaret eder çoğu zaman.

Kullanıcı gereksinimlerinin bizim için kötü yanı, oldukça resmi bir dille yazılmış olmalarıdır. Örnek olarak :

Kullanıcı, ekranda gördüğü içeriğin yerini dilediğince değiştirebilmelidir.

Bu dil hem resmi hem de yoruma aşırı açık bir belirtmedir. Siz bu gereksinim ile ilgili olarak müşterinizle yada proje müdürünüzle anlaştığınızı zannedersiniz ve kodlamaya başlarsınız. Belli bir süre sonra projeniz bittiğinde, ve sevinçle sonuçları müdürünüze açtığınızda, iki taraf da farklı ruh hallerine bürünür. İlk olarak müdürünüz bu özelliği nasıl test edeceğini bilmiyor olacaktır büyük ihtimalle. (En iyi proje müdürleri eski yazılımcılardır!!!) İkincisi ve daha önemlisi, siz sürükle bırak için haftalarınızı harcamışken, müdürünüz sizden sürükle bırak değil de mesela bir yönetim ekranında menülerin yerlerinin değiştirilmesini istediğini söyleyebilir. Bu durum da tam bir kabus olsa da, günümüz projelerinin çokca başına gelen bir beladır. Peki biz bu durum için ne yapabiliriz?

Bu şekilde yoruma açık cümleler kullanırsak birşey yapamayız. Çünkü bu tarz cümleler müşterilerin ve pointy haired boss ların çok sevdiği cümlelerdir ve hemen anlaştığınızı görerek şaşırırsınız. Aslında böyle olmaması gerekiyor, uzun tartışmalar yaşanmalı ve istenenin net olarak belgelenmesi sağlanmalıdır.

Bunun için, kullanım senaryosu denilen teknik kullanılabilir. Use Case olarak literatüre geçmiş bu kavram İsveçli bilgisayar bilimcisi Ivar Jacobson tarafından ortaya atılmıştır. Kullanım senaryolarında gereksinimler bir sıra ile sistemde yapılacak işler tasvir edilerek belirtilir. Örnek vermek gerekirse:

  1. Kullanıcı sisteme giriş yapar.
  2. Yönetim menüsüne tıklayarak yönetim ekranını açar.
  3. Yönetim ekranında, kutuların yerlerini değiştirme listesinden kutuya yer seçer.
  4. İstediği tüm kutuların düzenlenmesi bitene kadar 3. adımda kalır.
  5. İşlem bitince save düğmesine basarak, düzeni saklar.

Bu şekilde yazılan senaryo hakkında netlik ortadadır. Her taraf tam olarak anlayana kadar üzerinde çalışılabilir.

Kullanım senaryoları özellikle Unified Process denilen birleşik proses yazılım geliştirme tekniğinde yoğun olarak kullanılmaktadır. Özellikle sistemin geliştirilmesi bittiğinde resmi süreçlerde kabul testleri olarak da kullanılabilir. Hatta büyük ihtimalle test yazmak bile zorunda kalmazsınız çünkü adım adım ne yapmanız gerektiği zaten kullanım senaryolarında yazılıdır.

Bunlardan daha da önemli olan özelliği, sistemin bu şekilde tasviri sayesinde, elimizde sınıf olması ihtimal dahilinde olan kavramlar ortaya çıkar ve bu da nesneye yönelimli tasarım açısından bize büyük bir avantaj sağlar. İlk olarak isimleri ve isim tamlamalarını ayırırsınız. Bunlar bir liste halinde tutulur. Örneğin :

  • Kullanıcı
  • sistem
  • giriş
  • yönetim menüsü
  • yönetim ekranı
  • kutu
  • yer değiştirme listesi
  • işlem
  • save düğmesi
  • düzen

Bu isim ve isim tamlamalarının bir kısmı anlamsız olacaktır. Aynı anlama gelenler, yapılan işle alakası olmayanlar ve önemsiz varlıkları temsil edenler silinir. Önemsiz varlıkları temsil edenlerden daha büyük varlıklara ait olanlar, o fiziksel sınıfın özellikleri olabilirler. En son olarak da bu cümlelerdeki fiiller, isimlerin (yani fiziksel sınıfların) aralarındaki ilişkileri belirler. Bir sonraki yazımda bunun daha detaylı bir örneğini vereceğim. Şimdilik herkese iyi çalışmalar.