Durum Diyagramı Çizmek: Bir Nesnenin Yaşam Döngüsünü Modellemek
Durum diyagramı, tek bir nesnenin hangi durumlarda bulunabildiğini ve hangi olayların onu bir durumdan diğerine geçirdiğini gösterir. Rehber öğeleri, geçiş etiketini ve bir sipariş yaşam döngüsünün çizimini örnekle anlatır.
Bir bakışta
- Durum diyagramı tek bir nesnenin yaşam döngüsüne bakar. Sipariş, destek talebi ya da hesap gibi durumu zamanla değişen nesneler için uygundur.
- Durum, nesnenin belirli bir koşuldaki halidir. "Onaylandı" ya da "Kargoda" gibi, nesnenin o anda neyi yapabileceğini belirleyen bir hâl olarak adlandırılır.
- Geçiş etiketi olay, koşul ve eylemden oluşur. Olay geçişi başlatır, koruma koşulu izin verir, eylem geçiş sırasında çalışır.
- Çizimin asıl değeri geçersiz geçişleri göstermesidir. Teslim edilmiş siparişin iptali gibi izin verilmeyen hareketler diyagramda ok bulunmadığı için fark edilir.
- Durum tablosu diyagramı denetler. Her durum ve olay çifti için sonuç yazmak eksik ya da çelişen geçişi hızla bulur.
Durum diyagramı neyi anlatır?
Bazı nesnelerin davranışı, içinde bulundukları duruma göre değişir. Ödeme alınmamış bir sipariş kargoya verilemez, teslim edilmiş bir sipariş iptal edilemez, kapatılmış bir destek talebi yeniden açılana kadar işlem görmez. Bu kuralları metinle anlatmak kolayca çelişkili hale gelir. Durum diyagramı kuralları tek bir şekilde toplar: hangi durumlar var, hangi olay hangi durumu değiştirir ve hangi koşul gerekir.
UML ailesinde bu çizime durum makinesi diyagramı da denir. Çizimin odağı tek bir nesnenin yaşam döngüsüdür; birden çok nesnenin iş birliği değildir. İş analizinde buna durum modelleme tekniği denir ve genellikle bir nesne ya da kayıt türünün yaşam döngüsü kural olarak yazılmadan önce çizilir.
Bu yüzden durum diyagramı, yazılımdaki durum alanlarının (örneğin sipariş durumu) hangi değerleri alabileceğini ve hangi geçişlerin geçerli olduğunu belirlemek için ideal bir araçtır.
Öğeler: durum, geçiş, başlangıç ve bitiş
Diyagram birkaç öğeden oluşur.
- Başlangıç noktası: içi dolu küçük daire. Nesnenin ilk durumuna giden ok buradan çıkar.
- Durum: yuvarlatılmış dikdörtgen; içine durumun adı yazılır. Ad, nesnenin hâlini anlatan bir sıfat ya da edilgen fiil olmalıdır ("Onaylandı", "Beklemede").
- Geçiş: durumlar arasında oklu çizgi. Üzerine etiket yazılır.
- Bitiş durumu: içi dolu daireyi çevreleyen halka. Nesnenin yaşam döngüsü burada biter.
- Seçim noktası: eşkenar dörtgen; aynı olayın koşula göre farklı durumlara götürebildiği yerlerde kullanılır.
- Bileşik durum: içinde alt durumlar bulunan büyük durum kutusu.
Bir durumun içine ayrıca giriş, çıkış ve süregelen davranış eylemleri yazılabilir: duruma girerken ya da çıkarken ne yapılır, durumda kalırken ne devam eder. Bunlar yalnızca gerektiğinde eklenir; çoğu çizim yalnız durum adı ve geçişlerle yeterince anlaşılır.
Geçiş etiketini okumak
Geçiş okunun üzerindeki etiket üç parçadan oluşabilir ve hepsi isteğe bağlıdır: olay, köşeli parantezli koruma koşulu ve eğik çizgiden sonra eylem. Örnek bir etiket: "müşteri iptal eder [kargoya verilmedi] / müşteri bilgilendirilir".
Olay, geçişi başlatan şeydir. Koşul, o olay gerçekleştiğinde bile geçişin yapılıp yapılmayacağına karar verir. Eylem, geçiş sırasında çalışan davranıştır. Aynı olay birden çok oktan çıkabilir; koşullar birbirini dışlıyorsa nesne hangisine gideceğini bilir.
Etiket yazarken olayı, gerçekleşen bir gelişme olarak kısa yazın ("ödeme alındı", "teslim edildi"). Koşulun mantıksal olarak doğru ya da yanlış çıkabilen bir ifade olması gerekir. Eylemi kısa tutun; uzun bir süreç gerekiyorsa o ayrıntı aktivite diyagramıyla gösterilir.
Bir geçiş olayla başlar, koşulla izin alır, eylemle sonuçlanır
Geçiş etiketinin zinciri
- OlayGeçişi tetikleyen gelişme gerçekleşir.
- Koruma koşuluKoşul doğruysa geçişe izin verilir.
- EylemGeçiş sırasında çalışan davranış yürütülür.
- Yeni durumNesne hedef durumun hâline girer.
Adım adım çizim: sipariş yaşam döngüsü
Örnek olarak bir çevrim içi siparişin durumlarını çizelim.
Önce nesneyi seçin: sipariş. Sonra siparişin alabileceği durumları listeleyin: yeni, onaylandı, hazırlanıyor, kargoda, teslim edildi ve iptal edildi. Her durumun anlamı net olmalıdır; "onaylandı" ödemenin alındığını, "hazırlanıyor" deponun işleme başladığını ifade eder.
Ardından olayları yazın: ödeme alındı, hazırlık başladı, kargoya verildi, teslim edildi, müşteri iptal eder. Şimdi başlangıç noktasından "Yeni" durumuna bir ok çizin. "Yeni" durumundan "Onaylandı" durumuna ödeme alındığında geçilir. "Onaylandı" durumundan "Hazırlanıyor" durumuna hazırlık başladığında, oradan "Kargoda" durumuna kargoya verildiğinde, oradan "Teslim edildi" durumuna teslim edildiğinde geçilir ve "Teslim edildi" bitiş durumuna bağlanır.
İptali ayrıca çizin: "Yeni", "Onaylandı" ve "Hazırlanıyor" durumlarından "İptal edildi" durumuna müşteri iptal ettiğinde ok gider. "Kargoda" durumundan çıkan bir iptal oku çizmemek bilinçli bir karardır: diyagram, kargodaki siparişin iptalinin bu akışta mümkün olmadığını açıkça söyler. Geçersiz geçişlerin yokluğu da diyagramın bilgisidir.
Durum tablosuyla denetim
Diyagram bittiğinde bir tablo çıkarın: satırlara durumları, sütunlara olayları koyun ve her hücreye o durumda o olay gelince ne olacağını yazın. Boş hücreler farklı anlamlara gelebilir: olay o durumda geçersizdir ya da kural unutulmuştur.
Her boş hücre için paydaşa sorulması gereken soru bellidir: "Bu durumda bu olay gelirse ne olur?" Cevap "olmaz" ise hücreye bunu yazın ya da sistemin hata vereceğini belirtin. Cevap "bilmiyoruz" ise bulduğunuz şey bir gereksinim boşluğudur.
Tablo ayrıca çelişkileri de gösterir. Aynı durum ve olay çifti için farklı sonuçlar yazıyorsanız koruma koşulları örtüşüyor demektir. Durum diyagramı ve tablo birlikte geliştirici için eksiksiz bir davranış tanımı oluşturur.
Hangi diyagram: durum, aktivite ya da sıra?
Aynı sistem için birkaç UML diyagramı çizilir ve her biri farklı bir soruyu yanıtlar. Durum diyagramı "bu nesne hangi hâllerde bulunur ve neyle değişir" sorusuna bakar. Aktivite diyagramı "bu iş hangi adımlarla ilerler" sorusunu yanıtlar. Sıra diyagramı ise nesneler arasında mesajların sırasını gösterir.
Durum diyagramı yazılımdaki "durum" alanı olan her kayıt için işe yarar. Bir kayıtta durum değişkeni varsa ve bu değerlerin birbirine nasıl geçtiği belli değilse çizim yapmak için iyi bir aday bulmuşsunuz demektir. Metnin çelişkili hale geldiği, kuralların "şu durumda şunu yapamazsınız" biçiminde dağıldığı yerlerde diyagram netlik getirir.
Sorunun türü diyagram türünü belirler
Hangi UML diyagramı?
- Tek nesnenin hâlleri ve geçişleriDurum diyagramıYaşam döngüsü ve geçersiz geçişler görünür.
- Bir işin adımları, kararları ve paralel kollarıAktivite diyagramıAkış ve eş zamanlılık gösterilir.
- Nesneler arası mesajların zaman sırasıSıra diyagramıKatılımcıların etkileşimi görünür.
Sık hatalar
Durum diyagramlarında en sık görülen hata, durum yerine eylemi durum olarak adlandırmaktır. "Ödeme alınıyor" bir işlemdir ve geçişin eylemi olmalıdır; nesnenin hâli ise "Ödeme bekleniyor" ya da "Onaylandı" gibi bir durumdur.
İkinci hata, her ayrıntıyı tek diyagrama sığdırmaktır. Alt durumları bileşik durumun içine alıp ayrıntıyı ayrı bir diyagramda göstermek okunurluğu korur. Üçüncü hata bitiş durumunu unutmak ve nesneyi sonsuza dek açık bırakmaktır; iptal edilmiş ya da tamamlanmış kayıtların yaşam döngüsü bir yerde biter.
Dördüncü hata, çıkışı olmayan durumdur. Bitiş olmadığı hâlde hiçbir okun ayrılmadığı bir durum, nesnenin orada takılıp kalacağı anlamına gelir. Her durumdan en az bir geçersiz olmayan çıkış bulunmalı ya da durum bilinçli olarak son durum sayılmalıdır.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
İş Analizi Uzmanlığı Sertifika Programı, gereksinim analizi ve tasarım tanımı ile BABOK teknikleri başlıklarıyla modelleme çalışmasını kapsar; durum modelleme iş analizi uygulamasında bilinen bir tekniktir. Sistem Analistliği Sertifika Programı UML ile sistem modelleme ve veri modelleme başlıklarını içerir. Durum alanı taşıyan kayıtlar için kural yazan iş analistleri ve sistem analistleri bu çizimden doğrudan yararlanır.
İlgili Mindset programı
İş Analizi Uzmanlığı Sertifika Programı - IIBA Uyumlu
Sık sorulan sorular
Durum diyagramı ile durum geçiş tablosu aynı şey midir?
İkisi aynı bilgiyi farklı biçimde verir. Diyagram yaşam döngüsünü bir bakışta gösterir; tablo ise her durum ve olay çifti için sonucu açıkça yazdırdığı için eksik ve çelişkili kuralları yakalar. Karmaşık nesnelerde ikisini birlikte hazırlamak en sağlam yöntemdir.
Her nesne için durum diyagramı çizilmeli mi?
Hayır. Durumu zamanla anlamlı biçimde değişen ve davranışı duruma göre farklılaşan nesneler için çizilir: sipariş, talep, fatura, sözleşme gibi. Durumu hiç değişmeyen referans kayıtlar için çizim gereksizdir. Çizime değer katan, durumun değişim kurallarının tartışmalı olduğu nesnelerdir: kimin hangi durumdan hangisine geçirebileceği, geri dönüşün mümkün olup olmadığı.
Bir durumdan birden çok durum çıkarsa ne yapılır?
Her çıkış oku farklı bir olayla ya da farklı bir koruma koşuluyla etiketlenir. Aynı olay birden çok çıkışa sahipse koşulların birbirini dışlaması gerekir. Koşulları tek noktada toplamak istiyorsanız seçim noktası kullanılabilir.
Bileşik durum ne zaman kullanılır?
Bir durumun içinde kendi alt durumları ve geçişleri varsa ve bunları ana diyagramda göstermek okunurluğu bozuyorsa kullanılır. Örneğin "Hazırlanıyor" durumunun içinde paketleme ve etiketleme alt durumları olabilir; ana diyagram yalnızca "Hazırlanıyor" kutusunu gösterir.
Durum diyagramı kodla nasıl bağlanır?
Durum alanı olan bir kayıtta geçerli durum değerleri diyagramdaki durumlardır, izinli geçişler ise okların kendisidir. Geliştirici geçiş kurallarını diyagramdan okuyup doğrulama koduna çevirir. Diyagram değiştiğinde kod ve testlerin de güncellenmesi gerekir.