10 Eylül 2004

Yazılımı Oluşturan Bileşenler Nelerdir?

Yazılımı oluşturan bileşenlerden daha önce söz etmiştik. Şimdi bu bileşenlerin neler oldukları üzerinde biraz duralım. Yazılımı oluşturan bileşenler = Mantık + Veri + Belge + İnsan + Program. Bu bileşenlerin az çok neler olduğunu, neleri kapsadığını biliyoruz ama biz yine de kıyısından köşesinden açıklayalım. Zaten bu yazıdaki asıl amaç yazılım bileşenlerinden belgelemenin yerini ve önemi (dökümantasyon) vurgulamak. Mantık = Yazılım herşeyden önce bir işin bilgisayar aracılığı ile yapılması amacına yöneliktir. Bu nedenle bilgisayarlaştırılmak istenen işin mevcut mantığı bir şekilde yazılıma da yansılıtılmak zorundadır. Veri = Her tür yazılım mutlaka bir veri üzerinde çalışmak durumundadır. Veri işlemeyen yazılımın geliştirilmesi söz konusu değildir. Söz konusu olan veri dış ortamdan alınabileceği gibi yazılımın içerisinde de üretilebilir. Zaten yazılımın temel amacı veriyi bilgiye dönüştürmektir. İnsan = Doğal olarak yazılımın insan bileşeni iki boyutludur. Yazılımı geliştirenler ve yazılımı kullananlar. Yazılımın düzgün bir şekilde çalışabilmesi için her iki insan kümesininde yeterli bir şekilde eğitim almış olmaları gerekir. Dünyanın en iyi programını yazmış olsanız dahi bu programı kullanacak insanlar yeterli eğitim seviyesine sahip değillerse "geçmiş olsun...." Program = Yazılımın ana çıktısı bir programdır. fazla söze ne hacet Belgelendirme = Diğer bileşenleri ister istemez yapmak zorundayız fakat belgelendirme bütün yazılım geliştirme yöntemlerinde var olan bir bileşen olmasına karşı programcılara genelde hep angarya bir iş olarak gözüktüğünden üzerinde fazla durulmaz. Türkiyede yazılım "genellikle" şu şekilde geliştirilir: 1-Yamalama Yeterince iyi planlanmamış, alt yapısı eksik yazılımlarda uygulanan yöntemdir. Yazılım kullanıcıya verilir, çok sayıda hatalar meydana çıkar ve bu hatalar yamalarla kapatılmaya çalışılır. Eğer yeterli belgelendirme yapılmamışsa "kaş yapayım derken göz çıkartırsınız" ve her şeyi elinize yüzünüze bulaştırıp olay mahalini terketmek zorunda kalırsınız. Sonuç = İşletme açısından hüsran. 2-Kahraman Asker Bi kahraman çıkar, projeyi sırtlanır ve belirli bir aşamaya getirir. Daha sonra kahramanımız askere gider ve proje biter. Çünkü kahramanlar angarya işleri sevmezler, belgelendirmeyi bırakın belkide kaynak kodda açıklama satırları bile yoktur. Sonuç = işletme açısından hüsran. 3-Usta/Çırak Bu yöntem de kahraman asker yöntemine oldukça benzer.Usta/Çırak ilişkisi ile geliştirilen projeler de yine kahramanımız projeyi belirli bir aşamaya getirir, daha sonra kahraman bu işten sıkılır veya bakım - onarım işlerine yetişemez olur kendine bi yardımcı alır. Oturur günde bir kaç saat çırağa bak şu şöle, bu böle burda şöle bi mantık kullandım eğer programın şöle yapmasını istiyosan x.ini dosyasına şu satırları eklemen gerek gibi bir eğitim verir ardından çırak büyür usta olur işler böyle devam eder gider veya çırak işten ayrılır usta başka birini bulur ona da aynı şeyleri anlatıp durur. Birgün usta ile çırağın kafası patrona bozulur usta/çırak gider proje yine biter. Sonuç = işletme açısından hüsran. İşletmelerdeki bu hüsranların sonuçlarının toplamı = Ülkemizde yazılım sektörünün dünya standartlarını yakalayamaması Çözüm ? Belgelendirme belgelendirmenin dezavantajları

  • Zaman kaybına neden olur(!)
  • Sıkıcı bir iştir
belgelendirmenin avantajları
  • Bakım maliyetlerini azaltır
  • Kaş yapayım derken göz çıkartmazsınız
  • Projenin yaşamı kimseye bağlı değildir. Futbolcular gelip geçer galatasaray yoluna devam eder...
  • Ve daha bir çok + sayılabilir.
