Yazılım Mühendisliği Nedir – Temel Kavramlarla Yazılım Mühendisliğine Giriş

Yazılımın Tanımı

Yazılım mühendisliği detayına girmeden önce yazılım kavramını netleştirelim. Yazılım nedir? Bilgisayar yazılımı veya sadece yazılım, en basit tanımıyla bir bilgisayara ne yapacağını ve nasıl yapılacağını söyleyen talimatları sağlayan bilgisayar programları, veriler ve belgeler topluluğudur. Bu tanıma yapılandırma (konfigürasyon) dosyaları, gereksinim tasarım veya sistem dokümanları, kullanıcı kılavuzu gibi dokümanlar da girer. Peki, program nedir? Program bilgisayarın veri işlemek için, işlem yürütmek için veya mantıksal bir sorunu çözmek için izlediği ve belirli bir programlama dilinde yazılan talimatların listesidir.

Bilgisayarın ilk yıllarında yazılım çok küçük programlardı. Genelde tek bir kişi tarafından yazılırdı. Programı yazan kişi de genellikle o programın kullanıcısı olurdu. Günümüzde ise yazılımlar çoğunlukla çok büyük boyutlardadır ve ekip olarak geliştirilmektedir. Geliştiriciler, geçmişteki durumun aksine, geliştirdikleri sistemin kullanıcıları değildir ve uygulama alanı hakkında uzmanlık bilgisine de ihtiyaçları bulunmamaktadır.

Yazılım ürünleri belirli bir müşteri için geliştirilebildiği gibi genel pazar için de geliştirilebilir. Yazılım soyuttur, elle tutulan bir ürün değildir. Fizik kuralları veya üretim süreci tarafından yönetilen malzemelerle kısıtlanmaz. Dolayısıyla avantaj olarak potansiyelinde fiziksel bir sınırlama yoktur. Bunun dezavantajı ise fiziksel kısıtlamalar olmamasından dolayı yazılım kolayca son derece karmaşık ve anlaşılması güç hale gelebilir. Yazılımın zaman geçtikçe fiziksel ürünler gibi yıpranması söz konusu değildir ancak ihtiyaçlar ve gereksinimler değiştikçe cevap verebilir durumda olması için ve bozulmaması için modellenen gerçeklikle birlikte gelişmesi gerekir.

Yazılımı Etkileyen Temel Faktörler

Heterojenlik: Sistemlerin giderek farklı türde bilgisayar ve mobil aygıtlar içeren ağlar arasında dağıtık sistemler bütünü olarak çalışması gerekmektedir.

İş Dünyası ve Sosyal Değişim: İş dünyası ve toplum, ekonomiler geliştikçe ve yeni teknolojiler kullanıma sunuldukça mevcut yazılımların da değiştirilebilmeleri ve hızla yeni yazılımlar geliştirebilmesi gerekir.

Güvenlik: Yazılım hayatımızın tüm yönleriyle iç içe olduğundan, yazılıma güvenebilmemiz önemlidir.

İyi Bir Yazılımın Temel Özellikleri

» Yazılımın Sürdürülebilir Olması: Yazılım, müşterilerin değişen ihtiyaçlarını karşılamak için geliştirilebilecek şekilde yazılmalıdır. Bu kritik bir özelliktir çünkü yazılım değişikliği değişen bir iş ortamının kaçınılmaz bir gereksinimidir.

» Güvenilirlik ve Güvenlik: İyi bir yazılımın güvenilirlik ve güvenliğe dair bir dizi özelliğe sahip olması beklenir. Güvenilir yazılımın sistem arızası durumunda fiziksel veya ekonomik herhangi bir hasara meydan vermemelidir. Ayrıca kötü niyetli kullanıcıların da sisteme erişip zarar verebilmesini engelleyecek şekilde güvenli olmalıdır.

» Verimlilik: Yazılım işlemci veya bellek gibi sistem kaynaklarını boşa harcamamalıdır. İstenen şekilde cevap verebilir olmalı ve işlem süresi belirli eşik değerin üzerinde olmamalıdır.

