Yazılım Mühendisliğine Genel Bakış

Önce yazılım mühendisliğinin ne anlama geldiğini anlayalım. Terim, yazılım ve mühendislik olmak üzere iki kelimeden oluşur.

Software bir program kodundan daha fazlasıdır. Bir program, bazı hesaplama amaçlarına hizmet eden çalıştırılabilir bir koddur. Yazılım, çalıştırılabilir programlama kodu, ilgili kitaplıklar ve belgelerden oluşan bir koleksiyon olarak kabul edilir. Yazılım, belirli bir gereksinim için yapıldığında denirsoftware product.

Engineering Öte yandan, iyi tanımlanmış, bilimsel ilkeler ve yöntemler kullanarak ürün geliştirmekle ilgilidir.

Software engineeringiyi tanımlanmış bilimsel ilkeler, yöntemler ve prosedürler kullanarak yazılım ürününün geliştirilmesi ile ilgili bir mühendislik dalıdır. Yazılım mühendisliğinin sonucu, verimli ve güvenilir bir yazılım ürünüdür.

Tanımlar

IEEE, yazılım mühendisliğini şu şekilde tanımlar:

(1) Yazılımın geliştirilmesi, çalıştırılması ve bakımı için sistematik, disiplinli, ölçülebilir bir yaklaşımın uygulanması; yani mühendisliğin yazılıma uygulanması.

(2) Yukarıdaki ifadede olduğu gibi yaklaşımların incelenmesi.

Alman bilgisayar bilimcisi Fritz Bauer, yazılım mühendisliğini şu şekilde tanımlıyor:

Yazılım mühendisliği, güvenilir ve gerçek makinelerde verimli çalışan, ekonomik bir yazılım elde etmek için sağlam mühendislik ilkelerinin oluşturulması ve kullanılmasıdır.

Yazılım Evrimi

Yazılım mühendisliği ilkelerini ve yöntemlerini kullanarak bir yazılım ürünü geliştirme süreci şu şekilde anılır: software evolution. Bu, beklenen gereksinimleri karşılayan istenen yazılım ürünü geliştirilinceye kadar yazılımın ilk geliştirilmesini, bakımını ve güncellemelerini içerir.

Evrim, ihtiyaç toplama sürecinden başlar. Daha sonra geliştiriciler, amaçlanan yazılımın bir prototipini oluşturur ve yazılım ürünü geliştirmenin erken aşamasında geri bildirimlerini almak için kullanıcılara gösterir. Kullanıcılar, birkaç ardışık güncelleme ve bakımın da değişmeye devam ettiği değişiklikler önerir. Bu işlem, istenen yazılım elde edilene kadar orijinal yazılıma geçer.

Kullanıcının elinde yazılım istediği halde gelişen teknoloji ve değişen gereksinimler yazılım ürününü buna göre değişmeye zorlamaktadır. Yazılımı sıfırdan yeniden oluşturmak ve gereksinimle bire bir gitmek mümkün değildir. Uygulanabilir ve ekonomik tek çözüm, mevcut yazılımı en son gereksinimleri karşılayacak şekilde güncellemektir.

Yazılım Evrim Kanunları

Lehman, yazılım evrimi için yasalar verdi. Yazılımı üç farklı kategoriye ayırdı:

  • S-type (static-type) - Bu, kesinlikle tanımlanmış spesifikasyonlara ve çözümlere göre çalışan bir yazılımdır . Çözüm ve buna ulaşma yöntemi, kodlamadan hemen önce anlaşılır. S-tipi yazılım en az değişikliğe maruz kalır, bu nedenle bu en basit olanıdır. Örneğin, matematiksel hesaplama için hesap makinesi programı.
  • P-type (practical-type) - Bu, bir dizi prosedür içeren bir yazılımdır . Bu, prosedürlerin tam olarak neler yapabileceği ile tanımlanır. Bu yazılımda teknik özellikler tanımlanabilir ancak çözüm hemen belli değildir. Örneğin, oyun yazılımı.
  • E-type (embedded-type) - Bu yazılım, gerçek dünya ortamının gereği olarak yakından çalışır . Bu yazılım, gerçek dünyadaki durumlarda kanunlarda, vergilerde vb. Çeşitli değişiklikler olduğu için yüksek derecede evrim geçirmiştir. Örneğin, Çevrimiçi ticaret yazılımı.

E-Type yazılım gelişimi

