Niçin Yazılım?

Yazar Semih Bilgen 'e teşekkürler. Çok değerli bir kaynak.


Basım yılı 1992 olan bu değerli kaynağı nadirkitap.com 'dan aldım.  Bunlar da benim notlarım..

  • Yazılım geliştirmenin bir zanaat mı yoksa mühendislik dalı mı olduğu henüz kesin değildir.
  • Geleneksel olarak bilgi işlem bir uzmanlık işi olagelmiştir. Pek tanınmayan, korkulan bir yerdi 1970 'lerin bilgi işlem merkezleri.. Çoğunlukla camı ve kilitli kapılar ardında, kullanıcıların bazı isteklerinin inanılmaz bir hız ve güvenle karşılayan, bazen de "sistem arızalı", "program bunu yapamaz" diye kestirip atan uzmanlara hayranlık, gıpta ve öfkenin birlikte duyumsandığı bir canavar ini..
  • "Yazılım tasarımının kolaylaşacağını, hataların ortadan kalkacağını düşünenler esaslı sorunlarla uğraşmamışlardır." David Lorge Parnas, 1985.

Bilişim Nedir?

Günümüzün iletişim teknolojisinin temelleri Morse, Bell gibi 19. yüzyıl mucitlerince atılmıştır. Telgraf ve telefonu radyo, sonra televizyon izlemiştir.

Bilgisayar teknolojisi ise 1940 'lı yıllarda savaşın itmesiyle başlayan çalışmalarda ortaya çıkmış, 1980 'li yıllarda ise yarı iletkenler alanındaki sıçramalarla devrim boyutundaki yeniliklere ulaşmıştır.

1960 'lı yıllardan başlayarak bir yandan iletişimde bilgisayar teknikleri kullanılması, diğer yandan bilgisayarlar arasında iletişim kurulması gündeme gelmiştir. Bilişim terimi, bilginin kodlanması, aktarılması, özetlenmesi, ilintilendirilmesi, raporlanması gibi tüm işlemleri kapsayan, oldukça geniş anlamlı bir terimdir.


Yazılım Geliştirme Yaklaşımı?

Yazılım yaşam çevriminin hangi aşamalarla ayrıldığı ve bunların gerçekleştirilme sırası, yazılım geiliştirme yaklaşımına bağlıdır.

Geleneksel Yaklaşım
  • Kullanıcı isterlerinin işin başında yeterli açıklık ve doğrulukta tanımlanabileceği,
  • Bu isterlerin tanımında kullanıcı ile geliştirici arasında anlaşmaya varılabileceği, bunun için yeterli zaman ve diğer kaynakların ayrılabileceği,
  • Geliştirme projesinin başlamasından uzun bir süre sonraya kadar kullanıcıya hiçbir ürün verilmemesinin kabul edilebileceği..
durumlarda olumlu sonuç veren bir yaklaşımdır. 

Hızlı İlkörnek
Özellikle kullanıcı isterilerinin belirsiz olduğu, bunların uzun uzun tanımlamaya çalışmak yerine kısa zamanda ortaya çalışan bir sistem çıkarmanın daha gerçekçi olacağı koşullarda bu yaklaşım benimsenebilir. Kullanıcı isterleriyle ilgili olarak ilk belirlemelerin ardından, bunları "şöyle böyle" de olsa karşılayan, çalışan bir yazılım üretilir ve sonra bu yazılım kullanıcı ile birlikte olgunlaşır. Amaç, başta belirgin ve ayrıntılı olmayan isterlerin biçimlendirilmesinde geliştiricinin kullanıcıya yardımcı olmasıdır. Buna karşılık kullanıcı da ortaya doyurcu nitelikte bir yazılım çıkması için tüm süreç boyunca geliştiriciye yardımcı olacaktır. Doğal olarak bu yaklaşım hızlı bir çözüm üretirse de ortaya çıkan yazılımın niteliği konusunda, özellikle en başta, hiçbir güvence yoktur.


Yazılım İsterleri Belirleme

Bilgisayar kullanıcılarının yazılım ya da donanım üretici / satıcıları tarafından eleştirilmelerinin en belli başlı nedeni, isterlerini ortaya koymaktaki tutarsızlıklarıdır. Kullanıcı ise çoğu kez, kendi açısından haklı olarak "biz baştan beri kaç kez söyledik istediğimizin bu olmadığını; ama anlatamadık ki.." çırpınışı içindedir.

Yazılım niteliklerinin, kullanıcı isterlerini gerçekten karşılayıp karşılayamayacağı çoğu zaman ancak uygulamaya geçildikten sonra ortaya çıkar; yani çok geç!

Dil Becerisi
Barry Boehm 'in şu sözleri, dilin önemini vurguluyor..
(Yaptığımız iş) .. bir aylık tek seferlik benzetim çalışmalarından 300 kişilik bir ekibin birkaç yıllık çalışmasını kapsayan çok büyük projelere kadar uzanıyor. Genellikle üniversitelerden yılda 25-50 yazılımcı alıyoruz. Genel olarak bunların üniversiteler tarafından özellikle sistem programlama alanında bazı yazılım mühendisliği işlevlerini yerine getirmeye iyi hazırlandıklarını görüyoruz. Ancak bizim işimizde özel önlem taşıyan bazı yazılım mühendisliği işlevlerini yerine getirmek için pek iyi eğitilmiş olmuyorlar. Bunlardan en önemlileri: 1. Anlaşılabilir bir İngilizce ile kendini ifade! Yazılım etkinliğimiz, program yanında geniş çaplı belgeleme de üretmektedir. Bu belgeler genel olarak büyük ölçüde birbirinden bağımsız çalışan çeşitli grupların - geliştirme, sınama, eğitim, donanım ve sistem mühendisliği, işletim, kullanım - çalışmalarını yönlendirmekte kullanılır. Onun için de, belgelemenin açık, kesin, anlaşılması kolay ve yanlış anlaşılması zor nitelikte olması son derece önemlidir.
Yazılımda kullanıcının ne istediği ancak doğal dillerle, görüşme, izleme ve benzeri yollarla anlaşılmağa çalışılmaktadır. Yazılımcının dil beceresi gereksinimi buradan doğuyor.

