Pazartesi, Ocak 16, 2006

Etkili Use Case Yazımı - Use Case Adımları

Alistair Cockburn'ün "Writing Effective Use Cases" adlı kitabı en faydalandığım yazılım mühendisliği kitaplarından biri. Cockburn bu kitabında bir yazılımın davranışsal ihtiyaçlarını (behavioral requirements) keşfetmek ve tanımlamak için kullanılan use case modellerinin nasıl etkili bir şekilde yazılacağını anlatıyor. Kitabın önemli kısımlarını kendim için bundan iki sene kadar önce özetlemiştim. Bloguma bu özetimden bazı kısımları koyacağım. Özetlerin parça parça ve asıl metinin kısaltılmış hali olmasından dolayı, bir telif hakkı ihlaline sebep olmayacağını ümit ediyorum.

Adım cümleleri, her zaman aynı gramer formunda yazılır. Basit tek aktif eylemden oluşan bir cümle:

"User enters name and address."
"At any time, user can request the money back."
"The system verifies that the name and account are current."
"The system updates the customer’s balance to reflect the charge."

1. İlke: Özne - zarf - tümleç - yüklem
2. İlke: Topu kimin attığı çok açıktır.
3. İlke: 3. kişinin gözüyle

İlk başlarda insanlar, sistemin gözünden etkileşimi yazıyor. Halbuki, ne sistem ne de kullanıcı. Üçüncü kişinin gözünden etkileşim tarif edilmeli.

4. İlke: Süreç sürekli olarak ileri doğru ilerler

Her bir adım, ana use casedeki amaçtan bir alt seviye amaca sahiptir.

Before:
1. System asks for name.
2. User enters name.
3. System prompts for address.
4. User enters address.
5. User clicks ’OK’.
6. System presents user’s profile.
After:
1. User enters name and address.
2. System presents user’s profile.

Eğer çok sayıda veri girişi varsa, bunları ayrı ayrı satırlarda madde madde yazabilirsiniz:

Acceptable variant 1:
3. Customer enters name, address, phone number, secret information, emergency contact
phone number.
Acceptable variant 2:
3. Customer enters
- name
- address
- phone number
- secret information
- emergency contact phone number

5. İlke: Bir eylemler kümesidir

Jacobson, bir adımı, alt seviye bir transaction olarak tanımlıyor. Bir transaction çeşitli alt eylemlerden oluşur:

1. Ana aktör bir talepte bulunur ve sisteme veri gönderir.
2. Sistem talebin ve verinin geçerliliğini onaylar
3. Sistem iç durumunu değiştirir
4. Sistem, aktöre sonucu gönderir.

Bütün bu dört eylemi, tek bir adım içinde de anlatmak mümkündür, ayrı ayrı da. Hangi yolun daha iyi olacağı, adımın karmaşıklığına bağlıdır. Aşağıdaki örnekte, aynı adımın farklı şekillerde parçalanması görülüyor:

Version 1.
1. The customer enters the order number. The system detects that it matches the winning number
of the month, registers the user and order number as this month's winner, sends an email to
the sales manager, congratulates the customer and gives them instructions on how to collect
the prize.
Version 2.
1. The customer enters the order number.
2. The system detects that it matches the winning number of the month, registers the user and
order number as this month's winner, sends an email to the sales manager, congratulates the
customer and gives them instructions on how to collect the prize.
Version 3.
1. The customer enters the order number.
2. The system detects that it matches the winning number of the month.
3. The system registers the user and order number as this month's winner, sends an email to
the sales manager, congratulates the customer and gives them instructions on how to collect
the prize.
Version 4.
1. The customer enters the order number.
2. The system detects that it matches the winning number of the month.
3. The system registers the user and order number as this month's winner, and sends an email
to the sales manager.
4. The system congratulates the customer and gives them instructions on how to collect the
prize.
Version 5.
1. The customer enters the order number.
2. The system detects that it matches the winning number of the month.
3. The system registers the user and order number as this month's winner.
4. The system sends an email to the sales manager.
5. The system congratulates the customer and gives them instructions on how to collect the
prize.

