Yazılım Tasarımının Temelleri
Yazılım tasarımı, kullanıcı gereksinimlerini uygun bir biçime dönüştürmek için bir süreçtir ve programcıya yazılım kodlaması ve uygulamasında yardımcı olur.
Kullanıcı gereksinimlerini değerlendirmek için bir SRS (Yazılım Gereksinim Belirtimi) belgesi oluşturulurken, kodlama ve uygulama için yazılım açısından daha özel ve ayrıntılı gereksinimlere ihtiyaç vardır. Bu işlemin çıktısı, programlama dillerinde doğrudan uygulanmasında kullanılabilir.
Yazılım tasarımı, konsantrasyonu problem alanından çözüm alanına taşıyan SDLC'nin (Yazılım Tasarım Yaşam Döngüsü) ilk adımıdır. SRS'de belirtilen gerekliliklerin nasıl yerine getirileceğini belirlemeye çalışır.
Yazılım Tasarım Seviyeleri
Yazılım tasarımı üç düzeyde sonuç verir:
- Architectural Design - Mimari tasarım, sistemin en yüksek soyut versiyonudur. Yazılımı, birbiriyle etkileşim halindeki birçok bileşenin bulunduğu bir sistem olarak tanımlar. Bu seviyede, tasarımcılar önerilen çözüm alanı fikrini alırlar.
- High-level Design- Üst düzey tasarım, mimari tasarımın 'tek varlık-çok bileşenli' konseptini, alt sistemlerin ve modüllerin daha az soyutlanmış görünümüne böler ve birbirleriyle etkileşimlerini tasvir eder. Üst düzey tasarım, sistemin tüm bileşenleri ile birlikte modüller biçiminde nasıl uygulanabileceğine odaklanır. Her bir alt sistemin modüler yapısını ve birbirleriyle ilişkilerini ve etkileşimini tanır.
- Detailed Design- Detaylı tasarım, önceki iki tasarımda bir sistem ve alt sistemleri olarak görülen şeyin uygulama kısmı ile ilgilidir. Modüllere ve uygulamalarına yönelik daha ayrıntılıdır. Her modülün mantıksal yapısını ve diğer modüller ile iletişim kurmak için arayüzlerini tanımlar.
Modülerleştirme
Modülerleştirme, bir yazılım sistemini, görevleri bağımsız olarak yerine getirmesi beklenen çok sayıda ayrı ve bağımsız modüle bölme tekniğidir. Bu modüller, tüm yazılım için temel yapılar olarak çalışabilir. Tasarımcılar, ayrı ayrı ve bağımsız olarak yürütülebilecekleri ve / veya derlenebilecekleri modüller tasarlama eğilimindedir.
Modüler tasarım, istemeden 'böl ve yönet' problem çözme stratejisi kurallarını takip eder, çünkü bir yazılımın modüler tasarımına eklenen birçok başka avantaj vardır.
Modülerleştirmenin avantajı:
- Daha küçük bileşenlerin bakımı daha kolaydır
- Program fonksiyonel yönlere göre bölünebilir
- Programa istenilen düzeyde soyutlama getirilebilir
- Yüksek kohezyonlu bileşenler tekrar tekrar kullanılabilir
- Eşzamanlı yürütme mümkün hale getirilebilir
- Güvenlik açısından istenen
Eşzamanlılık
Geçmişte, tüm yazılımların sıralı olarak çalıştırılması amaçlanmıştır. Sıralı yürütme ile, kodlanmış talimatın, herhangi bir zamanda, programın yalnızca bir kısmının etkinleştirildiğini ima ederek, birbiri ardına yürütüleceği anlamına gelir. Diyelim ki, bir yazılımın birden fazla modülü vardır, o zaman tüm modüllerden yalnızca biri yürütme sırasında herhangi bir zamanda etkin bulunabilir.
Yazılım tasarımında eşzamanlılık, yazılımı modüller gibi birden çok bağımsız yürütme birimine bölerek ve bunları paralel olarak çalıştırarak uygulanır. Diğer bir deyişle, eşzamanlılık, yazılıma birden fazla kod parçasını birbirine paralel olarak yürütme yeteneği sağlar.
Programcıların ve tasarımcıların paralel olarak çalıştırılabilen modülleri tanıması gerekir.
Misal
Kelime işlemcideki yazım denetimi özelliği, kelime işlemcinin yanında çalışan bir yazılım modülüdür.
Kaplin ve Uyum
Bir yazılım programı modülerleştirildiğinde, görevleri bazı özelliklere göre birkaç modüle bölünür. Bildiğimiz gibi modüller, bazı görevleri başarmak için bir araya getirilen talimatlar dizisidir. Yine de, tek bir varlık olarak kabul edilirler ancak birlikte çalışmak için birbirlerine başvurabilirler. Modül tasarımının kalitesinin ve aralarındaki etkileşiminin ölçülebileceği ölçüler vardır. Bu önlemlere birleştirme ve uyum denir.
Uyum
Uyum, bir modülün öğeleri içindeki iç güvenilirlik derecesini tanımlayan bir ölçüdür. Uyum ne kadar büyükse, program tasarımı o kadar iyidir.
Yedi tür uyum vardır, yani -
- Co-incidental cohesion -Programın modülerleştirme uğruna daha küçük modüllere bölünmesinin bir sonucu olabilecek plansız ve rastgele uyumdur. Plansız olduğu için programcıların kafasını karıştırabilir ve genellikle kabul edilmez.
- Logical cohesion - Mantıksal olarak kategorize edilmiş öğeler bir modülde bir araya getirildiğinde, buna mantıksal uyum denir.
- Temporal Cohesion - Modül unsurları zaman içinde benzer bir noktada işlenecek şekilde düzenlendiğinde, buna zamansal uyum denir.
- Procedural cohesion - Bir görevi gerçekleştirmek için sırayla yürütülen modül öğeleri bir arada gruplandırıldığında, buna prosedürsel uyum denir.
- Communicational cohesion - Sırayla yürütülen ve aynı veriler (bilgiler) üzerinde çalışan modül öğeleri birlikte gruplandığında, buna iletişimsel uyum denir.
- Sequential cohesion - Modül öğeleri gruplandığında, bir öğenin çıktısı diğerine girdi olarak hizmet ettiğinden vb. Buna sıralı uyum denir.
- Functional cohesion - En yüksek uyum derecesi olarak kabul edilir ve çok beklenen bir durumdur. İşlevsel uyumdaki modül unsurları, tek bir iyi tanımlanmış işleve katkıda bulundukları için gruplandırılmıştır. Ayrıca yeniden kullanılabilir.
Kaplin
Birleştirme, bir programın modülleri arasındaki birbirine bağımlılık düzeyini tanımlayan bir ölçüdür. Modüllerin hangi düzeyde müdahale ettiğini ve birbirleriyle etkileşime girdiğini söyler. Kaplin ne kadar düşükse program o kadar iyi olur.
Beş bağlantı seviyesi vardır, yani -
- Content coupling - Bir modül, başka bir modülün içeriğine doğrudan erişebildiği veya bunları değiştirebildiği veya bunlara atıfta bulunabildiği zaman, buna içerik seviyesi bağlantısı denir.
- Common coupling- Birden fazla modülün bazı global verilere okuma ve yazma erişimi olduğunda, buna ortak veya global kuplaj denir.
- Control coupling- İki modüle, biri diğer modülün işlevine karar verirse veya yürütme akışını değiştirirse, kontrol bağlantılı olarak adlandırılır.
- Stamp coupling- Birden fazla modül ortak veri yapısını paylaştığında ve farklı kısımlarında çalıştığında, buna damga bağlama denir.
- Data coupling- Veri birleştirme, iki modülün veri geçirme yoluyla (parametre olarak) birbiriyle etkileşime girmesidir. Bir modül veri yapısını parametre olarak geçirirse, alıcı modül tüm bileşenlerini kullanmalıdır.
İdeal olarak, hiçbir bağlantı en iyisi olarak görülmez.
Tasarım Doğrulaması
Yazılım tasarım sürecinin çıktısı tasarım dokümantasyonu, sözde kodlar, ayrıntılı mantık diyagramları, süreç diyagramları ve tüm işlevsel veya işlevsel olmayan gereksinimlerin ayrıntılı açıklamasıdır.
Yazılımın uygulanması olan bir sonraki aşama, yukarıda bahsedilen tüm çıktılara bağlıdır.
Daha sonra bir sonraki aşamaya geçmeden önce çıktının doğrulanması gerekli hale gelir. Herhangi bir hata ne kadar erken tespit edilirse, o kadar iyidir veya ürünün test edilmesine kadar tespit edilemeyebilir. Tasarım aşamasının çıktıları resmi gösterim biçimindeyse, doğrulama için ilgili araçları kullanılmalıdır, aksi takdirde doğrulama ve onaylama için kapsamlı bir tasarım incelemesi kullanılabilir.
Yapılandırılmış doğrulama yaklaşımı ile gözden geçirenler, bazı koşulları gözden kaçırmanın neden olabileceği hataları tespit edebilir. İyi bir yazılım tasarımı, doğruluğu ve kalitesi için iyi bir tasarım incelemesi önemlidir.