Bu Blogda Ara

21.05.2008

Yazılım , sadece kodlardan mı oluşur ?

Yazılım , sadece kodlardan mı oluşur ? Bunun cevabını aşağıdaki makale çok güzel anlatmış.


Yazılım geliştirme sadece kodlamaktan ibaret değildir. Bir problemin çözümü olarak nitelediğimiz yazılımların ne yapacağını ve nasıl yapacağını belirlediğimiz yani problemi tanımladığımız aşama “Analiz” aşamasıdır. Yazdığınız kod ancak isteneni doğru bir biçimde yerine getiriyorsa başarılı bir yazılımdır. Bu nedenle öncelikle yazılımdan ne istendiğinin doğru bir biçimde tanımlanması gerekir.

Yazılım geliştirmede kodlamaya başlamadan önceki aşamada ilk olarak genel bir kapsam çıkartılması gerekir. Bu kapsamla birlikte yazılımın üzerinde çalışacağı donanım bileşenlerini de kapsayacak şekilde bir sistem analizi yapılır. Ardından yazılım ve donanım gereksinimleri ana hatlarıyla belirlenince yazılım için proje planı yapılır, gerekiyorsa ekip oluşturulur ve sonrasında yazılım isterleri çözümlenmeye başlar.

İlk olarak yukarıdaki paragrafın anlamını biraz daha açık hale getirelim. Bu yazı boyunca kavramların ve işleyişin daha iyi anlaşılması açısından bir örnek üzerinden gideceğim. Bir diyetisyen için randevu sistemi. Her bir kavramı ve adımı bu örnekler için uygulanışını da okuduğunuzda daha iyi anlayacağınızı umuyorum.

Kapsam dediğimiz şey, projenin neleri içerip neleri içermeyeceğinin belirlenmesidir. Müşteriler, bu öğretmenleriniz, eşiniz, dostunuz da olabilir, her zaman birçok şey söyleyeceklerdir. Müşterinin sizden isteyeceği her şey yazılım içinde olmalı mıdır? Eğer sonsuz zamanız, bütçeniz, enerjiniz ve sabrınız varsa olabilir. Ama her projenin bir başlangıç ve bir bitiş zamanı vardır. Yani zamanınız sınırlıdır. Bu arada kaynaklarınız da sınırlı. Tek başınıza belirlenen süre içinde yazabileceğiniz kod miktarı da sınırlıdır. E işi yaparken bu kadar sınır varsa, işi çerçevelerken de bazı sınırlar koymalıyız. Biz buna kapsam yönetimi diyoruz.

Randevu sistemini ele alalım. Müşteri bir diyetisyen, bir de sekreteri var. Randevuları ve hastaları takip ediyor. İlk olarak diyetisyenle görüşmeye başlamalıyız. Diyetisyenden geliştireceğimiz sistemden neler beklediğini ana hatlarıyla öğrenmeliyiz. Diyetisyen bu durumda aklına gelen gelmeyen birçok şey söylemeye başlayacaktır.

DİYETİSYEN: Hastalarım internet üzerinden randevu alabilmeli. Sekreterim ve ben de bu randevuları dilediğimiz zaman izleyebilmeliyiz. Bir hasta randevusunu erteleyebilir veya iptal edebilir. Ama bunu en geç 2 iş günü öncesinde yapmalı. Ayrıca gerektiğinde ben de randevuları iptal edebilirim. Bu durumun da hastalara sms ve email ile bildirilmesi gerekir. Her zaman aynı saatlerde çalışmayabilirim. Bazen bazı günler çalışmayabilirim. Bu nedenle takvimin esnek bir şekilde yönetilebiliyor olması gerekiyor. İki hafta sonra yeni yerimize taşınıyoruz. Orada bu sistemin çalışıyor olması benim için önemli. He bir de ek olarak tabii ki hastanın iletişim, kişisel bilgileri, tahlil vb. ve verdiğim diyetleri de sistemin takip ediyor olması lazım.

Şimdi gördünüz mü diyetisyenden gelen son faullü hareketi! Son anda “he bir de” diyerek eklediği şeyler randevu sisteminin kendisinden birkaç kat büyük bir iş. Burada yapmanız gereken diyetisyeni biraz aydınlatmaktır. Randevu sisteminin kapsamını belirleyerek ona yardımcı olalım.

SİZ: Hastanın kişisel, iletişim, tahlil ve diyet gibi bilgilerini tutacak hasta takip sistemi tamamen ayrı bir iştir. Dilerseniz onu da randevu takip sisteminin ardından planlayabiliriz. Ancak anlattıklarınızdan iki ayrı sisteme ihtiyacınız olduğu anlaşılıyor: Randevu takip sistemi ve hasta takip sistemi. Bu iki sistemin birden iki hafta içinde yetişmesi mümkün değil. Bu nedenle biriyle başlamamızı öneririm.

