Yazılım Organizasyonu ve Geliştirme Süreçleri

  • 19 Mart 2018

İyi bir yazılım, yaşayan bir organizmadan farksız bir yaşam döngüsü içinde hareket etmelidir. Sorunlara karşı esnek olmak yazılımın yaşam süresini artırır. İyi yazılım, son halini alana kadar birçok evreden geçer ve bu evreleri sürekli tekrarlamalıdır. Bu evreleri doğru ve etkili şekilde organize etmek yazılımı başarıya götürür.

Bir yazılımın geliştirilmeye başladıktan sonra sonuca ulaşana kadar ki geçen süreler bu organizasyona dahildir. Yazılımın her aşaması aslında sadece bir proje gibi görülebilir. Öyle bir çağda yaşıyoruz ki yazılımsız hiçbir işin yürümesi mümkün değildir. En basitinden mahalledeki marketlerden, büyük şirketlere kadar uzayıp gider bu yol.

Her projede olduğu gibi yazılım projelerinde de sistematik çalışmak en önemli unsurlardan biridir. Sistemi oluşturan süreçlerin herhangi birinde oluşacak aksama tüm süreçleri etkiler. Bu süreçleri doğru organize edebilmek için yazılım geliştirme modellerinden faydalanabiliriz. Birçok yazılım geliştirme modeli kullanılmaktadır. Bunlardan bazıları;

  1. Çevik Modeller (Agile models: Scrum, Kanban)
  2. Şelale Modeli (Waterfall Model)
  3. Kodla ve Düzelt (Code and Fix)
  4. V Modeli (V-shaped Model)
  5. Evrimsel Geliştirme (Evolutionary Development)
  6. Prototipleme (Prototyping)
  7. Spiral Model
  8. Formal Sistem Geliştirme (Formal System Development)
  9. Yeniden kullanıma yönelik geliştirme (Re-use based development)
  10. Artımlı Geliştirme (Incremental Development)
  11. Birleşik Süreç (Unified Process)

Günümüzde en çok kullanılan ve popüler olanlar Agile Software Development (Çevik Yazılım Geliştirme), Waterfall (Şelale) olarak ele alınabilir.

Şimdi klasik yazılım geliştirme aşamalarına göz atalım.

Ön gereksinim ve analiz (Preliminary Investigation and Analysis)

Bu aşamada fikir bulunur, geliştirilecek sistem hakkında ön araştırmalar yapılır. Daha önce böyle bir projenin yapılıp yapılmadığına bakılır, yapılmış bir proje var ise eğer incelenir. Teknik özellikler baz alınarak analizler yapılır. Bir anlamda projenin yapılana bilirliği bu aşamada ince ince test edilir.

Yazılımın en temel amacı bir ihtiyacı gidermek veya sorunu çözmektir. Projenin ihtiyaç duyduğu en temel ihtiyaçlar analiz edilmeli ve detaylandırılmalıdır. Projenin amacı dışında yada teslim edilmesini geciktirecek istekler bir sonraki faza bırakılabilir.
Spesifikasyon ve gereksinim analizi (Specification and Requirement Analysis)

Fikri bulduk her şey tamam şimdi bu projede ilerleme kaydetmemiz için bize ne lazım? Bize lazım olan teknolojileri gereksinim duyduğumuz araçları burada tespit edeceğiz. Bu aşamada teknik sel olarak geliştirilecek sisteminde bir ön analizi çıkarılmalıdır.
Tasarım ve Mimari (Design and Architecture)

Kodlanacak yazılımın mimari yapıları, kodlanma tasarımı bu aşamada planlanır. Son teknoloji modelleme uygulamaları ile yazılımda nasıl bir yol izleneceği dökümanlar halinde oluşturulur.Sonraki aşamalarda hata yapmamak için bu aşamanın ciddiyeti oldukça fazladır.

Geliştirme ve kodlama (Development and Coding)

Evet, her şeyi tamamladık şimdiki olayımız yazılımı geliştirme aşaması. Yazılım modelini oluşturmuştuk şimdi o planlama dokümantasyonuna göre kodlama yapıyoruz. Planlama işlemi başarılı bir şekilde oluştuysa eğer, bu aşama güzel bir şekilde sonuçlanacaktır. Projemizde, yazılımımız kodlanma bittikten ortaya çıkacak. Ekibimiz varını yoğunu ortaya koyacak, müşterilerimin ihtiyaçlarını karşılamak için çokça çalışacaklardır. Yazılım mühendislerinin projeyi geliştirmeye başladığı süreçtir. Başlamadan önce geliştiriciler arasında mutlaka mimari ve geliştirme aşamaları ile ilgili standartlar belirlenmelidir (İsimlendirme standartları, yorum satırı kullanımları, tekrar eden kodlar, if koşul blokları, aşırı benzer işlevler, uzun metotlar vb.)
Test ve Dokümantasyon (Testing and Documentation)

