SEN2022 · 11. hafta · Validating and Evolving Analysis Models

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.

verificationvalidationwalkthroughpresenterrecorder (scribe)maintenance oraclebalancing the modelsconsistencyfactoringabstractionrefinementpartitioncollaborationpackagepackage diagramdependencylayerproblem domain layerdata management layerhuman-computer interaction layerphysical architecture layerfoundation layer

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:

  1. Verification: modelleri doğru mu kurduk? Validation: doğru sistemi mi modelliyoruz?
  2. Walkthrough hatayı bulur, düzeltmez.
  3. 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.
  4. 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.

RolGörev
PresenterModeli anlatır, genelde modeli yapan analist
Recorder (scribe)Bulunan hataları, soruları, önerileri yazar
Maintenance oracleBakım, standartlar ve mevcut sistemlerle uyum açısından sorgular
Diğer katılımcılarKullanı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çmeliHiç 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 gelmeli8 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 gelmeliCopy.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ıfOperation’lar
MembergetStatus()
ClassSessiongetCapacity(), listSessions()
Bookingcreate()

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:

#SorunTürüDüzeltme
1Sequence’ta listSessions (adım 1) selectSession’dan (adım 2) sonra geliyorFonksiyonel ↔ davranışsal (sıra)Önce listSessions, sonra selectSession
2verifyMembership() Member’da yok, Member’da getStatus() varYapısal ↔ davranışsalOperation’ı ekle ya da mesajı getStatus() yap
3hasFreeSeat() ClassSession’da yokYapısal ↔ davranışsalOperation’ı 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 birdenGereksinim 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 yokYapısal ↔ davranışsalController 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
FoundationTemel sınıflar, veri yapılarıDate, String, List
Problem domainAnalizdeki iş sınıflarıMember, ClassSession, Booking
Data managementKalıcılık, veritabanı erişimiBookingDAO, veritabanı bağlantısı
Human-computer interactionArayüzEkranlar, formlar, butonlar
Physical architectureDonanım, ağ, işletim sistemi ile ilgiliSunucu 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üşünceDoğrusu
Verification = validationVerification modeli doğru kurmak, validation doğru sistemi kurmak
Walkthrough’da hatayı hemen düzeltKaydet, sonra düzelt
Yöneticinin katılması iyi olurSavunma refleksi yaratır; genelde katılmaz
Her model ayrı ayrı doğruysa iş bittiModeller birbiriyle de dengelenmeli
Kullanılmayan sınıf zararsızdırEksik gereksinimin ya da gereksiz karmaşıklığın işareti
Mesaj adı operation’dan farklı olabilirMesaj, alıcının operation’ıdır; adlar aynı olmalı
Analizde UI ve veritabanı sınıfları çizilirAnalizde problem domain; diğer katmanlar tasarımda
Package bağımlılıkları iki yönlü olabilirDöngüsel bağımlılıktan kaçın

Kendini test et

Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.

Soru 1kolay

What is the difference between verification and validation?

Cevabı göster
Verification: are we building the models right (correct, consistent)? Validation: are we building the right system (does it meet user needs)?

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.

Soru 2orta

In a walkthrough, who answers questions about how the model would affect future maintenance and checks it against existing systems and standards?

  1. Presenter
  2. Recorder
  3. Maintenance oracle
  4. Project sponsor
Cevabı göster
C) Maintenance oracle

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.

Soru 3orta

Why should the person who built the model NOT be the one who fixes problems during the walkthrough?

Cevabı göster
The walkthrough's goal is to find problems, not to fix them; fixing during the session wastes time and makes it defensive.

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.

Soru 4orta

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?

  1. A structural-behavioral imbalance
  2. A functional model inconsistency (activity diagram vs use cases)
  3. A physical architecture problem
  4. Not a problem
Cevabı göster
B) A functional model inconsistency (activity diagram vs use cases)

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.

Soru 5kolay

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
Structural and behavioral models (class diagram vs sequence diagram)

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.

Soru 6orta

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
Either find the missing requirement/use case that uses Coupon and add it, or remove Coupon from the class diagram.

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).

Soru 7zor

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
Add refund() as an operation of Order (class diagram) and show it in an interaction diagram (and use case) that triggers it.

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.

Soru 8orta

What is factoring?

Cevabı göster
Separating out a module or class that has common behavior (e.g., creating a superclass or a shared class) from existing classes.

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).

Soru 9kolay

Which layer contains the classes identified during analysis, like Book, Copy and Reservation?

  1. Foundation
  2. Problem domain
  3. Data management
  4. Human-computer interaction
Cevabı göster
B) Problem domain

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.

Soru 10orta

In a package diagram, what does a dashed arrow from package UI to package Domain mean?

Cevabı göster
A dependency: UI depends on Domain, so a change in Domain may require a change in UI.

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.

Soru 11kolay

Name the three models that must be balanced with each other in the analysis phase.

Cevabı göster
Functional (use case, activity), structural (CRC, class, object) and behavioral (sequence, communication, state machine) models.

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.

Deftere not kartı

Verification: modeli doğru mu kurduk? Validation: doğru sistemi mi kuruyoruz? Walkthrough: ekipçe gözden geçirme; hata bul, düzeltme sonra Roller: presenter (anlatır), recorder/scribe (yazar), maintenance oracle (bakım, standart) Yönetici katılmaz; kişi değil model değerlendirilir Fonksiyonel ↔ yapısal: description'daki isimler = sınıf/attribute; her sınıf bir use case'te Fonksiyonel ↔ davranışsal: her use case için sequence; mesajlar = description adımları Yapısal ↔ davranışsal: her mesaj = alıcının operation'ı; state machine event = operation Activity aksiyonları ↔ use case adımları; object node ↔ sınıf Factoring: abstraction (üst sınıf) / refinement (alt sınıf) Partition / collaboration: birlikte çalışan sınıflar → alt sistem Package diagram: paketler + kesik ok bağımlılık Katmanlar: foundation, problem domain, data management, HCI, physical architecture