1. versiyon çok karmaşık. 2. versiyon genellikle basit adımlar için uygun. 3. versiyon bu örneğe iyi oturdu. 4. ve 5. versiyonlar da iyi.

6. İlke: Kontrol etmez, onaylar

Sistem bir iş kuralının geçerli olduğunu onaylar. Birçok zaman bunun yerine, sistem şu koşulu kontrol eder, ifadesi kullanılıyor. Bu ifade, süreci açıkça bir adım iletletmiyor. Kontrolün sonucu belli değil. Bir amaç ifade etmiyor. Bunun ardından, şunu yazmak gerekiyor: "Eğer kontrol geçerse ..." "Eğer kontrol geçmezse ..."

Niçinini sorarsak bu tarz ifadeleri düzeltebiliriz. Sistem niçin koşulu kontrol ediyor? Bir kuralın geçerli olduğunu sabitlemek, onaylamak veya temin etmek için.

Before:
2. The system checks whether the password is correct
3. If it is, the system presents the available actions for the user.
After:
2. The system validate that the password is correct
3. The system presents the available actions for the user.

7. İlke: Zamanlama opsiyoneldir

Çoğu adım birbirini takip eder. Ama gerektiğinde bir adımın ne zaman gerçekleşeceğini belirtebilirsiniz.

3 ve 5. adımların arasında, kullanıcı şunu yapar...

Kullanıcı şunu yaptığında, sistem bunu yapar.

8. İlke: İfade: "Kullanıcı, A sistemine B sisteminde iş yaptırtır."

Birçok zaman tasarladığımız sistemin, başka bir sisteme bir iş yaptırtması gerekir. Bu durumda, şöyle diyemeyiz: "Kullanıcı Verileri Çek düğmesine basar. Sistem verileri, MRP sisteminden talep eder."

Bu kullanıcı arayüzü detaylarını açığa çıkarmak olurdu.

İki adım olarak yazabiliriz:
4. User signals to the system to fetch data from system B.
5. The system fetches the background data from system B."

Doğru olsa da, bu uzundur. Daha kolayı:
4. User has the system fetch the z data from system B.

9. İlke: İfade: "x-y adımlarını ... koşuluna kadar tekrarla"

Düz metinle yazıyor olmamızın bir katkısı, tekrarlanan işlemleri, daha kolay bir şekilde ifade edebiliyor olmamızdır.

Tek adım tekrarlanıyorsa:

"Kullanıcı bir veya daha çok ürün seçer."
"Kullanıcı çeşitli ürün katalogları arasından istediği ürünü buluncaya kadar dolaşır."

Eğer birkaç adım tekrarlanacaksa, tekrarlanan bloğun öncesine veya sonrasına tekrarlama ifadesini yaz. Sonrasına yazmak daha kolay anlaşılır.

1. Customer supplies either account identifier or name and address.
2. System brings up the customer's preference information.
3. User selects a item to buy, marks it for purchase.
4. System adds the item to the customer's "shopping cart".
Customer repeats steps 3-4 until indicating that he/she is done.
5. Customer purchases the items in the shopping cart (see use case xxx).

Tekrarlama ifadesini numaralandırmadık. Böylesi daha okunaklı.

Tekrarlamanın bir türü de, x-y adımlarının herhangi bir sırada meydana geleceğini belirtmektir:

1. Müşteri login olur
2. Sistem mevcut ürünleri ve servisleri sunar.

2-4. adımlar herhangi bir sırayla gerçekleşebilir
2. Kullanıcı satın alacağı ürünleri seçer.
3. Kullanıcı ödeme biçimini belirtir.
4. Kullanıcı nakliye adresini verir.

5. Kullanıcı alışverişin bittiğini işaretler
6. Sistem siparişi başlatır. Seçili ürünleri, tercih edilen ödeme biçimine borçlandırır ve nakliye adresine yollar.

Hiç yorum yok: