Doç. Dr. Sedat Akleylek
(sedat.akleylek@omu.edu.tr) tarafından hazırlanan bu videonun 5846 sayılı Fikir ve Sanat Eserleri Kanunu kapsamında başka bir
yolla yayımlanmasına izin verilmemektedir.
Başka bir ifadeyle, bu videonun izin
alınmaksızın BİL 407 Yazılım Mühendisliği dersine kayıtlı olmayan kişiler ile paylaşılması,
OMÜ ortamı dışına
taşınması, paylaşılması veya
saklanması yasaktır.
BİL 407 Yazılım Mühendisliği Hafta 13
Doç. Dr. Sedat Akleylek
sedat.akleylek@bil.omu.edu.tr
İçerik
• Güvenilebilirlik özellikleri
• Sosyoteknik sistemler
• Fazlalık ve çeşitlilik
• Güvenilebilir süreçler
• Biçimsel yöntemler ve güvenilebilirlik
3
Kaynaklar
• Ian Sommerville, Software Engineering, 10th Edition, Addison-Wesley, 2015.
• SWEBOK, Guide to the Software Engineering Body of Knowledge: 2004 Version, IEEE.
• https://www.youtube.com/user/SoftwareEng Book
• IEEE-Software Requirements Specification Template
4
Sistem Güvenilebilirliği
• Bilgisayar tabanlı birçok sistem için en önemli sistem özelliği sistemin güvenilirliğidir.
• Bir sistemin güvenilirliği, kullanıcının o sisteme olan güven derecesini yansıtır. Kullanıcının,
sistemin umduğu gibi çalışacağına ve normal kullanımda 'başarısız olmayacağına' olan
güveninin derecesini yansıtır.
• Güvenilebilirlik, sistemlerin erişilebilirlik,
güvenilirlik, emniyet ve güvenlik özelliklerini kapsayan bir terimdir. Bunların hepsi birbirine bağlıdır.
Güvenilebilirliğin Önemi
• Sistem arızalarının, başarısızlıktan etkilenen çok sayıda insanda büyük etkileri olabilir.
• Güvenilir olmayan ve emniyetsiz veya güvensiz sistemler kullanıcıları tarafından kabul görmezler.
• Arıza ekonomik kayıplara veya fiziksel hasara yol açarsa, sistem arızasının maliyetleri çok yüksek olabilir.
• Güvenilir olmayan sistemler, yüksek bir kurtarma maliyeti ile bilgi kaybına neden olabilir.
Arızanın Nedenleri
• Donanım arızası
Donanım, tasarım ve üretim hataları nedeniyle veya bileşenlerin doğal ömürlerinin sonuna ulaşması
nedeniyle hata verebilir.
• Yazılım arızası
Yazılım, teknik özellik, tasarım veya uygulamadaki hatalardan dolayı arıza verebilir.
• İşlemsel arıza
İnsan kullanıcıları hata yapar. Sosyoteknik
sistemlerdeki sistem arızalarının belki de en büyük tek nedeni.
Güvenilebilirlik Özellikleri
Temel Güvenilebilirlik Özellikleri
Temel Özellikler
• Erişilebilirlik
Sistemin çalışır durumda olma ve kullanıcılara faydalı servisler sunma olasılığı.
• Güvenilirlik
Sistemin, kullanıcıların beklediği gibi servisleri doğru bir şekilde sunma olasılığı.
• Emniyet
Sistemin insanlara veya çevresine ne kadar zarar vereceğine dair değerlendirme.
Temel Özellikler
• Güvenlik
Sistemin kazara veya kasıtlı saldırılara ne kadar direnebileceğine dair bir değerlendirme.
• Hayatta kalma
Ekipman arızası ve siber saldırılar gibi yıkıcı
olayların varlığında bir sistemin kritik servislerinin sürekliliğini ne kadar iyi koruyabileceğine dair bir değerlendirme.
Diğer Güvenilebilirlik Özellikleri
• Onarılabilirlik
Bir arıza durumunda sistemin ne ölçüde tamir edilebileceğini yansıtır
• Sürdürülebilirlik
Sistemin yeni gereksinimlere ne ölçüde uyarlanabileceğini yansıtır;
• Hata toleransı
Kullanıcı girdi hatalarının ne ölçüde
önlenebileceğini ve tolere edilebileceğini yansıtır.
Güvenilebilirlik Özellikleri Bağımlılıkları
• Güvenli sistem çalışması, sistemin mevcut olmasına ve güvenilir şekilde çalışmasına bağlıdır.
• Bir sistem, verileri harici bir saldırı nedeniyle bozulmuş olduğu için güvenilmez olabilir.
• Bir sisteme yapılan servis engelleme saldırıları, sistemi kullanılamaz hale getirmeyi amaçlar.
• Bir sisteme virüs bulaşmışsa, güvenilirliğine
veya emniyetine güvenemezsiniz.
Güvenilebilirlik Başarısı
• Sistemi geliştirirken yanlışlıkla hataların ortaya çıkmasını önleyin.
• Sistemde kalan hataları keşfetmede etkili olan Doğrulama ve Onaylama süreçlerini tasarlayın.
• Arıza oluştuğunda çalışmaya devam
edebilmeleri için sistemleri hataya dayanıklı olacak şekilde tasarlayın.
• Dış saldırılara karşı koruma sağlayan
muahafaza mekanizmaları tasarlayın.
Güvenilebilirlik Başarısı
• Sistemi çalışma ortamı için doğru şekilde yapılandırın.
• Siber saldırıları tanımak ve bunlara direnmek için sistem yetenekleri dahil edin.
• Bir arızadan sonra normal sistem servisinin geri yüklenmesine yardımcı olmak için
kurtarma mekanizmaları ekleyin.
Güvenilebilirlik Maliyetleri
• Güvenilebilirlik maliyetleri, artan güvenilebilirlik seviyelerine ihtiyaç duyulacağından dolayı
katlanarak artma eğilimindedir.
• Bunun iki nedeni var
Daha yüksek düzeyde güvenilebilirlik elde etmek için gerekli olan daha pahalı geliştirme tekniklerinin ve donanımların kullanılması.
Sistem istemcisini ve düzenleyicilerini gerekli
güvenilebilirlik düzeylerine ulaşıldığına ikna etmek için gerekli olan artırılmış test ve sistem onaylanması.
Maliyet/Güvenilebilirlik Eğrisi
Güvenilebilirlik Ekonomosi
• Güvenilebilirlik başarısının çok yüksek maliyetleri nedeniyle, güvenilir olmayan sistemleri kabul
etmek ve arıza maliyetlerini ödemek daha uygun maliyetli olabilir.
• Ancak bu, sosyal ve politik faktörlere bağlıdır.
Güvenilemeyen ürünler, gelecekteki işler için itibarını kaybedebilir.
• Sistem türüne bağlıdır - özellikle iş sistemleri için mütevazı güvenilirlik seviyeleri yeterli olabilir.
Sosyoteknik Sistemler
Sistemler ve Yazılım
• Yazılım mühendisliği yalıtılmış bir faaliyet değildir, ancak daha geniş bir sistem mühendisliği sürecinin parçasıdır.
• Yazılım sistemleri bu nedenle izole sistemler değildir, ancak insani, sosyal veya kurumsal bir amacı olan daha geniş sistemlerin temel bileşenleridir.
• Örneğin
Vahşi hava durumu sistemi, daha geniş hava durumu kayıt ve tahmin sistemlerinin bir parçasıdır
Bunlar arasında donanım ve yazılım, tahmin süreçleri,
sistem kullanıcıları, hava tahminlerine bağlı kuruluşlar vb.
yer alır.
Sosyoteknik Sistemler Yığıtı (STS)
STS Yığıtının Katmanları
• Teçhizat
Bazıları bilgisayar olabilen donanım aygıtları. Çoğu cihaz bir tür gömülü sistem içerecektir.
• İşletim sistemi
Sistemdeki daha yüksek yazılım katmanı seviyeleri için bir dizi ortak kolaylık sağlar.
• İletişim ve veri yönetimi
Uzak sistemlere ve veritabanlarına erişim sağlayan ara yazılım.
• Uygulama sistemi
Bazı organizasyon gereksinimlerini karşılamak için özel işlevler.
STS Yığıtının Katmanları
• İş süreçleri
İşletmenin faaliyetlerini destekleyen, insanları ve bilgisayar sistemlerini içeren bir dizi süreç.
• Organizasyonel
Sistemin işleyişini etkileyen daha yüksek seviyeli stratejik iş faaliyetleri.
• Sosyal
Sistemin işleyişini etkileyen kanunlar, düzenleme ve kültür.
Bütünsel Sistem Tasarımı
• Bir sistemdeki katmanlar arasında etkileşimler ve bağımlılıklar vardır ve bir düzeydeki değişiklikler diğer düzeyleri de etkiler.
Örnek: Yönetmeliklerdeki (toplumdaki) değişiklik, iş
süreçlerinde ve uygulama yazılımında değişikliklere yol açar.
• Güvenilebilirlik için bir sistem perspektifi gereklidir
STS yığıtının kapalı katmanları içindeki yazılım hatalarını içerir.
Bitişik katmanlardaki hataların ve arızaların bir
sistemdeki yazılımı nasıl etkileyebileceğini anlayın.
Mevzuat ve Uygunluk
• Artık dünyada neredeyse evrensel olan genel ekonomik organizasyon modeli, özel sektöre ait şirketlerin mal ve hizmetler sunması ve bunlardan kar elde etmesidir.
• Vatandaşlarının güvenliğini sağlamak için çoğu hükümet, özel sektöre ait şirketleri,
ürünlerinin güvenli ve emniyetli olmasını
sağlamak için belirli standartları takip etmeleri
için düzenler (özgürlüğünü sınırlar).
Mevzuat Sistemleri
• Birçok kritik sistem mavzuata uygun sistemlerdir, bu da kullanımlarının, sistemler hizmete girmeden önce harici bir düzenleyici (mevzuatçı) tarafından onaylanması
gerektiği anlamına gelir
Nükleer sistemler
Hava trafik kontrol sistemleri
Tıbbi cihazlar
• Bir güvenlik ve güvenilebilirlik durumu, düzenleyici tarafından onaylanmalıdır. Bu nedenle, kritik sistem geliştirme, bir düzenleyiciyi sistemin güvenilebilir ve emniyetli olduğuna ikna etmek için kanıt
oluşturmalıdır.
Emniyet Mevzuatı
• Mavzuat ve uygunluk (kurallara uyarak) bir bütün olarak sosyoteknik sistem için geçerlidir ve sadece o sistemin yazılım öğesi için geçerli değildir.
• Emniyetle ilgili sistemlerin, düzenleyici tarafından emniyetli olarak onaylanması gerekebilir.
• Sertifikasyon elde etmek için, emniyet açısından kritik sistemler geliştiren şirketler, kurallara ve düzenlemelere uyulduğunu gösteren kapsamlı bir emniyet durumu
oluşturmalıdır.
• Sertifikasyon için dokümantasyon geliştirmek, sistemin kendisini geliştirmek kadar pahalı olabilir.
Fazlalık ve Çeşitlilik
Fazlalık ve Çeşitlilik
• Fazlalık
Kritik bileşenlerin birden fazla sürümünü saklayın, böylece biri başarısız olursa bir yedek kullanılabilir.
• Çeşitlilik
Aynı işlevselliği farklı bileşenlerde farklı şekillerde sağlayın, böylece aynı şekilde arızalanmasınlar.
• Fazlalık ve çeşitli bileşenler, "ortak-tarz" hatalarından muzdarip olmamaları için bağımsız olmalıdır
Örneğin, farklı programlama dillerinde uygulanan
bileşenler, bir derleyici hatasının hepsini etkilemeyeceği anlamına gelir.
Çeşitlilik ve Fazlalık Örnekleri
• Fazlalık. Erişilebilirliğin kritik olduğu yerlerde (örneğin, e-ticaret sistemlerinde), şirketler normalde yedek sunucuları tutar ve bir arıza meydana gelirse bunlara otomatik olarak
kullanır.
• Çeşitlilik. Dış saldırılara karşı direnç sağlamak için, farklı işletim sistemleri (ör. Windows ve Linux) kullanılarak farklı sunucular
uygulanabilir.
Süreç Çeşitliliği ve Fazlalığı
• Onaylama gibi süreç etkinlikleri, sistemi
onaylamak için test etme gibi tek bir yaklaşıma bağlı olmamalıdır.
• Fazlalık ve çeşitli süreç faaliyetleri, özellikle doğrulama ve onaylama için önemlidir.
• Çoklu, farklı süreç faaliyetleri birbirini
tamamlar ve yazılımda hatalara yol açabilecek
süreç hatalarını önlemek için çapraz kontrol
yardımına izin verir.
Fazlalık ve Çeşitlilik ile İlgili Sorunlar
• Bir sisteme çeşitlilik ve fazlalık eklemek, sistem karmaşıklığını artırır.
• Bu, gereksiz sistem bileşenleri arasındaki beklenmeyen etkileşimler ve bağımlılıklar nedeniyle hata olasılığını artırabilir.
• Bu nedenle bazı mühendisler, basitliği ve kapsamlı doğrulama ve onaylama'yı yazılım
güvenilebilirliğine giden daha etkili bir yol olarak savunur.
• Airbus FCS mimarisi fazlalıklı/çeşitlidir; Boeing 777 FCS mimarisinde yazılım çeşitliliği yoktur
Güvenilebilir Süreçler
Güvenilebilir Süreçler
• Minimum sayıda yazılım hatası sağlamak için, iyi
tanımlanmış, tekrarlanabilir bir yazılım sürecine sahip olmak önemlidir.
• İyi tanımlanmış tekrarlanabilir bir süreç, tamamen bireysel becerilere bağlı olmayan bir süreçtir; daha ziyade farklı insanlar tarafından canlandırılabilir.
• Düzenleyiciler, iyi bir yazılım mühendisliği
uygulamasının kullanılıp kullanılmadığını kontrol etmek için süreç hakkındaki bilgileri kullanır.
• Hata tespiti için, süreç faaliyetlerinin doğrulama ve onaylamaya adanmış önemli çabayı içermesi gerektiği açıktır.
Güvenilebilir Süreç Özellikleri
• Açıkça tanımlanmış
Yazılım üretim sürecini yürütmek için kullanılan, tanımlanmış bir süreç modeline sahip bir süreç.
Geliştirme ekibinin süreç modelinde tanımlanan süreci izlediğini kanıtlayan süreç sırasında veri toplanmalıdır.
• Tekrarlanabilir
Bireysel yorumlamaya ve muhakemeye dayanmayan bir süreç. Süreç, geliştirmeye kimin dahil olduğuna bakılmaksızın projeler genelinde ve farklı ekip
üyeleriyle tekrarlanabilir.
Güvenilebilir Süreçlerin Özellikleri
Güvenilebilir Süreç Faaliyetleri
• Gereksinimlerin mümkün olduğunca eksiksiz ve tutarlı olup olmadığını kontrol etmek için gereksinim gözden geçirilir.
• Gereksinimlerdeki değişikliklerin kontrol edilmesini ve önerilen gereksinim değişikliklerinin etkisinin
anlaşılmasını sağlamak için gereksinim yönetimi.
• Biçimsel tanımlama, yazılımın matematiksel bir modelinin oluşturulduğu ve analiz edildiği yer.
• Yazılım tasarımının bir dizi grafik model olarak açıkça belgelendiği ve gereksinimler ile bu modeller
arasındaki bağlantıların belgelendiği sistem modellemesi.
Güvenilebilir Süreç Faaliyetleri
• Sistemin farklı tanımlarının farklı kişiler tarafından incelendiği ve kontrol edildiği tasarım ve program denetimleri.
• Programın kaynak kodu üzerinde otomatik kontrollerin yapıldığı statik analiz.
• Kapsamlı bir dizi sistem testinin tasarlandığı test planlama ve yönetimi.
Bu testlerin sistem gereksinimlerini kapsadığını ve test sürecinde doğru şekilde uygulandığını göstermek için test sürecinin dikkatlice yönetilmesi gerekir.
Güvenilebilir Süreçler ve Çeviklik
• Güvenilebilir yazılım genellikle sertifika gerektirir, bu nedenle hem süreç hem de ürün
dökümanlarının üretilmesi gerekir.
• Ön gereksinim analizi, sistemin emniyetini ve
güvenliğini tehlikeye atabilecek gereksinimleri ve gereksinim çatışmalarını keşfetmek için de
gereklidir.
• Bunlar, gereksinimlerin ve sistemin birlikte geliştirilmesinin çevik geliştirilmesinde ve
dokümantasyonun en aza indirilmesinde genel yaklaşımla çatışır.
Güvenilebilir Süreçler ve Çeviklik
• Yinelemeli geliştirme, önce test geliştirme ve
geliştirme ekibine kullanıcı katılımı gibi teknikleri içeren çevik bir süreç tanımlanabilir.
• Takım bu süreci takip ettiği ve eylemlerini
belgelediği sürece, çevik yöntemleri kullanılabilir.
• Bununla birlikte, ek dokümantasyon ve planlama şarttır, bu nedenle "saf çevik" güvenilir sistem
mühendisliği için pratik değildir.
Biçimsel Yöntemler ve
Güvenilebilirlik
Biçimsel Tanım
• Biçimsel yöntemler, yazılımın matematiksel
temsiline ve analizine dayanan yazılım geliştirme yaklaşımlarıdır.
• Biçimsel yöntemler şunları içerir:
Biçimsel tanım
Tanım analizi ve ispat
Dönüşümsel geliştirme
Program doğrulama
• Biçimsel yöntemler, bazı programlama hatalarını önemli ölçüde azaltır ve güvenilir sistem
mühendisliği için uygun maliyetli olabilir.
Biçimsel Yaklaşımlar
• Doğrulama tabanlı yaklaşımlar
Tanım ve bu tanımı uygulayan bir program gibi bir yazılım sisteminin farklı temsillerinin eşdeğer olduğu kanıtlanmıştır.
Bu, uygulama hatalarının olmadığını gösterir.
• İyileştirme tabanlı yaklaşımlar
Bir sistemin temsili, sistematik olarak başka bir alt düzey temsile dönüştürülür, örn. bir tanım otomatik olarak bir uygulamaya dönüştürülür.
Bu, dönüşüm doğruysa temsillerin eşdeğer olduğu anlamına gelir.
Biçimsel Yöntemlerin Kullanımı
• Biçimsel yöntemlerin temel faydaları, sistemlerdeki hata sayısını azaltmaktır.
• Sonuç olarak, ana uygulama alanları güvenilir sistem mühendisliğidir. Bu alanda biçimsel
yöntemlerin kullanıldığı birkaç başarılı proje olmuştur.
• Bu alanda, biçimsel yöntemlerin kullanımı büyük olasılıkla maliyet etkin olacaktır çünkü yüksek
sistem hatası maliyetlerinden kaçınılmalıdır.
Hatanın Sınıfları
• Tanım ve tasarım hataları ve eksiklikler.
Yazılımın biçimsel bir modelini geliştirmek ve analiz etmek, yazılım gereksinimlerindeki hataları ve eksiklikleri ortaya çıkarabilir. Model, kaynak koddan otomatik veya sistematik olarak üretilirse, model denetimi kullanılarak yapılan
analiz, eşzamanlı bir sistemde kilitlenme gibi oluşabilecek istenmeyen durumları bulabilir.
• Bir tanım ve bir program arasındaki tutarsızlıklar.
Bir iyileştirme yöntemi kullanılırsa, geliştiricilerin, yazılımı tanımla tutarsız hale getiren hatalarından kaçınılır. Program kanıtlama, bir program ile onun tanımı arasındaki
tutarsızlıkları keşfeder.
Biçimsel Tanımın Faydaları
• Biçimsel bir tanım geliştirmek, sistem gereksinimlerinin ayrıntılı olarak analiz edilmesini gerektirir. Bu,
gereksinimlerdeki sorunları, tutarsızlıkları ve eksiklikleri tespit etmeye yardımcı olur.
• Tanım biçimsel bir dilde ifade edildiğinden,
tutarsızlıkları ve eksiklikleri keşfetmek için otomatik olarak analiz edilebilir.
• B yöntemi gibi biçimsel bir yöntem kullanıyorsanız, biçimsel tanımı 'doğru' bir programa
dönüştürebilirsiniz.
• Program, tanımına göre resmi olarak doğrulanırsa, program test maliyetleri düşebilir.
Biçimsel Yöntemlerin Kabulü
• Biçimsel yöntemler, pratik yazılım geliştirme üzerinde sınırlı etkiye sahiptir:
Sorun sahipleri biçimsel bir tanımı anlayamaz ve bu nedenle, gereksinimlerinin doğru bir şekilde temsil edilip edilmediğini değerlendiremez.
Biçimsel bir tanımı geliştirmenin maliyetlerini değerlendirmek kolaydır ancak faydaları değerlendirmek daha zordur. Yöneticiler bu nedenle biçimsel yöntemlere yatırım yapma konusunda
isteksiz olabilirler.
Yazılım mühendisleri bu yaklaşıma aşina değiller ve bu nedenle biçimsel yöntemlerin kullanımını önerme konusunda isteksizler.
Biçimsel yöntemlerin büyük sistemlere ölçeklendirilmesi hala zordur.
Biçimsel tanım, çevik geliştirme yöntemleriyle gerçekten uyumlu değildir.
Anahtar Noktalar
• Sistem güvenilebilirliği önemlidir çünkü kritik sistemlerin arızalanması ekonomik kayıplara, bilgi kaybına, fiziksel
hasara veya insan yaşamına yönelik tehditlere yol açabilir.
• Bir bilgisayar sisteminin güvenilebilirliği, kullanıcının
sisteme olan güven derecesini yansıtan bir sistem özelliğidir.
Güvenilirliğin en önemli boyutları kullanılabilirlik, güvenilirlik, emniyet, güvenlik ve dayanıklılıktır.
• Sosyoteknik sistemler, bilgisayar donanımı, yazılımı ve insanları içerir ve bir organizasyon içinde yer alır.
Organizasyonel veya ticari amaç ve hedefleri desteklemek için tasarlanmıştır.
Anahtar Noktalar
• Bir sistemdeki arızalar en aza indirilecekse,
güvenilebilir, tekrarlanabilir bir sürecin kullanılması çok önemlidir. Süreç, gereksinim tanımından sistem
uygulamasına kadar tüm aşamalarda doğrulama ve onaylama faaliyetlerini içermelidir.
• Donanım, yazılım süreçleri ve yazılım sistemlerinde
fazlalık ve çeşitliliğin kullanılması, güvenilir sistemlerin geliştirilmesi için çok önemlidir.
• Bir sistemin biçimsel bir modelinin geliştirilmesi için temel olarak kullanıldığı biçimsel yöntemler, bir
sistemdeki tanım ve uygulama hatalarının sayısını azaltmaya yardımcı olur.
Sonraki Ders
• Kullanılabilirlik ve Güvenilirlik
• Güvenilirlik Gereksinimleri
• Hataya Dayanıklı Mimariler
• Güvenilirlik İçin Programlama
• Güvenilirlik Ölçümü
50