Olayın önemini bir kaç büyük yazılım firmasının hazırlamış oldukları fizibilite raporlarını görünce anlamıştım. Ortada tek satır kod yoktu fakat programın ekran görüntülerinden tutun yazıcı çıktısına kadar herşey düşünülmüş ve belgelendirilmişti. o zamana kadar yardım dosyası hariç hiç bir belgelendirme yapmıyordum. "kaynak koda bakınca nasıl olsa ne yaptığımı anlarım" diyordum. yazılım geliştiren firmaların bu tür çalışmalar yaptığını görünce kendi kendime düşündüm. "ya ben çok zekiyim, ya bu firmadakiler çok aptal." cevabı bulmak fazla zor olmadı. aptal olan bendim "XXX bölümünde şu şu işlemler yapılmaktadır. ekran görüntüsü şu şekildedir. yazıcı çıktısı ise Ek A da yer alan 2091 nolu çıktı şeklinde olmalıdır." gibi xxx bölümünü her yönüyle anlatan bir döküman. kim gelirse gelsin yeterki programcı olsun. "al kardeşim şu belgelerde istenilen şeyleri yapman lazım" diyeceksiniz ve dökümanı programcıya verip işinizin başına döneceksiniz. Yıllar önce yazmış olduğunuz bir programda bazı sorunlar çıktı veya kullanıcılar bazı yeni özellikler istediler. aradan yıllar geçmiş, neyin ne olduğunu tam olarak çıkartamıyorsunuz, tablolardaki bazı alanların neyi temsil ettiğini unutmuşsunuz, hangi işlemde nereye hangi verileri yazmanız gerekiyordu, X fonksiyonunda yapacağınız bir değişiklik başka fonksiyonları etkileyebilir mi? hiç bir fikriniz yok. keşke zamanında bu işleri nasıl yaptığınızı, hangi değişkeni niye kullandığınızı, bazı karmaşık işlemleri zamanında nasıl bir mantıkla çözdüğünüzü anlatan bi döküman yazmış olsaydınız. işler nasılda kolay olacaktı. DipNot: Kaynak koda aldanmayın! Ankaradaki III.linux ve özgür yazılım şenliğine katıldığımda özgür yazılımcılarda şu izlenimin hakim olduğunu gördüm. "Evet belgelendirme önemlidir, yapılması lazımdır fakat bizim kaynak kodlarımız açık olduğundan biz belgelendirmeye fazla önem vermiyoruz -zaman ayıramıyoruz-. Takıldığımız bir husus olursa açıp kaynak koda bakıyoruz." 1-Eğer programcılık bizim mesleğimiz ise ne kadar sıkıcı olursa olsun belgelendirmeye zaman ayırmalıyız. Mesleğin eğlenceli kısımlarını yapıp sıkıcı olan kısımlarını yapmamak gibi bir lüksümüz yok. Kaldı ki belgelendirme bizim avantajımıza.... 2-Kaynak kod her şey demek değildir. Her yiğidin farklı bir yoğurt yiyiş şekli vardır ve herkes herkesin yazdığı kaynak kodu çok kolay bir şekilde anlayamayabilir. Evet kaynak koddan herşey anlaşılabilir fakat bu çok fazla bir zaman alır ve belgelendirme olmadığından gözden kaçırılacak ufak noktalar yazılımda telafisi mümkün olmayan hatalara davetiye çıkartabilir. Kaynak kod / belgelendirme arasındaki ilişkiyi -ne kadar doğrudur bilmiyorum- Kuran / Peygamber arasındaki ilişkiye benzetiyorum. Kaynak kod = Kuran Belgelendirme = Peygamber Kuranda "Namaz kılınız" diye bir emir vardır fakat namazı nasıl kılacağınız ile ilgili en ufak bir açıklama yoktur. Eğer peygamber olmasaydı her insan zamanının çok büyük bir kısmını "namazı nasıl kılmalıyım?" sorusunun cevabını aramakla geçirecekti ve bulduğu cevabın içinde de hataların olma olasılığı çok fazla olacaktı ama peygamber gibi bir kavram olduğundan bu sorunun cevabını çok kısa bir süre içerisinde ve hatasız olarak öğrenme şansımız var. aslında belgelendirmeyle ilgili yazacak daha bir çok neden bulunabilir ama benden bu kadar. diğer arkadaşların da bu konuyla ilgili bilgi ve tecrubelerini paylaşmalarını hep beraber bekliyoruz.... -yazıda hatalar varsa düzeltirseniz sevinirim...-

Yorum Gönder