"Bas kontrolır, maykroprosesırın yirmiüçüncü pinini haya pul eder" tümcesini kuran öğrenci, konuyu ne denli anladığını sanarsa sansın, "taşıyıcı denetleyicisi, mikroişlemcinin yirmiüçüncü bacağını yükseğe çeker" tümcesini kullanan öğrenci kadar egemen değildir söylediğine.

İsterler Anlatımı / İsterler Belgesi
İsterler belgesi, kullanıcı tarafından hazırlanmaz. Kullanıcının belirttiklerine dayanarak bu belgeyi hazırlayan ya çözümleyici ya da yazılımcıdır.

İsterler belgesinin bütünlüğü, örneğin, yazılımın olabilecek tüm veri girişlerinde görülecek tepkisini tanımlamak anlamına gelir. Yalnızca doğru ve tutarlı verilerle ne yapılacağı anlatılıp hatalı, eksik ya da çelişkili verile nasıl tepki gösterileceğinin belirlenmemesi, bu açık noktanın tasarım aşamasında belki de tümüyle kullanıcının beklentisine uymayan biçimde karşılanmasına yol açabilir.

İsterler belgesi, yazılım yaşam çevriminin ilk aşamasının elle tutulur sonucudur. Bundan sonraki aşamaların esenliği bu aşamada ilgililer arasında görüş birliğine varılmasına bağlıdır.

Yazılım Niteliği ve Yazılım Belgeleme

Yazılım niteliğini belki de en çok etkileyen ama yazılım kullanıcı ve üreticilerince en sık gözardı edilen konu belgelemedir. Yazılım ancak belgelemesi kadar iyidir. Başka bir deyişle, iyi belgelenmemiş, açıklanmamış, ne işe yaradığı, nasıl kullanılacağı, çeşitli özel koşullarda ne yapılması gerektiği, kullanıcının özgün gereklerini karşılayabilmek için nasıl değiştirilip geliştirilebileceği belli olmayan bir yazılım ürününün niteliği hakkında olumlu bir şey söylemek pek kolay değildir.

Günümüzde standartlaşmanın, belgeleme gereğini bir ölçüde azalttığı söylenebilir. Birçok yazılım ürünü, doğrudan doğruya üreticisi tarafından, hiçbir yazılı belge gerektirmeden kullanılacak biçimde geliştirilmektedir.

Kullanıcıyı adım adım yönlendiren, ona seçenekler sunan, bu seçenekleri görsel araçlara anlaşılır kılan ve böylece kullanım kılavuzlarını gereksizleştiren yazılımlar gibi, bakım onarım sorumlusunu da yönlendiren, gerekli işlemleri seçenekler aracılığıyla belirleyen ve bakım kılavuzlarını en azından bir ölçüde gereksizleştirecek yazılımlar da geliştirilmektedir.

Ancak tüm bu gelişmeler, belgelemenin önemsizleştiğini ve gereksizleştiğini değil tersine zaman içinde yetkinleştiğini, yazılımla bütünleştiğini göstermektedir. Belgeleme, hedeflediği okuyucular tarafından yararlanılabilir olduğu sürece, kağıt, bilgisayar ya da yazılım tarafından etkin yönlendirme gibi çeşitli ortamlarda bulunabilir. Önemli olan belgelemenin eksiksizliği ve burada ele alınan amaçlara uygunluğudur.

Tüm belgeleme türlerinde yaşamsal önem taşıyan bir yön de güncelliktir. Belgelemenin güncel tutulması, yazılım üreticilerinin temel sorumluluklarından biridir.

Yazılım Üretimi / Yazılım Mühendisliği
Uluslararası elektrik ve elektronik mühendisliği kurumu (IEEE) tarafından 1975 yılında Yazılım Mühendisliği dergisi çıkartılmaya başlamıştır. Daha sonraki yıllarda sayısız kitap, dergi, makale ve bildiri yazılım konusunu incelemeyi sürdürmüştür.

Yazılım mühendisliği çalışmalarının başlangıcı, doğru program yazma yöntemleri geliştirme çabalarına dayanır. Edsgar Dijkstra, 1960 'lı yıllarda ortaya attığı programlama yaklaşımı ve GOTO komutunu kullanımdan kaldırma önerisi (1968) ile, 1972 yılında ise Dahl 'ın Yapısal Programlama adlı yayını bu dalın temel taşlarıdır.

1970 'li yıllara dek bilgisayar kullanımı "programlama"yı içermişken, ve bilgisayar sahibi olan bir kuruluşun kendi kullanım yazılımını geliştirmemesi düşünülemezken, bugün yazılım üretebilmek için giderek yükselen uzmanlık ve birikim düzeyleri gerekmekte, buna koşut olarak yazılım üreten kuruluşlar azalmakta ve uzmanlaşmaktadır.