Kapsamı belirlemeye başladık. İlk yaptığımız en üst seviyede sistemleri isimlendirerek kapsamın adını vermek oldu. Şimdi diyetisyeni makul bir insan olarak düşünüp söylediklerinizi değerlendirdiğini ve randevu takip sistemini öncelikli olarak ilk yapmanızı istediğini varsayıyoruz. Şimdi sıra yazılım isterlerini belirlemeye geldi. Yazılım isteri dediğimiz şey, o yazılım yerine getireceği işlevlerin belirlenmesidir. Ek olarak temel iş kuralları, performans beklentileri, kısıtlar vb. şeyler de bu aşamada açıklığa kavuşturulur. Teyitler ve sorularla, olabildiğince temkinli olarak yazılım isterlerini çözümlemeye başlayalım.

Öncelikle elimizdeki bilgileri bir gözden geçirelim:
- Herkes, her yerden sistemi kullanabilecek. Bu projemizin web tabanlı olmasını gerektirecek. Hemen diyetisyene soruyoruz.

SİZ: Herkesin dilediği zaman erişebileceği bir sistem için web tabanlı bir proje geliştirmemiz gerekiyor. Bu yazılıma ek olarak bir web sunucusu ve alan adı kiralanmasını gerektirir. (Sistem çözümlemesi) Web sunucunuz ve alan adınız var mı? Yoksa bunlarla da benim mi ilgilenmemi istersiniz?

DİYETİSYEN: Alan adım ve web sunucum var. Bu konularla ilgilenen arkadaşın ismini ve iletişim bilgilerini size vereceğim. Projenin web ortamında çalışması için gerekli desteği ondan alabileceksiniz.

Evet, şimdi projemizin bir web projesi olacağını netleştirdik. Şimdi sıra işleyişe geçti.
- Her zaman aynı saatlerde çalışmayabilirim. Bazen bazı günler çalışmayabilirim. Bu nedenle takvimin esnek bir şekilde yönetilebiliyor olması gerekiyor.

SİZ: Öncelikle sistemde bir randevu takvimi oluşturarak başlamak gerecek. Bu takvimde siz ya da sekreteriniz önümüzdeki herhangi bir gün için çalışma saatlerinizi direkt olarak ilgili günü seçerek saat aralığını verip randevuları tanımlayabilmelisiniz? Doğru anlamış mıyım?

DİYETİSYEN: Evet ama her gün için teker teker randevu tanımlamayla uğraşmamalıyız. Yani genel olarak seanslar 45 dakika sürer. Sabah saat 10.00 ile akşam saat 17.00 arası normal çalışma saatlerimizdir. Öğlen 13.00 ile 14.00 arasında da yemek arası veririm. Cumartesi ve Pazar günleri normalde çalışmam. Bu standart olarak tanımlı olmalı. Ama biz gerektiğinde ek seanslar ya da günler ekleyebilmeliyiz.

Otomatik tekrarlayan randevu biraz sizi yoracak gibi görünüyor. Hemen itiraz mı etmeli, yoksa bu istek makul mü?
Burada çok kolay bir formül var. Bu istek,
- Mutlaka olmalı mı?
- Olursa iyi olur mu?
- Olmasa da olur mu?

Diyetisyenin randevu işlemlerini bir yazılım üzerinden takip etme nedenlerinden biri de işlerin kolaylaşmasını sağlamak ve sekreterinin yoğunluğuna azaltmak. Her gün için tekrar tekrar takvim girdisi oluşturulmasını beklemek bu iş için pek de doğru değil. Yani bu ister, bu proje için mutlaka olmalı. Bunu kenara koyduk.

SİZ: Sistemde siz randevuları tanımladıktan sonra müşterileriniz randevu alabilecek, erteleyebilecek ya da iptal edebilecek. Sistem erteleme ve iptal için 2 iş günü öncesine kadar müsaade edecek, sonrasında kullanıcı bu işlemleri yapamayacak. Peki, bu 2 iş gününün daha sonra 1 iş günü olması ya da 3 günce çıkması ya da belirli bir müşteriye özel olarak değiştirilmesi söz konusu olabilir mi?

İş kuralını sorguluyoruz. Parametrik mi yapalım? Sabit mi? İstisnaları var mı?

DİYETİSYEN: Çok emin değilim ama bu 2 gün değişmez gibi. Belki 3 gün olabilir ama 1 güne inmez. Özel müşterilerimiz için de şöyle bir şey olabilir: İnternet üzerinden yine işlem yapamazlar ama bizi telefonla aradıklarında sekreterim o randevuyu boşa çıkarabilir. Böylece o seansı boş geçirmek zorunda kalmayız.