» Uyum: Yazılım tasarlanan kullanıcısı için kabul edilebilir, anlaşılabilir, kullanılabilir durumda olmalıdır. Kullanılan diğer sistemlerle de uyumlu olması gerekir.

Margaret Hamilton - Apollo

Margaret Hamilton – Apollo görevindeyken

Yazılım Mühendisliğine Giriş

Yazılım Mühendisliği Nedir?

Yazılım mühendisliği temel olarak yazılımın tüm yönleriyle ilgilenen bir mühendislik disiplinidir. Mühendislik temel olarak, ortaya çıkarılacak ürünlerin tasarımı veya geliştirilmesi için bilimsel prensiplerin uygulamasıdır. https://www.merriam-webster.com sözlüğüne göre mühendislik, maddenin özelliklerinin ve doğadaki enerji kaynaklarının insanlara faydalı olması adına yapılan bilim ve matematiğin kullanımıdır. Yani mühendislik disiplini zamanı, kaliteyi ve maliyeti göz önünde bulundurarak problemleri çözmek için uygun teorileri ve yöntemlerin kullanımıdır. Mühendisler teorileri, yöntemleri ve araçları uygun yerlerde uygulayarak o alanda “işe yarar” bir ürün ortaya çıkarır.

Yazılım mühendisliği, sistemin tanımlandığı ilk aşamadan sistemin kullanıma girdikten sonra sistemin bakımına kadar yazılım üretiminin tüm yönleriyle ilgilenen bir mühendislik disiplinidir. Sadece teknik geliştirme süreci değil ayrıca proje yönetimi ve yazılım üretimini desteklemek için araç, yöntemlerin kullanımı ile de ilgilenir. Diğer mühendislik dallarında olduğu gibi yazılım mühendisliği de bir bilime dayanmaktadır: bilgisayar bilimi (computer science).

Yazılım Mühendisliği Tarihçesi

1940’lardan 1960’ların sonuna kadar belli bir alana yönelik geliştirilen yazılımlar mevcutta çözümü olan problemlerin daha kolay çözülmesini sağlıyordu. Hâlihazırda çözülebilen bir işlem bilgisayarın anlayacağı notasyona dönüştürülüyordu. Bu sayede belki dakikada 1 işlem değil de 1000 işlem yapılabilmesi sağlanıyordu. Ancak 1960’ların sonunda ilk gerçek büyük yazılım projelerinin ticari olarak teşebbüs edilmesi ve yazılımın gerçekten ihtiyaca cevap verebilmesi dolayısıyla yazılım üzerinde yeni bir disiplinin uygulanması gerektiği görüldü.

IBM 360 işletim sistemi bununla ilgili ilk büyük projelerden biriydi. Birden fazla bileşen üzerinde çalışan ve hepsi birbiriyle etkileşime giren çok sayıda insan vardı. Ayrıca o zamanlar Apollo uzay programı için yazılım geliştiren bir projeyi yöneten bilgisayar bilimcisi Margaret Hamilton’un ve ekibinin yaptığı çalışmalarla birlikte kodun doğrulanması, ekiplerin koordinasyonu, sürümlerin yönetilmesi de dâhil olmak üzere temel sorunlar gün yüzüne çıktı. Bu zamanlarda ortaya çıkan yazılım krizini ve büyük projelerdeki zorlukları görüşmek için 1968’de Almanya’da bir konferans yapıldı. “Yazılım mühendisliği” tabiri ilk olarak burada kullanıldı. Konferans detaylarına http://homepages.cs.ncl.ac.uk/brian.randell/NATO/ adresinden ulaşabilirsiniz.

