2 Aralık 2015 Çarşamba

YAZILIM MÜHENDİSLİĞİNE DAİR



  Günümüzde, akla gelebilecek her türlü iş alanında yazılım kullanılmayan iş merkezlerinin başarılı olması ve devamlılığı pek mümkün görünmemektedir. Örneğin, bankacılık sektöründe işe uygun bir yazılım kullanmayan bir bankayı düşünmek bile olası değildir. Sadece bankacılıkta değil telekomünikasyon, lojistik gibi hemen hemen her sektörde yazılım artık “olmazsa olmaz” bir bileşen haline gelmiştir. Yazılım mühendisliği de işte tam bu noktada devreye girer. Aksi halde, karmaşık, büyük, entegrasyon içeren yazılım projelerinin başarıya ulaşması mümkün değildir. 

  Bir bilgisayar mühendisi olarak  sizlere yazılım mühendisliği nedir, süreçleri nelerdir, güncel yazılım geliştirme süreçleri nasıldır bunları açıklamaya çalışacağım.
 
  Süreç, olguların ya da  olayların,        belli bir taslağa uygun ve belli bir sonuca varacak biçimde düzenlenmesidir. Yazılım süreci ise bir yazılım ürününü üretmeyi sağlayan birbiriyle tutarlı aktivite grubudur.Daha açıklayıcı olacak olursam yazılım süreci bizim yazılım üretme yolumuzdur.

 Yazılım geliştirme süreci için pek çok aktivite vardır. Ama tüm süreçler için ortak olanlar:
  • Yazılım Belirtimi (Software Specification)
  • Yazılım Tasarım ve Geçekleştirimi (Software Design and Implementation)
  • Yazılım     Geçerleme  (Software  Validation)
  • Yazılım Gelişimi (Software Evolution) 
-Yazılım Belirtimi sürecinin fazları:
  1. Yapılabilirlik çalışması (Günümüz teknolojisine uygun mu ?)
  2. Gereksinim ortaya çıkarma ve çözümleme (Sistem modellerini geliştirme)
  3. Gereksinim belirtimi (Kullanıcı isteklerini belgeleme)
  4. Gereksinim geçerleme (Tamlık ve tutarlılığı kontrol etme) 
-Yazılım Tasarım ve Geçekleştirimi süreci yazılım tasarımı (yazılım yapısını tasarlama) ve gerçekleştirim (tasarlanan yapıyı çalıştırılabilir programa çevirme) aşamalarından oluşur. Sistem belirtimini çalıştırılabilir sisteme çevirme sürecidir.

-Yazılım     Geçerleme   süreci ise gerçekleme (verification) ve geçerleme (validation),  sistemin belirtimlerine uyduğunu ve sistem müşterisinin gereksinimlerini karşıladığını göstermek içindir.
Aşamaları ise:
  • Kontrol etme (Checking)
  • Gözden geçirme (Review) 
  • Sistemi test etme (System testing) 
-Yazılım Gelişimi sürecinde işle ilgili şartların değiştikçe gereksinimler de değiştiği için işi destekleyen yazılımın da gelişmesi ve değişmesi işlemi gerçekleştirilir.

  Yazılım süreç modelleri kontrol, tutarlılık ve düzen sağlar. Karmaşıklığı azaltıp kaosu önler.

   * Süreç:   Belirli bir amaç için gerçekleştirilen bir grup aktivite
   * Aktivite: Belirli bir amacı gerçekleştirmek için bir takıma ya da proje çalışanına atanan bir görev
 
Genel Yazılım Süreç Modelleri


  > Kodla ve Düzelt (Code and Fix) :   

     Analiz(Çözümleme) süreci sonrası kodlama, kodlama sonrası da düzeltme aşamaları getirilerek oluşturulan modeldir.

 > Çağlayan  Modeli      (Waterfall     Model):

   -  Sonraki faz  bir önceki  faz  tamamlanmadan       başlayamaz.
   -  Her fazın sonucu bir ya da birden fazla onaylanan (imzalanan) belgedir.
   -  Gerektiğinde geliştirme                 aktivitelerinde  iterasyonlar (tekrarlamalar) olabilir.

> Evrimsel Geliştirme (Evolutionary  Development):
  
    -  Anahat   gereksinimleri  ile  başlangıç   sistemi  geliştirilir.
    -   Müşteri geribildirimi ile sistem pek çok versiyonla yavaş yavaş geliştirilir.
    -   Belirtim, geliştirme ve geçerleme aktiviteleri koşut zamanlı yapılır.
 
> Prototipleme (Prototyping):

    - Gereksinim      tanımlama  fazında  hızlıca  yapılan  kısmi gerçekleştirme.
    - Gereksinimler  netleştikçe  prototipi  düzeltme.
    - Müşteri  memnun  olana  kadar  düzeltmelere  devam  etme.

> Spiral Model:

    - Süreç  arka  arkaya  devam  eden  sıralı  aktiviteler  şeklinde gösterilmek  yerine  spira l şekilde  gösterilir.
   - Spiral  üzerindeki  her  bir  halka  bir  fazı  gösterir.
   -  Belirtim,  tasarım  gibi  kesin  fazlar  yoktur.
      -    Spiral' deki halkalar  neye  ihtiyaç  varsa  onu  gerçekleştirmek  için  seçilir.
   -  Süreç  boyunca  risklerin  değerlendirilmesi  ve çözümü  açık olarak  yapılır.