Evet, randevu iptal ve ertelemeyi de çözümledik. İptal ve erteleme için maksimum gün sayısı parametrik olmalı. Hastalar bu parametrik değere bağlı olarak erteleme/iptal işi yapabilir/yapamaz olmalılar. Ancak doktor ya da sekreter diledikleri zaman randevu erteleme ya da iptali yapabilmeliler.

- Ayrıca gerektiğinde ben de randevuları iptal edebilirim. Bu durumun da hastalara SMS ve e-mail ile bildirilmesi gerekir.

Hastalar için randevularını iptal etmenin dışında bir de diyetisyen için belirli bir aralıktaki randevuları iptal etme söz konusu. Peki, bu durumda sistem nasıl çalışmalı? Yani diyelim ki sizin bugün saat 15.00 diyetisyenle randevunuz vardı. Diyetisyenin çok önemli bir işi çıktı ve bugünkü bütün randevuları iptal etti. Yarın, öbür gün, hatta bütün bir hafta için tüm seanslar dolu. Size bu alacaklı olduğunuz seans için nasıl bir çözüm önerilecek. Normalde bu iş nasıl çözümleniyordu?

SİZ: Peki randevularını iptal ettiğiniz hastalara nasıl bir çözüm getiriyorsunuz?

DİYETİSYEN: Her biri teker teker aranıyor ve hasta kabul ederse mevcut seanslardan uygun olan birine davet ediliyorlar. Eğer hasta kabul etmezse, normal seansların dışına ek seans konularak hastaya randevu veriliyor.

Bu cevabı ek seans tanımlama işlevimiz yerine getirecek zaten. Şimdi gelelim SMS ve Email ile randevu iptalini bildirmeye. Bu durumda her bir hasta, randevu sistemi üzerinden kayıt olurken cep telefonu ve email bilgilerini girmek zorunda.

SİZ: Hastalarınız kayıt olduklarında gerektiğinde email ve sms gönderebilmek için email adreslerini ve cep telefonlarını almamız gerekecek. Ayrıca tabii ki isimlerini de. Bunların haricinde hastayla ilgili randevu sisteminde olmasını istediğiniz bilgiler var mı?

DİYETİSYEN: Hastanın adı, soyadı, emaili, cep telefon numarası ve oturduğu semt bilgileri bizim için yeterli. SMS için benim çalıştığım bir kurum var. O kurumdan gerekli desteği alabilirsiniz.

Buraya kadar yazılımın hem kapsamını belirlemiş olduk hem de isterlerin büyük kısmını ana hatlarıyla şekillendirdik. Şimdi elimizdeki bilgilerle isterleri bir toparlayalım ve yazılımımızın işlevlerini sıralayalım.

1. Sistem otomatik olarak takvim oluşturacak. Pazartesi – Cuma günleri aralığında her gün için sabah saat 10.00 akşam 17.00 aralığında 45’er dakikalık seanslar tanımlayacak. Bu seanslara öğlen 13.00 – 14.00 arası dâhil değil. (Burada hemen aklımıza bir soru gelmesi lazım. Seanslar aralıksız olarak mı atanmalı, yoksa iki seans arasına boşluk konmalı mı?)
2. Sekreter ya da diyetisyen istediklerinde belirli seansları kapatabilmeli ya da yeni seans açabilmeliler.
3. Hastalar ad, soyad, semt, cep telefon, email bilgilerini girerek seçecekleri bir gün ve seansa randevu alabilirler.
4. Hastalar belirli bir süre önceden (2 iş günü) randevularını iptal edebilirler ya da erteleyebilirler. Her iki durum da ilgili seansı boşa çıkartır ve başka birinin randevu alabilmesini sağlar. Erteleme için hastanın bilgilerini girmeye gerek kalmaksızın takvimden yeni bir boş seans seçmesi yeterli olur.
5. Bir ya da birçok seans için sekreterin ya da diyetisyenin seans iptali. Bu durumda ilgili seanslara randevu almış hastalara sms ve email mesajları gider.

İşlevsel isterlerimizi ana hatlarıyla belirledik. Şimdi bir kez daha diyetisyenimizle görüşme yapalım. Sonrasında sekreterimize de birkaç sorumuz olur. Ardından yazılımımızın tasarımına geçebiliriz.

Diyetisyenimize randevular arasında boşluk olup olmayacağını sorduk. Sekreterle konuşarak şimdiye kadar bu işlerin nasıl yapıldığını dinledik. Analizimizde eksik var mı doğrulamasını yaptık. Hatta birkaç da hastayla görüştük. Mevcut durumda şikayetçi oldukları şeyleri öğrendik, ardından bu işi internet üzerinden yapıyor olsalar sistemden neler beklerlerdi öğrendik. Sonrasında da işlevsel analizimizi güncelleyip, ne tür kullanıcı ekranları olacağı ve ne tip raporlar alınabileceğini de belirten bir belge hazırlayarak diyetisyenle analiz aşamasındaki son görüşmemizi yapıyoruz.