Bu zamandan sonra yazılım mühendisliği sürekli gelişim halinde olmuştur. Her dönemde yazılım mühendisliği ile ilgili tanımlar yapıldı. Alman bilgisayar bilimci Fritz Bauer’e göre yazılım mühendisliği, güvenilir ve gerçek makinelerde verimli çalışan ekonomik yazılımlar elde etmek için sağlam mühendislik prensiplerinin oluşturulmasıdır.

COCOMO, spiral model gibi yazılım mühendisliği alanına yaptığı katkılarıyla bilinen Amerikalı yazılım mühendisi Barry Boehm’e göre yazılım mühendisliği; bilgisayar programlarının tasarımında, yapımında ve ayrıca ilgili belgelerin geliştirilmesi, işletilmesi ve sürdürülmesi için bilimsel bilginin pratik uygulamasıdır [1976]. IEEE’ye göre ise yazılım mühendisliği; yazılımın geliştirilmesi, işletilmesi, bakımı ve kullanımdan kaldırılmasına yönelik sistematik bir yaklaşımdır [1983].

Margaret Hamilton

Margaret Hamilton – Apollo kaynak kodu ile birlikte

Yazılım Mühendisliği ve Bilgisayar Bilimi

Bilgisayar bilimi (computer science) teori ve temellerle ilgili; yazılım mühendisliği de yararlı yazılım geliştirme ve sunma pratikleriyle ilgilidir. Bilgisayar bilimi yakın geçmişte gelişmiştir ve yaşı gençtir. Fizik, kimya gibi çok köklü bir geçmişi bulunmamaktadır. Dolayısıyla bilgisayar bilimi teorileri, yazılım mühendisliği için (fiziğin elektrik mühendisliğine verdiği destek gibi) tam bir destek görevi vermesinde hala yetersiz görülmektedir.

Yazılım mühendisliği, mühendislik süreçlerinin uygulanması ile çeşitli amaçlarla oluşturulan yazılımın analizi, tasarımı, oluşturulması, doğrulaması, bakımı, güvenliği ve kalitesi gibi konularla ilgilenir. Bilgisayar bilimi, hem teori hem de uygulamayı kapsayan bilgisayarların prensipleri ve kullanımı konusunda yaklaşımları üzerinde durur. Bu alan hem soyut hem de somut bilginin anlaşılmasını ve uygulanmasını içerir.

Sistem mühendisliği ile yazılım mühendisliği arasındaki fark da şu şekildedir; sistem mühendisliği, donanım, yazılım ve süreç mühendisliği de dâhil olmak üzere bilgisayar tabanlı sistem geliştirmenin tüm yönleriyle ilgilidir. Yazılım mühendisliği, sistemde yazılım altyapısı geliştirme, uygulama ve veritabanlarının geliştirilmesi ve kontrolü ile ilgili sürecin bir parçasıdır.

Neden Yazılım Mühendisliği?

Programları kişisel bir programlama projesi gibi yazmaktan ziyade yazılım mühendisliği yöntem ve tekniklerini kullanmak uzun vadede genellikle daha ucuzdur. Yazılım ve yazılım sistemleri artık her yerde olduğu için ekonomiler de yazılıma bağlı hale gelmiştir. Giderek daha fazla sistem yazılım üzerinden kontrol edilmektedir. Çoğu sistem türü için, maliyetlerin çoğu kullanıma girdikten sonra yazılımı değiştirme maliyetleridir.

Yazılım mühendisliği daha güvenilir, daha az maliyetli, daha verimli ve değişen taleplere cevap verebilecek yazılım sistemlerinin geliştirilmesinde yardımcı olur.

Yazılım Mühendisliğinin Farklı Uygulama Alanları

Birçok farklı yazılım sisteminde tümüne uygulanabilecek evrensel bir yazılım tekniği kümesi olmadığı için kullanılan yazılım mühendisliği yöntemleri ve araçları uygulamanın türüne, müşterinin gereksinimlerine ve geliştirme ekibinin arka planına bağlıdır. Farklı yöntem ve tekniklerin uygulandığı uygulama kategorileri şunlardır:

  1. Bağımsız (Standalone) Uygulamalar: Bunlar, PC gibi yerel bir bilgisayarda çalışan uygulama sistemleridir. Gerekli tüm işlevleri içerirler ve bir ağa bağlı olmaları gerekmez.
  2. İşleme Dayalı (Transaction Based) Uygulamalar: Uzak bilgisayarda çalışan ve kullanıcılar tarafından kendi bilgisayarlarından veya terminallerinden erişilen uygulamalar. Bunlar, e-ticaret uygulamaları gibi web uygulamalarını içerir.
  3. Gömülü (Embedded) Kontrol Sistemleri: Bunlar, donanım cihazlarını kontrol eden ve yöneten yazılım kontrol sistemleridir. Sayısal olarak muhtemelen diğer tüm sistem türlerinden daha fazla gömülü sistem vardır.
  4. Toplu İşlem (Batch Processing) Sistemleri: Bunlar verileri büyük gruplar halinde işlemek için tasarlanmış iş sistemleridir. Çok sayıda gelen tekil inputlara karşılık bir output çıktısı oluştururlar.
  5. Modelleme ve Simülasyon Sistemleri: Bunlar, bilim adamları ve mühendisler tarafından birçok, ayrı, etkileşen nesne içeren fiziksel süreçleri veya durumları modellemek için geliştirilen sistemlerdir.
  6. Veri Toplama Sistemleri: Bunlar, bir dizi sensör kullanarak ortamlarından veri toplayan ve bu verileri işlenmek üzere diğer sistemlere gönderen sistemlerdir.
  7. Sistem Sistemleri (SoS): Bunlar diğer yazılım sistemlerinden oluşan sistemlerdir.

Yazılım Mühendisi Ne Yapar?

Yazılım mühendisleri aslında yazılım ilkelerine mühendislik ilkelerini uygular. Yani bir yazılım mühendisi, işletmelerin ve tüketicilerin istek ve ihtiyaçlarını karşılayacak yazılım çözümleri geliştirmek için bilgisayar bilimi ilkelerini kullanır. Yazılım mühendisleri, masaüstü ve web uygulamaları, mobil uygulamalar, oyunlar, robotlar, işletim sistemleri, ağ sistemleri vb. gibi birçok çözüm ortaya çıkarırlar. Bunu da programlama dillerini, kütüphaneleri, veri tabanlarını, sunucuları ve diğer teknolojileri kullanarak yaparlar.

Yazılım mühendisleri birçok türde proje üzerinde çalıştıklarından çeşitli roller ve sorumluluklar alabilir. Yazılım mühendisleri işletmeler için sistemler ve yazılımlar geliştirirken aşağıdaki spesifik sorumlulukları da içerebilir:

» Yazılım ihtiyaçlarını belirlemek için kullanıcılarla birlikte çalışma.

» Kullanıcı özelliklerine göre bir sistem veya uygulama tasarlama, geliştirme ve test etme.

» Geliştiricilerin sistem veya uygulama için uygun kodu oluşturmalarına yardımcı olan diyagramlar ve modeller çizme.

» Gelecekteki bakımdan sorumlu kişilere yardımcı olmak için sistemi veya uygulamayı ayrıntılı olarak belgeleme.

» Sistemin veya uygulamanın gerektiği şekilde güncellemeler ve düzeltmelerle bakımını yapma.

» Mevcut sistemler veya uygulamalar için yazılım yükseltmeleri önerme.

» İzleme, analiz ve iyileştirme için yazılım kalite metriklerini kullanarak ölçüm yapma.

» Yazılım oluşturmak için geliştiriciler ve diğer mühendislerle işbirliği yapma.

Bu yazı size ne kadar faydalı oldu?

Değerlendirmek için bir yıldıza tıklayın!

Yazının sizin için faydalı olmadığını duymaktan dolayı müteessiriz...

Bu yazıyı geliştirmek isteriz!

Bu yazıyı nasıl geliştirebileceğimizi paylaşmak ister misiniz?