1

Şirketlerde yazılım geliştirme organizasyonu

Herkese merhaba

Bu yazımda sizlere şirketlerde yazılım geliştirme aşmalarına , bu aşamalar da yaşayabileceğimiz olası durumlara ve kullanılan enstrümanlar hakkında bilgi vermeye çalışacağım.

Klasik yazılım geliştirme aşmalarına bir göz atalım;

Ön gereksinim ve analiz (Preliminary Investigation and Analysis) : Fikir ve yapılacak sistem hakkında ön araştırmaları kapsar.Bu aşamada fikrin veya projenin daha önce yapılıp yapılmadığı, yapılan projelerin incelenmesi,proje yönetimine dair fikirleri , teknik özelliklere dair araştırma ve analiz çalışmalarını içerir.Bir anlamda projenin fizibilite çalışmasıdır diyebiliriz.

Spesifikasyon ve gereksinim analizi (Specification and Requirement Analysis) : Bir önceki aşamada araştırılan ve fikir sahibi olunan konular doğrultusunda yapılacak sistem için teknik ve fonksiyonel özellikeler net  olarak belirlenir.Yapılacak proje için teknoloji seçimi,kullanılacak metodolojiler gibi teknik özelliklerin yanısıra bu teknolojileri kullanılarak sağlanacak sistemin fonksiyonel,işlevsel özellikleride ayrıntılı bir şekilde belirtilir.

Tasarım ve Mimari (Design and Architecture) : Projeye ait yazılım tasarımının ve mimari yapıların çizildiği ve belirlendiği aşamadır.Her proje birbiriyle uyumlu çok fazla teknoloji ve mimari yapının kompozisyonundan oluşur.Bu yapıları kod yazılmadan önce detaylı bir şekilde istenirse sınıf seviyesine kadar tasarlanması söz konusudur.Çeşitli modelleme araçlarıyla grafiksel olarak izlenilmesi sağlanır. Bir kaç modelleme aracı VS Architecture tool,SmartDraw,Visual Paradigm gibidir.

Geliştirme ve kodlama (Development and Coding) : Geliştirilen yazılım modeline göre kodların yazılması ve bunun sonucunda yazılım ürününün ortaya çıkması aşamasıdır.

Test ve Dökümantasyon (Testing and Documentation) : Projenin belirnen fonksiyonelliklere ve spesikasyonlara uygunluğu ve olası kullanıcı senaryonlarına göre yazılım test edilir ve hataların giderilmesi sağlanır.Bundan sonra son kullanıcı için ürünün teknik ve kullanım dökümantasyonu yapılır.

Kurulum ve Dağıtım (Implementation and Deployment) : Bu aşamda ürün haline gelen yazılımın çalışması için gereksinim duyduğu sistemi sağlayan ortamlar kurulur ve kodların bu ortamda çalışması sağlanır.

Bakım ve Onarım (Maintenance) : Kullanıcı tarafından belirtilen hatalar ya da sistematik olarak yazılım ekibinin yaptığı testler (Test otomasyonu) sonucunda oluşan hataların düzeltilmesi ve kullanıcı isteklerine göre yazılıma destek verilmesini kapsar.

Şu ana kadar bir yazılımın proje sürecinde gerçekleşen adımlarını inceledik.Bu adımlar aslında tüm yazılım projelerindeki aktivite adımlarıdır.Biz yazılımcılar bu sürecin yazılım geliştirme aşamasında yer alırız ve istenilen ya da bir çok teknik kararları belli olan bir projeyi hızlı bir şekilde kodlara dökeriz.Bu süreçte en az süreyi ve maliyeti kapsayan aşama aslında geliştirme aşmasıdır.Diğer taraftan en önemli ve maliyeti yüksek olan ise Bakım ve onarım safhasıdır.

Peki ya Şirketlerde bu safhalar nasıl işler ve ne gibi durumlar vardır ?