DİYETİSYEN VE SEKRETER İŞLEVLERİ:
1. Sistem yöneticisi girişi: Diyetisyen ya da sekreterin kullanıcı adı ve parolasıyla girerek, onlara özel işlemleri gerçekleştirmesini sağlayacak giriş ekranı.
2. Sistem yöneticisi parola değiştirme: Sisteme bir diyetisyen ve bir sekreter olmak üzere iki kullanıcı tanımlanacaktır. Bu kullanıcılar diledikleri zaman parolalarını değiştirebilirler.
3. Sisteme çalışma günlerinin tanıtılması: Diyetisyen ya da sekreter sistem yöneticisi ekranından kendilerine gösterilen günleri (Pazartesi, Salı, Çarşamba, Perşembe, Cuma, cumartesi, Pazar) işaretleyerek çalışma günlerini belirlerler.
4. Sisteme çalışma saatlerinin tanıtılması: Diyetisyen ya da sekreter sistem yöneticisi ekranından seçtikleri bir çalışma günü için sabah ve öğlen çalışma saat aralığını girerler. (Öğlen yemeği saatleri dışarıda kalacak şekilde.)
5. Ek seans oluşturma: Diyetisyen ya da sekreter sistem yöneticisi ekranından seçtikleri bir tarih için, o günde olmayan ek bir seansı başlangıç saatini vererek tanımlarlar.
6. Seans iptali: Diyetisyen ya da sekreter sistem yöneticisi ekranından seçtikleri bir gün için belirli seansları, bir günün tamamını, ya birden fazla günü iptal edebilirler. Bu durumda sistem iptal edilmiş seanslara kayıtlı hastalara email ve sms gönderir.
7. Seans izleme/sorgulama: Sekreter ya da doktor belirli bir tarihteki seansların randevu durumunu izleyebilirler.
8. Sistemin otomatik olarak seans oluşturması: Kullanıcı ya da sistem yöneticileri belirli bir gün için seansları listelemek istediklerinde, eğer o gün için daha önceden seanslar oluşturulmamış ise, öncelikle ilgili günün çalışma günü olup olmadğına bakılır. İlgili gün çalışma günüyse, haftanın o günü için belirlenmiş çalışma saatlerine bakılırak, 45 dakika seans 15 dakika iki seans arası olacak şekilde seanslar tanımlanır. (Sistem bu işlevi arka planda otomatik olarak yapacaktır.)

HASTA İŞLEVLERİ:
1. Randevu alma: Hasta seçtiği bir gün için kendisine listelenen boş seanslardan dilediği birine ad, soyad, semt, cep telefonu ve email bilgilerini girerek kayıt olur.
2. Randevu iptali: Hasta randevu takibi için cep telefonu numarasını girerek almış olduğu randevuyu görüntüler. Eğer süresi içindeyse randevu iptal seçeneğini görebilecektir. Bu seçeneği tıklayarak iptal nedenini girer ve randevu iptal işlemi gerçekleşir.
3. Randevu erteleme: Hasta randevu takibi için cep telefonu numarasını girerek almış olduğu randevuyu görüntüler. Eğer süresi içindeyse randevu ertele seçeneğini görebilecektir. Bu seçeneği tıklayarak erteleme nedenini girer ve yeni randevu seansını seçerek erteleme işlemini gerçekleştirir.

SİSTEM YÖNETİM EKRANLARI:
1. Diyetisyen/sekreter sistem yönetim paneli giriş ekranı.
2. Diyetisyen/sekreter parola güncelleme ekranı.
3. Sistem yönetim menüsü.
4. Çalışma günleri tanıtma ekranı.
5. Çalışma saatleri tanıtma ekranı.
6. Ek seans giriş ekranı.
7. Seans kapatma ekranı.
8. Seans iptal ekranı.
9. Seans izleme/sorgulama ekranı.

HASTA EKRANLARI:
1. Randevu sorgulama ekranı.
2. Randevu alma ekranı.
3. Randevu iptal ekranı.
4. Randevu erteleme ekranı.

Yukarıdaki listelerle diyetisyene gidip, çözümlemeniz için teyit almanız analiz aşamasındaki son adım. Bundan sonraki aşamada tasarıma geçeceğiz. Sizin de fark ettiğiniz gibi bu basit örnek bile analizin ne kadar ciddi bir iş olduğunu açıkça göstermektedir.

Aslında ben bu örnekte diyetisyeni pek konuşturmadım. Daha neler neler çıkardı o diyetisyenden…

SON SÖZ : ANALİZ,ANALİZ,ANALİZ.......... (benden)

Hiç yorum yok: