Pazar, Aralık 04, 2005

Yazılım Projelerinde Rol Dağılımı

Yazılım Projelerinde Rol Dağılımı


Bu yazımda küçük-orta ölçekli bir proje ekibindeki rollere ve bu rollerin sorumluluk alanlarına değinmeye çalışacağım.

Rolleri aşağıdaki şekilde kısaca özetleyebiliriz.

1) Proje yöneticisi
2) Analist/Çözümleyici
3) Mimar- teknik lider
4) Yazılım geliştirici
5) Test/Kalite Kontrol

1) Proje yöneticisi

Proje yöneticisinin görevi projenin önüne çıkan engelleri ortadan kaldırmak ve ekibin verimli çalışması, projenin zamanında teslimi için gerekli ortamı sağlamak, önlemleri almaktır. Örneğin teknik bir konuda ekibe dışardan yardım gerekiyorsa bu yardımı sağlamak, bir danışman tutmak proje yöneticisinin işidir. Ekibin kullandığı bilgisayar, yazılım geliştirme ortamındaki sorunların hızlı şekilde çözülmesini saglamak gene proje yöneticisinin işlevine örnek gösterilebilir. Proje yöneticisi aynı zamanda kritik kararları almakta da öncu rol oynar. Yazılımda kritik bir hata varsa yayım(release) tarihinin ertelenmesi buna örnek gösterilebilir. Bu örneklerden anlaşılabileceği üzere herşeyin yolunda gittiği bir projede proje yöneticisinin işlevi çok görünür değildir.

Proje yöneticisinin görevi yapılacak işleri küçük parçalara ayırıp daha sonra bunların zamanında bitirildiğini takip etmek değildir(Micromanagement). Bu tür yönetim tarzının günümüzde artık yeri yoktur. Yönetici ekibine güvenmeli, ekipe kararlar alabilmesi ve durumlara adapte olabilmesi için gerekli yetkiyi tanımalıdır (Empowerement of the team).


2) Analist/Çözümleyici

Çözümleyicinin görevi kullanıcı/müşteri grubuyla görüşerek iş gereksinimlerini (business requirements) i almaktır. Çözümleyiciler kullanıcı/müşteri ile ekibin diğer rolleri arasında(proxy) görev yapar. Ekip içinde müşteriyi çözümleyiciler temsil eder. Çözümleyici müşteri ile iletişim içindedir yazılım geliştiricilerin gereksinimler hakkında sordukları soruları en hızlı şekilde cevaplamaya çalışır. Cevaplayamadığı soruların cevabını müşteriye giderek bulur. Müşteriden aldığı bilgileri yazılım geliştiricilerin anlayabileceği formata çevirmek gene çözümleyicinin işidir. Çözümleyicinin kullandığı format kullanılan sürece bağlı olarak değişebilir. Örneğin XP de bu format hikaye kartları, RUP gibi bir süreçte kullanım senaryosu(use case dokümani) , Şelale gibi bir süreçte ise uzun bir doküman şeklinde olabilir.

Günümüzde Çözümleyici/ tasarımcı (Analist/Tasarımcı) gibi tanımlamalara rastlamak mümkün. Böyle bir rol tanımı bence çok büyük bir hata olur. Çözümleyiciler yapılan işin alan(domain) bilgisine sahip olmalidir ve yapılan projeyi kullanıcı/müşteri bakış açısından görebilen bir kafa yapısı ve yetenek gerektirir. Tasarım ise uygulamaya , yazılan koda yakın olmayı ve yuksek teknik bilgi seviyesi gerektirir. Uygulamanın tasarımından çözümleyici rolü sorumlu olmamalıdır.

Çözümleyici grubu proje ekibi küçükse QA/Test, Proje yöneticisi gibi rolleri de üstüne alabilir fakat Tasarım,Teknik liderlik, Yazılım geliştirici gibi roller başka ekip uyeleri tarafından yerine getirilmelidir.

3) Mimar- teknik lider

Yazılım mimarisi kısaca yazılımı oluşturan önemli/büyük bileşenler ve bunların organizasyonu, birbirleri ile iletişimleri ile ilgilidir. Bu mimari üzerine yazılım iş gereksinimleri tatmin edecek şekilde bina edilir. Mimarı aynı zamanda operasyonel performans gibi gereksinimleri de tatmin etmelidir. Mimar/teknik lider tıpkı diğer yazılım geliştiriciler gibi kod yazar fakat ayni zamanda genel mimarı ile ilgili kararları almaktan, tasarım çalışmalarında liderlik yapmaktan sorumludur. Mimar/teknik lider teknik işlerin zamanında ilerlemesinden proje yöneticisine karşı sorumludur. Bu açılardan değerlendirildiğinde mimar/teknik lideri diğer yazılım geliştiriclere göre yüksek teknik bilgiye sahip ve bu işlerden yöneticiye karşı sorumlu bir rol olarak görmek mümkündür.

4)Yazılım geliştirici

Yazılım geliştirici kodun tasarlanması ve yazılmasından sorumludur. Burada dikkat edileceği üzere tasarım ve kodun yazılmasını birbirinden ayırıp ayrı rollere yüklemedim. Bunun nedeni kodun tasarımı hazırlayan insan tarafından yazılması gerektiğine inanmamdan kaynaklanıyor. Günümüzde her ne kadar modelleme dilleri geçerlilik kazanmış olursa olsun, kodun yazımı sırasında her zaman tasarımda öngörülemeyen noktalar ortaya çıkacaktir. Diğer bir deyişle kodlama tasarımı etkileyecektir. Tasarım yazılım geliştiricilerin ve mimarın içinde bulunduğu bir ekip aktivitesi haline getirilebilir fakat tasarımcı , programcı gibi bir ayrıma gidilmemelidir.
Bu tür ayrımlara gidilmesinin kaynağında programcılığı ucuz bir kaynak haline getirme çabaları olduğunu düşünüyorum. Tasarımcı ile programcının ayrı rollere bölündüğü durumlarda iyi bir tasarım olduktan sonra düşük seviyede bir programcıda olsa bu tasarımı koda çevirmek kolay gibi çok ama çok yanlış bir mantığa rastlamak mümkün Diğer bir nokta tasarımcılarla ilgili. Tasarım yapılırken yüksek teknik bilgiye sahip olmak gerekli fakat tasarımcı ile programcı rolleri birbirinden ayrılırsa tasarımcı zamanla teknik bilgi seviyesini kaybedecek ve kaliteli tasarımlar üretmekten uzaklaşacaktir.

Projenin gereksinimlerine bağlı olarak yazılım geliştiriciler UI, Veritabani, Uygulama,Rapor geliştiricisi gibi rollere ayrılabilir.

5)Test/Kalite Kontrol

Test/Kalite Kontrol rolü kullanıcının bakış açısıyla yazılımı test etmekten sorumludur. Küçük projelerde bu rolü Analistler üstlenebilir fakat Test/Kalite Kontrol rolü hiçbir şekilde yazılımı geliştiren insanlara yaptırılmamalıdır. Kodun o kodu yazan insan tarafından test edilmemesi ve kullanıcı bakış açısıyla test edilmesi çok önemlidir. Yazılım geliştirici
yazılımı bu bakış açısından görmekte zorlanacaktir. Test/Kalite Kontrol test senaryolarını hazırlar gerekirse Rational Robot, Fit gibi programlar yardımıyla bizzat kod yazarak otomatik fonksiyonel testleri gerçekleştirir. Kullanici kabul testlerini koordine eder.

Türkiye de çoğu projede QA/Test rolünün es geçildiğini söylemek yalan olmaz. Bu testleri son kullanıcıya yaptırmak sanırım en çok rastlanılan durumlardan biri. Bir diğer problemde zaman darlığına giren projelerin çoğunun test aşamalarından zaman kısmaları. Sonuç olarak hatalarla dolu yazılımlarla karşılaşıyoruz.

Test/Kalite Kontrol rolünü kısmen teknik bilgi gerektiren(programcının yapabileceği hataları tahmin etmek açısından faydalı olacaktir) ve iş gereksinimleri anlayan, kullanıcı/müşteri gibi düşünebilen bir rol olarak görüyorum ve en az yazılım geliştiriciler kadar önemli olduğunu düşünüyorum. Umarım verilen iş ilanlarında gelecekte Test/Kalite Kontrol gibi ayrımları daha fazla görebiliriz.

Bu yazımda küçük/orta ölçekli bir projede çekirdek rol tanımları nasıl olmalı açıklamaya çalıştım. Proje büyüdükçe roller özelleşecektir ve yeni rol tanımları gerekecektir. Bunlara örnek vermek gerekirse

Kullanıcı arayüzü(UI) tasarımcısı ,
Kullanılabilirlik (usability) testcisi
Teknik yazar (dokümantasyon, yardım dosyaları),

Kurulum/Yayım mühendisı( kurulum işlemleri, konfigürasyon/versiyon yönetimi)
Rapor tasarımcısı
Sistem mimarı (hardware mimarisi)

gibi yeni roller eklenebilir.

Yorum ve eleştirilerinizi lütfen bana iletiniz.

Yazar:

Cenk Civici
Yazılım mühendisı

Kaynak Site: İsmail KIRBAŞ ile Web Sitesi Tasarımı Sitesi

Hiç yorum yok: