Analiz modellerini doğrulama ve geliştirme: walkthrough, balancing, katmanlar
Fonksiyonel, yapısal ve davranışsal modellerin kendi içinde ve birbirleriyle tutarlı olup olmadığını kontrol etme (walkthrough, balancing), sonra tasarıma geçmek için factoring, paketler ve katmanlar. Sınavda 'bu modellerde ne tutarsız?' sorusu gelir.
Analiz evresinin sonunda elinde üç model var: fonksiyonel (use case diyagramı, description’lar, activity diyagramları), yapısal (CRC, class, object diagram) ve davranışsal (sequence, communication, state machine). Bu modeller farklı kişiler tarafından, farklı zamanlarda çizildi. Tasarıma geçmeden önce iki soru sorulur: Her model kendi içinde doğru mu? Modeller birbiriyle tutarlı mı? Tutarsız modelle tasarıma geçmek, yanlış planla bina yapmaktır. Sınavda iki ya da üç model parçası verilir ve “find the inconsistencies” denir.
Altın kurallar:
- Verification: modelleri doğru mu kurduk? Validation: doğru sistemi mi modelliyoruz?
- Walkthrough hatayı bulur, düzeltmez.
- Her şey bir yerden gelir ve bir yere gider: her sınıf bir use case’te geçer, her mesaj bir operation’dır, her event bir mesajdır.
- Bir modeli değiştirirsen diğerlerini de güncelle.
Walkthrough
Walkthrough, bir modelin ekip tarafından adım adım gözden geçirilmesidir. Model, onu yapan kişi dışındaki gözlerle test edilir.
| Rol | Görev |
|---|---|
| Presenter | Modeli anlatır, genelde modeli yapan analist |
| Recorder (scribe) | Bulunan hataları, soruları, önerileri yazar |
| Maintenance oracle | Bakım, standartlar ve mevcut sistemlerle uyum açısından sorgular |
| Diğer katılımcılar | Kullanıcılar ve analistler; sorular sorar, hataları yakalar |
Kurallar:
- Amaç hata bulmak, düzeltmek değil. Düzeltme oturumdan sonra yapılır.
- Model değerlendirilir, kişi değil. Bu yüzden presenter’ın yöneticisi genelde katılmaz.
- Kullanıcılar katılırsa walkthrough aynı zamanda validation olur: “Bu sizin işinizi doğru anlatıyor mu?”
- Erken ve sık yapılır; hata ne kadar geç bulunursa o kadar pahalıdır.
Her modeli kendi içinde doğrulama
Fonksiyonel model:
- Use case diyagramındaki her use case’in bir description’ı var mı? Her description bir diyagram ovaline karşılık geliyor mu?
- Description’daki “relationships” alanı diyagramdaki include/extend/generalization ile aynı mı?
- Activity diyagramındaki her aksiyon bir description adımına karşılık geliyor mu (ve tersi)?
- Activity diyagramındaki her object node, description’larda geçen bir isme karşılık geliyor mu?
Yapısal model:
- Her CRC kartı bir sınıfa karşılık geliyor mu? Kartlardaki “collaborators” class diagram’da bir ilişki olarak var mı?
- Kartlardaki “knowing” sorumlulukları sınıfın attribute’ları mı, “doing” sorumlulukları operation’ları mı?
- Object diagram class diagram’daki multiplicity’leri ihlal ediyor mu?
Davranışsal model:
- Her sequence diyagramındaki mesajlar communication diyagramındakiyle aynı mı?
- State machine’deki her durum ve geçiş, nesnenin gerçek yaşam döngüsünü (description’larda anlatılan) yansıtıyor mu?
Modelleri dengelemek (balancing)
Üç model çift çift karşılaştırılır.
Functional
(use case,
activity)
/ \
/ \
Structural ------- Behavioral
(CRC, class, (sequence,
object) comm., state)
Fonksiyonel ↔ yapısal
| Kontrol | Örnek |
|---|---|
| Description’lardaki her önemli isim bir sınıf ya da attribute olmalı | “rezervasyon kodu” → Reservation.code |
| Her sınıf en az bir description’da geçmeli | Hiç kullanılmayan “Coupon” sınıfı → eksik gereksinim ya da gereksiz sınıf |
| Activity diyagramındaki object node’lar sınıf olmalı | Order [paid] → Order sınıfı, status attribute’u |
| Description’daki ilişkiler (öğrenci kopyayı rezerve eder) class diagram’da ilişki olmalı | Student - Reservation - Copy |
Fonksiyonel ↔ davranışsal
| Kontrol | Örnek |
|---|---|
| Her use case (en az normal flow) için bir sequence diyagramı olmalı | Reserve Book → Reserve Book sequence |
| Sequence’taki aktörler use case diyagramındaki aktörlerle aynı olmalı | Diyagramda “Student”, sequence’ta “Member” yazılmamalı |
| Sequence mesajları description adımlarına karşılık gelmeli | 8 adım ↔ mesajlar |
Yapısal ↔ davranışsal
| Kontrol | Örnek |
|---|---|
| Sequence’taki her lifeline bir sınıfın nesnesi olmalı | :Copy → Copy sınıfı |
| Her mesaj, alıcı sınıfın bir operation’ı olmalı | setStatus() → Copy.setStatus() |
| İki nesne mesajlaşıyorsa sınıfları arasında ilişki olmalı | Controller-Copy mesajlaşıyor → ilişki ya da geçici bağlantı |
| State machine’in sınıfı class diagram’da olmalı; durumlar attribute değerlerine karşılık gelmeli | Copy.status ∈ {Available, On Hold, …} |
| State machine event’leri sınıfın operation’ları ya da gelen mesajlar olmalı | pickUp → Copy.pickUp() |
Çözümlü örnek: tutarsızlığı bul
Spor salonu sisteminden üç parça:
Use case description (Book Class), normal flow:
1. Member ders listesini görüntüler.
2. Member bir ders seçer.
3. Sistem üyeliği doğrular.
4. Sistem derste boş yer olduğunu kontrol eder.
5. Sistem rezervasyon oluşturur.
6. Sistem onay gösterir.
Class diagram (ilgili kısım):
| Sınıf | Operation’lar |
|---|---|
| Member | getStatus() |
| ClassSession | getCapacity(), listSessions() |
| Booking | create() |
Sequence diagram mesajları:
1 aMember -> :BookingCtrl : selectSession()
2 :BookingCtrl -> :ClassSession : listSessions()
3 :BookingCtrl -> :Member : verifyMembership()
4 :BookingCtrl -> :ClassSession : hasFreeSeat()
5 :BookingCtrl -> :Booking : create()
6 :BookingCtrl -> :Trainer : notifyTrainer()
Bulunan tutarsızlıklar:
| # | Sorun | Türü | Düzeltme |
|---|---|---|---|
| 1 | Sequence’ta listSessions (adım 1) selectSession’dan (adım 2) sonra geliyor | Fonksiyonel ↔ davranışsal (sıra) | Önce listSessions, sonra selectSession |
| 2 | verifyMembership() Member’da yok, Member’da getStatus() var | Yapısal ↔ davranışsal | Operation’ı ekle ya da mesajı getStatus() yap |
| 3 | hasFreeSeat() ClassSession’da yok | Yapısal ↔ davranışsal | Operation’ı ekle (ya da getCapacity ile kontrol) |
| 4 | :Trainer lifeline’ı var ama class diagram’da Trainer sınıfı ve description’da antrenöre bildirim yok | Üç model birden | Gereksinim mi? Kullanıcıya sor; varsa description’a adım, class diagram’a sınıf ekle; yoksa mesajı sil |
| 5 | :BookingCtrl class diagram’da yok | Yapısal ↔ davranışsal | Controller sınıfını class diagram’a ekle (ya da analizde aktör doğrudan nesnelerle konuşsun) |
Modelleri geliştirmek (evolving): tasarıma köprü
Doğrulanan modeller tasarıma hazırlanır.
Factoring
Ortak davranışı ayrı bir sınıf ya da modüle çıkarmak.
- Abstraction: ortak özellikleri üst sınıfa topla. Member ve Trainer’ın ad, telefon, e-posta attribute’ları → Person.
- Refinement: bir sınıfı özel alt sınıflara ayır. Membership → MonthlyMembership, AnnualMembership.
Partitions ve collaborations
Birlikte çok mesajlaşan sınıflar bir collaboration oluşturur ve bir partition (alt sistem) olarak gruplanabilir. Ölçüt: aralarındaki mesaj sayısı (CRUDE matrisi bunu gösterir). Rezervasyon, ders ve üyelik sınıfları birlikte çalışıyorsa “Booking” alt sistemi olur.
Paketler ve package diagram
Package, ilgili öğeleri (sınıflar, use case’ler) gruplayan bir kaptır. Package diagram paketleri ve aralarındaki dependency ilişkisini (kesik ok) gösterir.
+----------+ +-----------+ +----------+
| UI |- - >| Domain |- - >| Data |
+----------+ +-----------+ +----------+
Bağımlılık: Domain değişirse UI etkilenebilir. İyi tasarımda bağımlılıklar tek yönlü ve döngüsüzdür.
Katmanlar (layers)
| Katman | İçerik | Örnek |
|---|---|---|
| Foundation | Temel sınıflar, veri yapıları | Date, String, List |
| Problem domain | Analizdeki iş sınıfları | Member, ClassSession, Booking |
| Data management | Kalıcılık, veritabanı erişimi | BookingDAO, veritabanı bağlantısı |
| Human-computer interaction | Arayüz | Ekranlar, formlar, butonlar |
| Physical architecture | Donanım, ağ, işletim sistemi ile ilgili | Sunucu iletişimi, dağıtım |
Analizde sadece problem domain katmanı modellenir. Tasarımda diğer katmanlar eklenir; 12. hafta physical architecture katmanını ele alır.
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| Verification = validation | Verification modeli doğru kurmak, validation doğru sistemi kurmak |
| Walkthrough’da hatayı hemen düzelt | Kaydet, sonra düzelt |
| Yöneticinin katılması iyi olur | Savunma refleksi yaratır; genelde katılmaz |
| Her model ayrı ayrı doğruysa iş bitti | Modeller birbiriyle de dengelenmeli |
| Kullanılmayan sınıf zararsızdır | Eksik gereksinimin ya da gereksiz karmaşıklığın işareti |
| Mesaj adı operation’dan farklı olabilir | Mesaj, alıcının operation’ıdır; adlar aynı olmalı |
| Analizde UI ve veritabanı sınıfları çizilir | Analizde problem domain; diğer katmanlar tasarımda |
| Package bağımlılıkları iki yönlü olabilir | Döngüsel bağımlılıktan kaçın |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
What is the difference between verification and validation?
Cevabı göster
Verification modelin iç doğruluğunu ve tutarlılığını kontrol eder: kurallara uygun mu, modeller birbiriyle uyumlu mu. Validation modelin gerçek ihtiyacı karşılayıp karşılamadığını kontrol eder: kullanıcılarla birlikte gözden geçirilir.
In a walkthrough, who answers questions about how the model would affect future maintenance and checks it against existing systems and standards?
- Presenter
- Recorder
- Maintenance oracle
- Project sponsor
Cevabı göster
Presenter modeli anlatır (genelde modeli yapan analist). Recorder (scribe) bulunan hataları ve önerileri not eder. Maintenance oracle modelin bakım, standartlar ve mevcut sistemlerle uyum açısından sorun çıkarıp çıkarmayacağına bakar.
Why should the person who built the model NOT be the one who fixes problems during the walkthrough?
Cevabı göster
Walkthrough'da hatalar tespit edilir ve kaydedilir, düzeltme sonradan yapılır. Oturumda tartışarak düzeltmek zaman kaybettirir. Ayrıca walkthrough kişiyi değil modeli değerlendirir; savunmaya geçilmemesi için yönetici genelde katılmaz.
An activity diagram contains the action 'Apply Discount', but no use case and no use case description mention discounts. What kind of problem is this?
- A structural-behavioral imbalance
- A functional model inconsistency (activity diagram vs use cases)
- A physical architecture problem
- Not a problem
Cevabı göster
Fonksiyonel model içinde activity diagram ile use case description'lar dengeli olmalıdır: her aksiyon bir use case adımına, her use case adımı bir aksiyona karşılık gelmeli. Ya description eksik ya diyagramda fazladan aksiyon var.
A sequence diagram sends calculateFine() to :Loan, but the Loan class in the class diagram has no such operation. Which models are out of balance?
Cevabı göster
Kural: sequence diyagramındaki her mesaj, alıcı sınıfın bir operation'ı olmalıdır. Ya class diagram'a calculateFine() eklenir ya da mesaj doğru sınıfa yönlendirilir.
The class diagram has a class 'Coupon', but no use case description, CRC card or interaction diagram ever uses it. What should the analyst do?
Cevabı göster
Yapısal model ile fonksiyonel model dengeli olmalı: her sınıf en az bir use case description'da geçen bir isimden gelmeli. Kullanılmayan sınıf ya eksik bir gereksinimin işaretidir (kullanıcıya sor) ya da gereksizdir (sil).
A state machine for Order has a transition triggered by refund(), but no sequence diagram ever sends refund() and Order has no refund operation. List the two fixes needed for balance.
Cevabı göster
State machine'deki her event bir operation'a (ya da gelen mesaja) karşılık gelmelidir. Event'i tetikleyen etkileşim de bir use case'e dayanmalıdır. Aksi halde durum geçişi hiç gerçekleşmez.
What is factoring?
Cevabı göster
Factoring, ortak davranışı ayrı bir modüle çıkarmaktır. İki yol: abstraction (ortak özellikleri bir üst sınıfta toplamak: Student ve Librarian → Person) ve refinement (bir sınıfı daha özel alt sınıflara bölmek).
Which layer contains the classes identified during analysis, like Book, Copy and Reservation?
- Foundation
- Problem domain
- Data management
- Human-computer interaction
Cevabı göster
Analizdeki iş sınıfları problem domain katmanıdır. Foundation temel veri yapıları (Date, String, koleksiyonlar), data management kalıcılık (veritabanı erişimi), human-computer interaction arayüz (ekranlar, formlar), physical architecture donanım/ağ ile ilgili sınıflardır.
In a package diagram, what does a dashed arrow from package UI to package Domain mean?
Cevabı göster
Package diagram paketleri ve aralarındaki bağımlılıkları gösterir. Kesik ok bağımlılıktır; ok bağımlı olandan bağımlı olunana gider. İyi tasarımda bağımlılık tek yönlüdür: UI → Domain → Data, tersine değil.
Name the three models that must be balanced with each other in the analysis phase.
Cevabı göster
Her model kendi içinde doğrulanır, sonra üç model çiftler halinde dengelenir: fonksiyonel-yapısal, fonksiyonel-davranışsal, yapısal-davranışsal. Bir değişiklik bir modele yapıldıysa diğerleri de güncellenir.
Doğrulama: Kavramsal sorular; walkthrough rolleri, model dengeleme kuralları ve katman tanımları standart tanımlarla (Dennis, Wixom ve Tegarden çerçevesi) karşılaştırılarak kontrol edildi. 'Tutarsızlığı bul' sorularındaki eksikler sayfadaki model parçaları üzerinden elle kontrol edildi. Sayısal cevap yok.