> Artımlı Geliştirme (Incremental Development):

   - Sistemi  tek  bir    parka  olarak  en  sonda   teslim  etmektense, sistem, her  biri  sistemin  ayrı  bir  istenen  işlevini  yerine getirecek artımlara (increments) bölünür.
  - Kullanıcı  gereksinimleri  önceliklendirilir, ve  yüksek  öncelikli gereksinimler  ilk  artımlar  arasında  gerçekleştirilir.
  - Bir  artımın  geliştirilmesine  geçilince  diğer  artımlar  için  gereksinim  gelişimi  devam  etse  bile  o artım  için  olan gereksinimler dondurulur.

> Çevik Model (Agile Method) :

   Çevik modelleme (Agile), yazılım sistemlerini etkili ve verimli bir şekilde modellemeye ve dokümantasyonunu yapmaya yönelik pratiğe dayalı yöntemlere verilen genel addır. Yazılım geliştirme amacıyla üretilen bu modelleme biçimi, kapsadığı değerler, prensipler ve pratikler sayesinde geleneksel modellemelere metotlarına göre yazılımlara daha esnek ve kullanışlı biçimde uygulanabilir.

  Aslında Agile bir proje yönetim biçimidir, proje geliştirirken direkt olarak agile kullanılmaz, bunun kolları (yani frameworkleri) kullanılır.

Agile ile hedeflenen asıl şey ise süreçleri etkin kullanarak hızlandırmak ve gerektiğinde bunları dokümante etmektir.

Agile Proje Yönetimi dediğimizde bilmemiz gereken; değişime açık olunması, takım içi iletişimin üst düzeyde olması, hızlı ve sürekli ürün teslimi, test odaklı anlayış, basit ve gerçekçi bir planlama olmalıdır.

Avantajları:
  • Ekip ruhu kazandırır
  • Planlama ve yürütme bir arada olduğu için sürdürülebilir kalite sağlar.
  • Ayrıntılı plan süreçleri yerine iteratif planlar (tekrar eden süreçler) uygulanır.
  • Müşteri ihtiyaçlarına uygunluk önemlidir, sık sık ürün çıktısı verilir ve müşteriden gelen geri bildirimlerle ihtiyaca uygun, doğru ürün çıkarılır.
Dezavantajları:
  • Kurumsal bir yapıda uygulamak için ciddi anlamda zorlanırsınız
  • Hedefler kısa vadeli olduğu için ekip üzerinde sonuç baskısı oluşabilir
  • Kısa süreli ürün teslimi sonucunda gelen geri bildirimlerle çalışma sürelerinin artması muhtemeldir
  • Dokümantasyon konusundaki bilinen birçok şeyin, tabiri caizse, “gereksiz” kılınması durumu vardır.

  Çevik yazılım sürecini bizzat kendim deneyimleyerek gördüm ve şimdi sizlerle ekip arkadaşımla yaptığımız projeden ve tecrübelerimizden bahsedeceğim.

 Öncelikle ilk toplantımızda (meeting)  proje konumuzu, hangi dilde geliştireceğimize karar kıldık. Projemiz olan Özel Organizasyonlar (doğum günü, yılbaşı, düğün vb.) için müşterilerin rezervasyon, paket seçme, ekleme gibi aktiviteleri yerine getirebileceği bir uygulamayı  Visiual Studio'da C# dilinde geliştirmeye karar verdik. Veri tabanı geliştirmesi için de MsSql'i tercih ettik.

  İkinci toplantımızda yazılımımız geliştirmek için yazılım mühendisliğinin süreçlerinden olan Agile metodunu kullanmayı uygun gördük. Bunu kullanmak için de Visual Stduio Online / Team Foundation Server (TFS)'yi seçtik. İlk iş olarak hesap açıp, takım lideri olarak ben ekip arkadaşımı projeye dahil ettim.


  Toplantımızın üçüncüsünde ise günlük olarak neler yapmamız gerektiğini belirledik. Planlar yapıp, haftalık hedefler koyduk. Tüm bunları da TFS'de biriktirim (backlog) olarak oluşturduk. Ve hangi işi kimin yapacağının atamasını gerçekleştirdik.

Backlog: 

 
Board:


Görev Ataması:
  
  Son toplantımızda artık kodlama işlemimiz bitmişti ve yavaş yavaş TFS'de kodlarımıza yer vermeye başlamıştık.

Code:

 Build:


Evet arkadaşlar bu yazımda sizlere yazılım mühendisliğini, çevik yazılımı ve kendi deneyimlerimi aktardım umarım sizlere yararlı olabilmişimdir. Keyifli günler...

1 yorum:

  1. Benjamin ile çalışmak kesinlikle harikaydı. Karıma ve bana kredi sürecinde rehberlik ederken son derece açık, titiz ve sabırlıydı. Ayrıca çok zamanında davrandı ve krediyi kapatmadan önce her şeyin hazır olduğundan emin olmak için çok çalıştı.
    Benjamin, yeni evimizi satın almak için para toplamamıza yardımcı olan bir grup yatırımcı ile çalışan bir kredi görevlisidir.Uygun düşük bir oranla kredi almak istiyorsanız onunla iletişime geçebilirsiniz. 247officedept@gmail.com Veya Whatsapp Sohbet: + 1-989-394-3740

    YanıtlaSil