Lehman, E-Type yazılım evrimi için sekiz yasa verdi -

  • Continuing change - E-tipi bir yazılım sistemi gerçek dünyadaki değişikliklere uyum sağlamaya devam etmelidir, aksi takdirde giderek daha az kullanışlı hale gelir.
  • Increasing complexity - E-tipi bir yazılım sistemi geliştikçe, karmaşıklığı, onu korumak veya azaltmak için bir çalışma yapılmadıkça artma eğilimindedir.
  • Conservation of familiarity - Sistemdeki değişiklikleri uygulamak için yazılıma aşinalık veya nasıl geliştirildiği, neden bu şekilde geliştirildiği vb. Her ne pahasına olursa olsun muhafaza edilmelidir.
  • Continuing growth- Bazı iş sorunlarını çözmeyi amaçlayan bir E-tipi sistem için, işletmenin yaşam tarzı değişikliklerine göre değişiklikleri uygulama boyutu büyür.
  • Reducing quality - E-tipi bir yazılım sistemi, titizlikle muhafaza edilmedikçe ve değişen bir operasyonel ortama uyarlanmadıkça kalitesi düşer.
  • Feedback systems- E-tipi yazılım sistemleri çok döngülü, çok seviyeli geri bildirim sistemlerini oluşturur ve başarılı bir şekilde değiştirilmek veya iyileştirilmek için bu şekilde ele alınmalıdır.
  • Self-regulation - E-tipi sistem evrim süreçleri, ürün ve süreç ölçülerinin normale yakın dağılımı ile kendi kendini düzenler.
  • Organizational stability - Gelişen bir E-tipi sistemdeki ortalama etkin küresel aktivite oranı, ürünün kullanım ömrü boyunca değişmez.

Yazılım Paradigmaları

Yazılım paradigmaları, yazılımı tasarlarken atılan yöntem ve adımlara atıfta bulunur. Bugün önerilen ve çalışmakta olan birçok yöntem var, ancak bu paradigmaların yazılım mühendisliğinde nerede durduğunu görmemiz gerekiyor. Bunlar, her biri diğerinin içinde yer alsa da, çeşitli kategoriler halinde birleştirilebilir:

Programlama paradigması, ayrıca Yazılım geliştirme paradigmasının bir alt kümesi olan Yazılım tasarım paradigmasının bir alt kümesidir.

Yazılım Geliştirme Paradigması

Bu Paradigma, yazılımın geliştirilmesiyle ilgili tüm mühendislik kavramlarının uygulandığı yazılım mühendisliği paradigmaları olarak bilinir. Yazılım ürününün oluşturulmasına yardımcı olan çeşitli araştırmaları ve gereksinim toplamayı içerir. Bu oluşmaktadır -

  • Şartlı toplantı
  • Yazılım Tasarımı
  • Programming

Yazılım Tasarım Paradigması

Bu paradigma, Yazılım Geliştirmenin bir parçasıdır ve şunları içerir:

  • Design
  • Maintenance
  • Programming

Programlama Paradigması

Bu paradigma, yazılım geliştirmenin programlama yönü ile yakından ilgilidir. Bu içerir -

  • Coding
  • Testing
  • Integration

Yazılım Mühendisliği İhtiyacı

Yazılım mühendisliği ihtiyacı, kullanıcı gereksinimlerindeki ve yazılımın çalıştığı ortamdaki daha yüksek değişim oranlarından kaynaklanmaktadır.

  • Large software - Aynı şekilde, bir duvar inşa etmek bir ev veya binaya göre daha kolaydır, çünkü yazılımın boyutu büyüdükçe, mühendislik ona bilimsel bir süreç vermek için adım atmak zorunda kalır.
  • Scalability- Yazılım süreci bilimsel ve mühendislik kavramlarına dayalı olmasaydı, yeni yazılımı yeniden oluşturmak, mevcut olanı ölçeklendirmekten daha kolay olurdu.
  • Cost- Donanım endüstrisi becerilerini gösterdikçe ve büyük üretim, bilgisayar ve elektronik donanım fiyatlarını düşürdü. Ancak uygun süreç uyarlanmazsa yazılım maliyeti yüksek kalır.
  • Dynamic Nature- Yazılımın her zaman büyüyen ve uyarlanan doğası, büyük ölçüde kullanıcının çalıştığı ortama bağlıdır. Yazılımın doğası sürekli değişiyorsa, mevcut yazılımda yeni geliştirmelerin yapılması gerekir. Burası yazılım mühendisliğinin iyi bir rol oynadığı yerdir.
  • Quality Management- Daha iyi yazılım geliştirme süreci, daha iyi ve kaliteli yazılım ürünü sağlar.

İyi bir yazılımın özellikleri

Bir yazılım ürünü ne sunduğuna ve ne kadar iyi kullanılabileceğine göre değerlendirilebilir. Bu yazılım aşağıdaki gerekçeleri karşılamalıdır:

  • Operational
  • Transitional
  • Maintenance

İyi tasarlanmış ve hazırlanmış yazılımın aşağıdaki özelliklere sahip olması beklenmektedir:

Operasyonel

Bu bize yazılımın operasyonlarda ne kadar iyi çalıştığını gösterir. Aşağıdakiler üzerinde ölçülebilir:

  • Budget
  • Usability
  • Efficiency
  • Correctness
  • Functionality
  • Dependability
  • Security
  • Safety

Geçiş

Bu husus, yazılım bir platformdan diğerine taşındığında önemlidir:

  • Portability
  • Interoperability
  • Reusability
  • Adaptability

Bakım

Bu özellik, bir yazılımın sürekli değişen ortamda kendini koruma yeteneklerine ne kadar sahip olduğunu özetlemektedir:

  • Modularity
  • Maintainability
  • Flexibility
  • Scalability

Kısacası, Yazılım mühendisliği, verimli, dayanıklı, ölçeklenebilir, bütçe dahilinde ve zamanında yazılım ürünleri üretmek için gereken iyi tanımlanmış mühendislik kavramlarını kullanan bir bilgisayar bilimi dalıdır.