Yazılım geliştirme eskiden olduğu gibi bir sistem değildir en azından sadece sistem değildir. Yazılım geliştirme  teknik özellikleri olduğu için bir sistem, sosyal özellikleri olduğu için bir süreçtir.Yazılım sistemi bir süreçtir.Bu süreç tek bir kişi ile değil kollektif olarak gerçekleştirilir.Bu süreçteki en önemli varlık insandır.

Şirketlerde geliştirilen yazılımlar takımlar tarafında geliştilir ve ortak akıl oluşturulmaya çalışılır.Yukarıda kısaca bahsetmeye çalıştığım yazılım aşamalarının her birinde farklı görev ve sorumluluklarda kişiler çalışır.Proje yöneticileri,analistler, yazılım ve analist takım liderleri,yazılım mühendisleri,arayüz geliştiriciler,yazılım mimarları,ürün müdürü ve daha bir çok pozisyonu sayabiliriz.Bu kişiler arasındaki uyum ve iletişim proje geliştirme sürecini doğrudan etkiler.

Bu aşamda proje geliştirme sürecinde yer alan uzmanların durumunu anlatan bir karikatür paylaşmak istiyorum.

A9dNszaCEAAYpOs.png-large

Şirketler her zaman yoğundur !

Biz insanlar için özellikle de şirketler için zaman çok önemlidir.Şirket çalışanlarının zamanı iyi kullanarak sorumluluğu üzerine alması ve bilinçli bir şekilde davranması gerekir.Bu şekilde projelerin düzenli ilerlemesi kaçınılmazdır.Fakat şirket olarak sistemli bir süreç yapılandırılamadığı zaman şirket her zaman yoğundur ve acele ile bir çok proje gerçekleşir sonuçta kalitesiz ve düzgün test edilmemiş projeler ortaya çıkar ve günün kurtarılmasını sağlanmış olur.

Kurumsal şirketlerde  yazılımcılar için inovatiflik ve gelişim !

Bir çok sektör odaklı yazılım şirketleri için kendi yazılım alt yapılarını ve özel tasarlanmış frameworkleri geliştirmeleri kaçınılmaz.Bu frameworkler üzerine kurulu bir çok ürünün olduğunu düşünürsek yeni gelen teknolojilerin entegre edilmesi o kadar da kolay olmaya bilir şirket politikası gereği inovatif yaklaşıma sahip olunsa bile maliyetin yüksekliğinden yenilik kararları ertelenir.

Bu tür şirketlerde çalışan yazılım uzmanları belirli bir süre sonra körelmeye başlarlar.Çünkü şirket framework üne hakimdirler fakat gelişen yazılım teknolojisine ayak uydurmakda zorlanırlar.Şirketlerde proje anlayışı sıfırda bir proje yapımı değil olan ürün içeirisinde yeni fonksiyonelliklerin eklenmesi olarak düşünülebilir.Bu durumda yazılımcılar sektör bilgisi (örneğin finans sektöründe çalışıyorsanız bankacılık bilgisine) , kodların mimari yapısı , IDE nin etkili kullanımı , detaylı teknik bilgiler gibi konular üzerinde durarak şirket içerisinde kendisine daha yararlı bir davranış sergilemiş olur.

Bir çok genç yazılımcının yaptığı diğer bir davranış ise sürekli iş değiştirmektir.Bu yazılımcının gelişimi için çok yararlıdır.Böylece farklı farklı şirket yapıları, sistemler, projeler görür ve bu şeklide kendi fikir dünyasını genişlertir.

Şirketlerde yazılımcıların kariyer aşamaları ;

-Junior programmer (acemi yazılımcı) ; hata ayıklayıcı

– Senior programmer (usta yazılımcı) ; kod yazıcı

– designer (software architecture) ; kod tasarlayıcısı

Sunucular (Servers)

cycle of software development in corporate-3

Yazılım projeleri katmanlı yapıda tasarlanır bu şekilde projenin yapısına göre kodlar çeşitli özel sunuculara koyulur.

Database Server; uygulamanın veritabanının bulunduğu sunucudur.

Application Server; uygulamanın veri ile iletişimini sağlayan operasyon sınıflarının,varlık nesnelerinin servislerin bulunduğu sunucudur.

Web server; uygulamaya ait kullanıcı arayüzü projeleri bu sunucuda tutulur.

Yukarıda olası durumlara göre projenin dağılabilecek sunucu şekillerini gösterir.Genelde maliyet sebebiyle kendi geliştirdiğimiz uygulamalar için tek bir sunucu alır ve bu sunucu da uygulamaya ait bütün katmanların olmasını sağlarız.Fakat kurumsal firmalarda geliştirilen yazılımlar karmaşıklık gereği sunucu seviyesinde ayrıştırma yapılır.

Ortamlar (Environments)

cycle of software development in corporate-1

 

Ürüne ait ortamlar ürünün büyüklüğüne,yazılan sistemin önem derecesine, yazılım organizasyonunda yer alan kişilere göre çeşitlilik gösterir.Yukarıda ki şemada tek bir ürüne ait olası ortamlar gösterilmiştir.Bu ortamları kısaca açıklayalım.

Alfa ortamı : ürüne ait geliştirlen yazılım parçasının ilk versiyonunun test edilmesi için kullnılan ortamdır. Bu ortamda analistler ,testciler çalışır.Yazılım geliştiriciler geliştirdikleri bu kodları bu ortama taşıyarak(deployment) teste gönderirler

Beta ortamı : bu ortam proje istek sahibin (müşterinin) testinin yapıldığı, istenilen kriterlere göre yazılım gerçekleştirilip gerçekleştirilmediğinin ve hataların tespit edildiği ortamdır.

pre-prod ortamı : production öncesi son kontrollerin yapıldığı ve bu geliştirmenin sistemi etkileyip etkilemediğinin kontrolünün yapıldığı ortamdır.

prod ortamı : en tehlikeli ortam olduğunu söyleyerek başlamalıyım sanırım. Bu ortama taşınmış geliştirmeler artık son kullanıcı tarafında kullanılır. Burada oluşacak hata (ki burada hatanın dereceside önemli) şirkete karşı izlenimi ve kullanıcıyı etkileyeceği için çok önemlidir ve dikkatli deployment yapılması gerekir.

A59FADDCUAA8edb.jpg-large

Genelde biz yazılımcıların geliştirmesi kolay geçer ama production ortamı çok daha zorludur.

Taşımalar (Deployment)

cycle of software development in corporate-2

Deployment geliştirilen kodların ortamlara taşınma işlemidir.Yukarıdaki gibi bir yazılım geliştirme organizasyonu olan bir şirket için proje yapıyorsanız biraz zorlu olduğunu söyleyebiliriz.Geliştirdiğiniz projeye ait UI kodları,business operasyonlar ve veritabanındaki geliştirmelerin aynı zamanda istenilen ortama taşınması gerekir.Şirketler deployment için geliştirdikleri özel programlar aracılığıyla bu süreci daha kolay ve kontrollü hale getirirler. Sektörde var olan deployment çözümlerini kullanmak veya bu işlemi manuel olarak da gerçekleştirmek mümkündür.Yukarıdaki şemada görünen her kırmızı ok deployment adımını ifade eder.Production öncesi taşıma paket halinde production ortamına alınır.Artık bu ortamda geliştirdiğiniz yazılım gerçek veriler ile kullanılcaktır.

Sonuç olarak;

Uzunca anlattığımız şirketlerdeki yazılım geliştirme süreci her şirket ve ürün için faklılıklar gösterebileceğini söylemek gerekir.Bu sürecin iyi bir şeklide işlemesi için en önemli nokta aslında iletişim ve sonrasında yöneticiler ve geliştiriciler arasındaki uyum ve tecrübe ve denetim seviyesidir.Yöneticilerin bürokrasi odaklı düşünceleri ve yazılımcıların üretim odaklı düşüncesi çatışma halinde olmaması gerekir.

Şu da unutulmamalıdır ki ; Yazılım geliştirmeyi iş olarak yapmakla, bunu severek,tutkulu bir şekilde kendinizin yazılım geliştirmesi tamamen farklı şeylerdir.

iyi çalışmalar

 

 

 

Yunus Emre Keskin

One Comment

Bir Cevap Yazın