Yazılım
Değişik ve çeşitli görevler yapma amaçlı tasarlanmış elektronik aygıtların birbirleriyle haberleşebilmesini ve uyumunu sağlayarak görevlerini ya da kullanılabilirliklerini geliştirmeye yarayan makine komutlarıdır.
Yazılım, elektronik aygıtların belirli bir işi yapmasını sağlayan programların tümüne verilen isimdir. Bir başka deyişle, var olan bir problemi çözmek amacıyla bilgisayar dili kullanılarak oluşturulmuş anlamlı anlatımlar bütünüdür. Yazılım için çeşitli diller mevcuttur. Bunlardan bazıları Pascal, C++ ve Java’dır.

Bilgisayar Yazılım Türleri
Bilgisayar yazılımları genel olarak 3 ana grupta incelenebilir.
Sistem Yazılımları
Bilgisayarın kendisinin işletilmesini sağlayan, işletim sistemi, derleyiciler (compilers) (Yazılım programında, yazılan programı makine diline çeviren program), çeşitli donatılar (facility) gibi yazılımlardır.
Uygulama Yazılımları
Bu kullanıcıların işlerine çözüm sağlayan örneğin çek, senet, stok kontrol, bordro, kütüphane kayıtlarını tutan programlar, bankalardaki müşterilerin para hesaplarını tutan programlar gibi yazılımlardır.
Bütün sistem programları içinde en temel yazılım işletim sistemidir ki, bilgisayarın bütün donanım ve yazılım kaynaklarını kontrol ettiği gibi, kullanıcılara ait uygulama yazılımlarının da çalıştırılmalarını ve denetlenmelerini sağlar.
Çevirici Yazılımlar
Herhangi bir dilde yazılan programı makine diline çeviren yazılımlardır.
Sistem Yazılımları
Sistem yazılımları bilgisayar kullanımı için gerekli ana fonksiyonları sağlar ve bilgisayar donanımına ve sistemin yürütülmesine yardımcı olur. Şu kombinasyonları içerir:
- Aygıt sürücüleri
- İşletim sistemleri
- Sunucular
- Hizmet programları
- Pencere sistemleri
Sistem yazılımı çeşitli bağımsız donanım bileşenlerinin uyum içinde çalışmalarından sorumludur.
Sistem yazılımı bilgisayar donanımının işletilmesi ve uygulama yazılımının çalıştırılması için bir platform sağlamak için tasarlanmış bir bilgisayar yazılımıdır.
En temel sistem yazılımı türleri şunlardır:
- Bilgisayar BIOS’u ve aygıt yazılımı: Bilgisayara bağlı veya bilgisayar içindeki donanımı çalıştırmak ve kontrol etmek için gereken temel işlevselliği sağlar.
- İşletim sistemi ( önde gelen örnekler; Microsoft Windows, Mac OS X ve Linux olmak üzere): Bilgisayar parçalarının; hafıza ile diskler arasında veri alışverişi veya monitöre görüntü sağlamak gibi görevleri uygulayarak birlikte çalışmasına olanak sağlar. Ayrıca üst düzey sistem yazılımı ve uygulama yazılımlarının çalıştırılması için bir platform oluşturur.
- Yardımcı yazılım: Bilgisayarın analiz edilmesine, yapılandırılmasına, yönetilmesine ve optimize edilmesine yardımcı olur.
Ayrıca sistem yazılımı terimi, bazı yayınlarda yazılım geliştirme araçlarını tanımlamak için de kullanılır. Bilgisayar alıcıları nadiren sahip olduğu işletim sistemini öncelikli olarak dikkate alarak bir bilgisayar alırlar. Fakat cep telefonu gibi aygıtları satın alan kişiler için bu durumun tersi geçerli olabilir. Çünkü iPhone örneğinde olduğu gibi bu tür aygıtların sistem yazılımlarının, son kullanıcı tarafından değiştirilmesi oldukça zordur. Ayrıca sistem yazılımı genellikle dahili ya da önceden yüklenmiş şekilde, yararlı ve hatta gerekli bir alt yapı kodu olarak görev yapar. Sistem yazılımının dışında, kullanıcıların dokümanlar oluşturmasına, oyun oynamasına, müzik dinlemesine ya da İnternet’te gezinmesine olanak sağlayan yazılımlara uygulama yazılımı denir.
Yazılım Mühendisliği
Yazılım geliştirme ile ilgilenen bilim dalıdır. Yazılım mühendisliği tanımı ilk olarak 1968 yılında gerçekleştirilen NATO toplantısında Almanya’da gündeme gelmiştir.
Yazılım mühendisliği tanım olarak “karmaşık yazılım sistemlerinin belirli bir hedefe ve sisteme dayalı olarak ve işbölümü yapılarak, belirli prensipler, yöntemler ve araçlar kullanılarak geliştirilmesidir.” Yazılım mühendisliği belirli aşamalardan oluşmaktadır. Yazılım geliştirmenin yanında yazılımı işletmek de yazılım mühendisliğinin en önemli görevlerindendir. Bu alandaki güncel gelişmeler “Software Engineering Body of Knowledge” (SWEBOK) adlı dokümanda tarif edilmektedir.

Geçmiş
1945’ten 1965’e: Kökenleri
Yazılım Mühendisliği terimi ilk kez 1950’lerin sonunda 1960’ların başında görülmeye başladı. Programcılar zaten inşaat, elektrik ve bilgisayar mühendisliklerini biliyorlardı ve yazılım için mühendisliğin ne olduğunu tartışmaya başladılar.
NATO Bilim Komitesi, 1968’deki ve 1969’daki Yazılım Mühendisliği üzerine bu alana destek olan iki konferansa (Garmisch, Almanya) destek oldu. Çoğu kişi bu konferansların yazılım mühendisliğindeki resmi başlangıç olduğuna inanır.
1965’ten 1985’e: Yazılım Krizi
1960’lar, 1970’ler ve 1980’lerdeki yazılım geliştirmedeki sorunları tespit eden yazılım krizleri Yazılım Mühendisliğini teşvik edici unsur oldu. Birçok yazılım tasarısı bütçeyi aştı ve düşünülen zamanı geçti. Bazı tasarılar fiziksel zarara neden oldu, bir kesim tasarılar ise ölümlere bile neden oldu. Yazılım krizi önceleri verimlilik açısından tanımlanmış olsa da sonradan kaliteyi vurgulama ön plana geçti. Bazıları ise yazılım krizi kavramını yeterli kalitede programcı kiralayama karşılığı olarak kullandı.
Maaliyet ve bütçenin aşılması: OS/360 işletim sistemi klasik bir örnektir.
Fiziksel zarar: Yazılım kusurları fiziksel zararlara yol açabilir. Kötü yazılım güvenliği ise kırıcılara (hacker) kişisel bilgileri çalmasına izin verir, bu paraya, şöhrete ve zamana mal olur.
Yaşam ve ölüm: Yazılım kusurları öldürebilir. Radyoterapi makinelerinde kullanılan bazı gömülü sistemler başarısız oldu, bu yüzden makineler hastaları öldürücü dozlarda radyasyona maruz bıraktı. Bu başarısızlıkların en ünlüsü Therac 25 olayıdır.
Büyük Gelişmeler
Yazılım Mühendisliğindeki evrimin önemli olduğu bazı alanlar vardır:
Meslek olarak ortaya çıkması: 1980’lerin başlarında Yazılım Mühendisliği, bilgisayar bilimleri ve geleneksel mühendisliğin yanında gerçek bir meslek olarak ortaya çıktı.
Süreç ve Yöntembilim: Süreç ve yöntembilim Yazılım Mühendisliğinin büyük bir parçası oldu.
Yazılım Geliştirme Aşamaları
Şelale modeli yazılım geliştirme sürecinde kullanılan model türlerinden yalnızca birisidir.
Karmaşık yazılımları geliştirmek ve bakımını yapmak çok masraflı ve zordur. Bu yüzden, yazılımlar yazılım mühendisleri tarafından nizami olarak planlı bir proje şeklinde geliştirilmektedir. Bu nizami geliştirme planına “yazılım geliştirme süreci” (İngilizce: software development process) adı verilmektedir. Yazılım geliştirme süreci, zamanlamaya dayalı, içerik olarak bölünmüş ve görselleştirilmiş aşamalardan oluşmaktadır. Bu sayede yazılım adım adım ve planlı bir şekilde geliştirilmektedir. Bu aşamalar birbirleri ile bağlantılı olarak geliştirilmektedir.
Başlıca yazılım geliştirme aşamaları şunlardır:
Çekirdek aşamalar:
- Planlama
- Analiz
- Dizayn
- Programlama
- Test
Destekleyici aşamalar:
- Talep yönetimi
- Proje yönetimi
- Kalite yönetimi
- Yapılandırma yönetimi
- Yazılım sunumu
- Dokümantasyon
- Ayrık yapılandırma

Kaynak: http://www.wikipedi.org