Bilgisayar Mühendisliğinin ilgi alanına geri dönersek:

Bilgisayar Biliminin alt alanlarının uzmanlaşmış mühendisliği bir yazılım ürününün sağlıklı üretilmesi için yeterli olmamaktadır. Alt alan mühendisliğine ek olarak bir yazılım üretiyor olmanın sorunları ile uğraşan, üretime ve ürüne ilişkin kalite ölçütleri belirleyen, bu doğrultuda üretim yöntemleri saptayan bir 'üst' mühendisliğe gereksinim vardır. Bu gerçeği yazılım sektörü ve onun müşterileri geçen 30-40 yıl içinde (bazen çok acı olan) deneyimlerle öğrenmişlerdir. Yazılım üretmeye yönelik bu 'şemsiye' mühendisliğe 'Yazılım Mühendisliği' denmektedir. Dolayısı ile Yazılım Mühendisliğini 'Bilgisayar Bilimi teorik öğretilerinin pratik uygulamalarının mühendisliği' olarak algılamak yanlıştır. Yazılım Mühendisliği bu değildir.

Yazılım Mühendisliği, eldeki kaynak kısıtlarını gözeterek, yüksek kalitede yazılım üretmenin gerekleri olan sağlıklı mühendislik usullerinin ve iyi yönetim pratiğinin oluşturulması ve bunların uygulanmasıdır. Yazılım kalitesinin ne olduğunun somut biçimde betimlenmesi de bu disiplinin doğrudan ilgi alanındadır.

Bilgisayar Mühendisliği bir yazılım üretim sürecinde gözetilmesi gereken usulleri belirler. Bu dört süreç şunlardır:

*Sipariş sahibi ile yapılacak görüşmeler sonucunda ihtiyacın belirlenmesi.
*Tasarımın yapılması.
*Yazılımın yazılması.
*Yazılım ürününün test ve bakım.

Bu dört evreyi genel hatları ile Bilgisayar Mühendisinin işlevi bakımından şöyle özetleyebiliriz:

Sipariş sahibi ile yapılacak görüşmeler sonucunda ihtiyacın belirlenmesi:
Bir olurluk-fiyat analizi ile başlayan bu süreçte müşterinin ihtiyacının ne olduğu ve bütçesinin çerçevesinde nasıl yazılım çözümleri üretilebileceği irdelenir. Bu süreç çok yoğun müşteri ile ilişki gerektirmektedir. Pek çok müşteri, bilgisayarlar konusunda en temel bilgiden bile yoksundur. Bundan ötürü Yazılım Mühendisini çok kolaylıkla yanlış noktalara yöneltir. Örneğin bir mal sevkiyatının otomasyonunda şöyle bir diyalog, çok olasıdır:

Y.M.: Peki, bu depodan günde ortalama kaç sipariş sevk edilir?
Müşteri: Hiç belli olmaz ki, hep değişir!
Y.M.: En fazla kaç olur?
Müşteri: 5 de olduğu olur, bazen 500 de olur.
Y.M.: Peki burada kaç eleman yükleme yapıyor?
Müşteri: 2.
Y.M.: 500 siparişi 2 adam nasıl yüklüyor peki?
Müşteri: Beyim, o zaten kırk yılda bir olur, o zaman da siparişler bir iki gün gecikir haliylen!

Yazılım Mühendisi için belli ki çok kritik olan ortalama sipariş adedi bilgisini, gördüğünüz üzere, doğrudan öğrenmek olanaklı olmadı. Yazılım Mühendisi bunu yeteği ile buldu, çıkardı. Her zaman da şans böyle yaver gitmeyecektir.

Dolayısıyle bir Yazılım Mühendisinin:

*zeki olması,
*sosyal iletişim yeteneğinin çok yüksek olması,
*titiz olması

gerekir. Bunlardan birisindeki bir eksiklik sonradan gecikmeler, milyarlık zararlar, davalar, kötü ün olarak geri döner. Yeri gelmişken şunu da belirtelim:
Genel kanının aksine Yazılım Mühendisi gününü (gecesini) bilgisayar karşısında geçiren, çoğunlukla karikatürize edildiği üzere sosyal iletişim özürlüsü, garip bir dille konuştuğu için ne dediği bir türlü anlaşılamayan bir kişi hiç değildir.
Bu durumdaki kişi yukarıda anılan nedenlerden ötürü kaybetmeye mahkumdur, genel profil de hiç böyle değildir zaten. Bu bakımlardan Yazılım Mühendisliğinin pek benzeri Endüstri Mühendisliğidir. Hatta denebilir ki Yazılım Mühendisinin iletişimde olması gerekebileceği kesim bir Endüstri Mühendisininkinden daha yaygındır ve muhatap olacağı müşterinin kendi terimlerine (Yazılım Mühendisinin) vakıf olması ise daha az olasılıktadır.