Yazılımdaki olası hatalar test edilerek burada ortaya çıkarılarak, yayınlanmadan önce bu aşamada düzeltilecektir. Artık son kullanıcılar ilgi odağımız olmuş konumda. Ürünümüzün teknik ve kullanım senaryolarını oluşturuyoruz. Test yazılım geliştirme sürecinin ayrılmaz bir parçasıdır. Test odaklı geliştirme yapmak uygulamanın sağlamlığı ve devamlılığı için vazgeçilmez bir yöntemdir. Birim test, fonksiyonel test, entegrasyon testi gibi test tipleri projenin olası hatalarını önceden görmemizi sağlar. Yayımlama sonrası hataları en aza indirir zaman, para ve itibar kayıplarını önler. Sorunların analizi ve geliştirme sürecinin ardından yazılımın doğru çıktı üretip üretmediğinin kontrolünün yapıldığı aşamadır. Birçok test yöntemi vardır. Bunlardan en çok kullanılan güvenlik ve stres testlerini ele alabiliriz. Güvenlik testleri ile yayımlanma sürecinin ardından oluşabilecek maddi kayıp ve itibar kayıplarının önüne geçilmeye çalışılır. Stres testleri ise yazılımın kullanıcı ile buluştuğunda oluşabilecek sorunları önceden görerek önlem almamızı sağlar.

Kurulum ve Dağıtım (Implementation and Deployment)

Yazılımı geliştirdik, son testlerimizi yaptık şimdi çalışacağı ortamı ayarlayacağız. Öyle bir sistem oluşturulmalı ki, kodlanan yazılımın olası bir hatada patlamaması önlenmelidir. Kullanıcılar açısından düşünürsek, hiçbirimiz sorunlu bir yazılımı kullanmak istemeyiz, olası bir sorun olduğunda o yazılımı silip bir köşeye atarız ve geçirilen onlarca aşama çöp olur. Kullanıcılarımızın düşünceleri bizler için çok önemlidir, o yüzden sürekli geri dönüş almalıyız, eksiklikleri tamamlayız. Her şeyi tamamladık uzunca bir süreyi bitirdik kurulumları yaptık. Şimdiki süreç dağıtım süreci bir nevi pazarlama ve reklam aşaması. İlgi çekici, kullanılabilir ve ihtiyaçları karşılayıcı bir sistem oluşturduysak eğer başarılı olacağız demektir bu. Olamazsak bile iyi ya da kötü bir tecrübe yaşamış olacağız. Bu aşama aynı zamanda “Yayımlama” olarak adlandırılabilir. Yayımlama geliştirilen kodun test edildikten sonra kullanıcıya ulaştırılma sürecidir. Yukarıdaki aşamaların başarıyla oluşmasından sonra gerçekleşir. Yayımlama sürecinin kısa ve hızlı olması oluşabilecek sorunlara karşı hızlı çözüm üretmek ve kullanıcıya olabildiğinde en sağlıklı sürümü ulaştırabilmek için önemlidir.
Bakım ve Onarım (Maintenance)

Artık kullanıcı isteklerine göre hareket edeceğiz, olası hataları düzelteceğiz ve onaracağız. Yazılım ekibimiz ise uygulamamız yayınlandıktan sonra testlere devam edecek, sorunları bulup gerekli geliştirmeleri yapacaktır. Bakım ve onarım aşaması biraz maliyetli geçebilir. Her şeyi tamamladık, projemizi bitirdik, bu aşamaya kadar olan maliyetleri de es geçemeyiz. Ondan dolayıdır ki; bu aşamada yapılan maliyetler yazılımın sürekliliğini sağlayacak bir ortamı oluşturacaktır. Yazılım ekiplere en büyük destek son kullanıcılardan gelmektedir.

Çünkü en iyi testleri son kullanıcılar yapmaktadır. Bu sayede yazılımlar daha sağlıklı ve son kullanıcıya uyumlu hale gelmektedir. Birçok projede olduğu gibi yazılım projeleri içinde bakım önemli bir husustur. Geliştirme ve test aşamalarında yakalayamadığımız hatalar kullanıcı ile buluşmuş olabilir. Bu durumlarda yukarıdaki süreçleri tekrar etmek kullanıcıya hatasız bir sürüm için harcanan süreçtir. Sürecin uzunluğu oluşan sorunun mimaride yada basit kod hatalarında olup olmamasına göre değişir.

En sağlıklı ve başarılı yazılım süreçleri proje yöneticisinin ve tüm ekiplerin ortak, sistematik çalışması ve iyi bir iletişim kanalının oluşturarak çalışması ile gerçekleşir.

Comments are closed.