Bu aşamanın sonunda üretilen karşılıklı bağıtlanan (üzerinde anlaşmaya varılıp imzalan) ihtiyaca cevap verecek ürünün (yapacakları ve yapmayacakları ile) tarif edildiği bir dökümandır.

Tasarımın yapılması:
Bu aşama mühendisliğin teknik (ve anlaşılmaz) boyutunun devreye girdiği aşamadır. Gerekli bilgileri müşteriden almış olan Yazılım Mühendisi (olasılık ekibi ile) kapanıp talep edilen ve üzerinde anlaşılmış sistemin tasarımını yapacaktır. Nasıl İnşaat Mühendisliğinin proje çizim yöntemi, Elektronik Mühendisliğinin elektronik devre çizim yöntemi, Makina Mühendisliğinin teknik resim çizim yöntemi varsa Bilgisayar Mühendisliğinin de kendine özgü bir tasarımı belgeleme (denotation) yöntemi vardır. Ve nasıl Bir Makina Mühendisi elektronik devre şemasından birşey anlamaz ise diğer tüm mühendislikler de Bilgisayar Mühendisliğinin bu belge ve çizimlerinden birşey anlamaz. Bu belgelerde işin hangi işlevsel modüllere, nasıl bölüneceği, modüllerin birbirleri ile ilişkileri, veri depoları, veri akışları, veri dönüşümleri, veri türleri gösterilir. Nasıl üç odalı, bir mutfaklı ve iki tuvaletli bir daireyi iki İnşaat Mühendisinin (veya Mimarın) farklı farklı tasarlaması olanaklı ise yazılımın tasarımı da farklı farklı ve buna bağlı olarak da başarılı/başarısız olabilir. Teknik deneyim ve ustalığın kendisini göstereceği en önemli aşamalardan birisidir tasarım. Bu tasarım evresinde de kimse sipariş edilen yazılımı 'yazmak' (biz buna kodlamak diyoruz) amacı ile bilgisayar başına oturmayacaktır. Bu, daha planı yapmadan inşaata girişmeye benzerdi ve aynen böyle bir inşaat nasıl çökmeye mahkum ise, tasarım evresi profesyonel usullere uygun yapılmamış bir yazılım da feci biçimde çökmeye mahkumdur.

Bu evrede, günümüzde artan biçimde, Yazılım Mühendisleri bu tasarımları belgelemek için özel bilgisayar prgramlarından yararlanmaktadırlar. Piyasada bulunan Yazılım Mühendisliği paketleri Yazılım Mühendisinin tasarımını yapması ve belgelemesinde yardımcı araç görevi yapmaktadır. Aynen bir Elektronik Mühendisinin yarattığı devreyi çizmesine yardımcı olan devre çizim programları veya bir İnşaat Mühendisinin bina planının çizdiği halk arasında Autocad programı olarak bilinen programlardır bunlar. Gerçekte Bilgisayar Mühendisi (diğer mühendisliklerde de olduğu üzere) bu programlar olmaksızın da tasarımını yapabilir.
Tasarım evresinin sonunda üretilen bir 'Tasarım Dökümanı' dır. Ve belirtildiği üzere ancak ancak konunun profesyonellerince anlaşılabilecek özelliktedir.
Yazılımın yazılması:
Sıkı durun, beklentinizin aksine olduğunu tahmin ettiğimiz, çarpıcı bir gerçek geliyor:
Gerçek profesyonellikte yazılımın fiilen yazılması Yazılım Mühendislerince yapılmaz.

Bu aynen planı çizilmiş bir inşaatın İnşaat Mühendislerince harç karılarak, kalıp çakılarak, kazma kürekle inşaa edilmesine, veya tasarımı yapılıp şeması çizilmiş yeni televizyonun üretim hattında bir Elektronik Mühendisinin lehim yapmasına benzer. Bu aşama aslında 'programcı' olarak adlandırılan, kendi başına tasarım yapacak bilgisi olmayan ancak yapılmış bir tasarım dökümanına bakarak yazılımı yazabilecek elemanlarca gerçekleştirilir. Bu 'programcıların' 'kodlamaları' da aynen bir inşaat sahasındaki şantiye mühendisinin inşaatın yapılmasını her aşamada denetim altında tutması gibi bir Yazılım Mühendisi tarafında sıkı biçimde denetlenir. Hatasızlığı kontrol edilir. Yeri gelmişken bir gerçeğin altını çizip, genel bir yanlış kanıyı düzeltelim:
Yazılım Mühendisliği yoğun bilgisayar kullanımı gerektiren, kişinin hayatını program yazarak geçirdiği bir meslek değildir.

Ülkemizdeki durum:
Ülkemiz yazılım üretimi konusunda ne yazık ki daha tam profesyonelleşememiştir. Eksiklik, gerekli kadroların ve iş gücünün oluşmasıdadır. Yazılım Mühendisi sayımızda azlık olduğu gibi, bu disiplinin ara elemanı durumunda olan 'programcı' sayısı ihtiyacın çok çok altındadır. Pek az üniversitede 2 yıllık 'programcılık' eğitimi verilmektedir. Kaldı ki 'programcılık' üniversite çatısı altında olmaktan çok 'meslek yüksek okulu' çatısı altında yer alması gereken bir meslek eğitimidir. (Profesyonel) 'programcı' boşluğu ne yazık ki ülkemizin bir gerçeği olarak iki kaynaktan doldurulmaktadır:

1.Kendini hasbel kader programcılık alanında (kısmen) yetiştirmiş, halk deyimi ile 'alaylı' farklı disiplerin insanları. Bu kişiler genellikle ufak programlar yazmışlar, hatta bir denetim mekanizması da olmadığından bunları satabilmişlerdir de. Bununla edindikleri öz güven kendilerine 'kendinden menkul' programcı sıfatı yakıştırmalarına neden olmuştur. Bu kategorideki kişiler evvelki bölümde anlatılan 'tasarım dökümanlarını' çözümlemek konusunda eğitim almamışlardır. Ayrıca, yılların deneyimi ile elde edilmiş, yazılım 'kodlama' nın kurallarından da pek haberli değildirler. Her boyutta 'alaylı' iş görürler.
2.Diğer grup, ne yazık ki Yazılım Mühendislerinin kendileridir. (1) gruptan kişilerle acı deneyimler yaşamış ihtiyaç sahiplerinden imkanı olanları (büyük yazılım şirketleri, parasal kısıtı az olan bankalar, holdingler,…) Yazılım Mühendislerine dönüp, 'kodlama' evresinin de onların tarafından gerçekleştirilmesini istemektedirler. Bu durum belki Yazılım Mühendisinin piyasa ederini ülkemizde artırmakta ancak öte yandan onların (yüksek ücretler karşılığında) yeteneklerine göre düşük kalitede bir iş yapmalarına ve sıkıntı duymalarına neden olmaktadır. Bu, ülkemiz Yazılım Mühendisleri arasında yaygın bir yakınma konusudur. Patlayan bilgisayarlaşma talebinin bir sonucu olarak önümüzdeki on yıl içerisinde ülkemizde bu sorunun çözülmesi ve dengelerin daha sağlıklı olarak oluşması beklenmektedir.

Yazılım ürününün test ve bakım:
Bir yazılım üretim süreci çeşitli aşamalarda test evreleri içerir. Bu gerek 'kodlanan' modüllerin işlevlerini yerine getirip getirmedikleri, gerekse de tasarım parametrelerinin uç değerlerindeki tavırları ve dayanıklılıklarına ilişkindir. Ayrıca birleşince tüm yazılım sistemini oluşturacak olan bu modüllerin birleştirilme işlemi de hatalar içerebilmektedir. Dolayısıyle tüm sistem bütensellik bakımından da testlere tabi tutulur. Bütün bu test işlemleri deneyim,ciddiyet ve tititzlik gerektirir. Bu evrede Yazılım Mühendisleri ve deneyimli 'programcılardan' oluşmuş olan bir ekip yer alır. Bu ekibin 'yazılımı kodlayan' ekipten tümüyle farklı olması ve yalnızca 'ihtiyacın tarif edildiği' dökümanı ve 'tasarım dökümanını' kriter olarak alması esastır. Bu aşama üretilen yazılımın test edilmesi amacı ile bilgisayar başında geçen bir evredir.
Bakım, ürünün tesliminden ve kabulünün yapılmasında sonraki zaman dilimlerinde keşfedilecek yazılım bozukluklarının (hep hiç olmaması dilenir, ancak hiç bir zaman hata sıfır olmaz) onarılması ve/veya gereksinimlerdeki değişim veya ek gereksinimlerin doğması dolayısıyle yazılımda yapılacak değişiklikleri içerir. Bu aşama da Yazılım Mühendisinin denetimindedir.

Hiç yorum yok: