Transcript 3. Hafta

Yazılım Mühendisliği Yöntemleri
Yazılım mühendisliği, artık bir
bilim dalı olmasına rağmen
henüz matematik, fizik, inşaat
mühendisliği gibi çok sabit
temellere dayanmamaktadır.
Birçok bakımdan yazılım
mühendisliğinin alt
süreçleri sanatsal bir
özellik taşımaktadır.
Her ne kadar standartlar
tanımlaşmış olsa da hala
daha hızlı ve güvenilir
şekilde yazılım geliştire
bilmek için büyük
arayışlar vardır.
Yöntembilim (methodology)
yazılım yaşam çevrimi
boyunca kullanılacak süreç,
belirtim, belgelendirme gibi
yöntemler bütününü içeren
bir disiplindir.
Günümüzde pek çok
sayıda yöntembilim
oluşmuştur.
Yöntembilimler de yazılım
mühendisliğinin
evrimleriyle beraber
şekilde gelişmektedir.
Şimdi her ne kadar seçilen
yöntembilime, müşteriye ve
geliştiriçiye bağlı olsa da
yazılım geliştirme evrelerinde
yaygın olarak kullanılar bazı
modelleri görelim.
Klasik Çevrim çağlayan,
şelale, büyük tasarım
modeli yada geleneksel
model olarak adlandırılır.
Sistematik olarak
ilerleyen ardışık bir
yaklaşımla yazılım
geliştirilmesini sağlar.
Tüm kullanıcı gereksinimleri
belirlenir, isterler tanımlanır,
buna göre tasarım yapılır,
gerçekleştirim sonunda birimle
tümleştirilir ve sistem denenerek
teslim edilip bakım aşaması
başlatılır.
Klasik Çevrim en eski ve
en yaygın yazılım
geliştirme tekniğidir
ancak bazı eleştirilere
uğramıştır.
Gerçek projeler çok nadir
olarak ardışık sıra izler.
Çoğunlukla çevrim tekrarı
yaşanır, bu nedenle de
maliyet ve teslim süresi
yükselir.
Müşterinin tüm isterleri bir
defada ve açıklıkla
tanımlaya bilmesi çoğu
zaman mümkün değildir ve
daha projenin başında
belirsizlikler ortaya çıkar.
Müşteri, ürünün tamamı
bitinceye kadar beklemek
durumundadır.Çalışan bir
sürümün ilk ortaya çıkışı çevrim
içinde çok ileride
olabilir.Müşterinin hayal
kırıklığına uğraması ise projenin
başarısız olması demektir.
Geliştirici personel genellikle
kod yazmaya eğilimlidir.bu
nedenle, çözümleme,
tasarım gibi süreçlerden
geçmeye alışık olmayan
personelin heveslendirilmesi
güç olabilir.
Klasik modelde yazılım gelişimi
doğrusaldır.
Bilgi akışı yalnız bir yöne
doğrudur ve herhangi bir sorunla
karşılaşıldığında önceki aşamalar
zarar görmeden yerel çözümler
buluna bilir.
“V” Modeli adından da
anlaşılacağı gibi "V" yapısında
bir yol izlenir ve adımlar bu
şekilde gerçekleştirilir. Bu yol
üzerinde sol taraf üretimi sağ
taraf ise test işlemini ifade
eder.
Bu modelde yer alan
çıktıları "Kullanıcı
Modeli", "Mimari Model"
ve "Gerçekleştirim
Modeli" adı altında
toplayabiliriz.
Kullanıcı modelinde geliştirme
sürecinin kullanıcı ile olan
ilişkileri tanımlanmakta ve
sistemin nasıl kabul
edileceğine ilişkin sınama
belirtimleri ve planları ortaya
çıkarılmaktadır.
Mimari modelde sistem
tasarımı ve oluşacak alt
sistem ile tüm sistemin
sınama işlemlerine ilişkin
işlevler ele alınmaktadır.
Gerçekleştirim
modelinde de yazılım
modüllerinin kodlanması
ve sınanmasına ilişkin
fonksiyonlar ele
alınmaktadır.
Bu model belirsizliklerin az
iş tanımlarının belirgin
olduğu bilişim teknolojileri
projeleri için uygun bir
modeldir. Ayrıca model
kullanıcının projeye katkısını
artırmaktadır.
Spiral model hem klasik
hem de prototipleme
yöntemlerinin iyi
yönlerinin
birleştirilmesiyle
oluşturulmuştur.
Bu modelde risk analizi
ön plana çıkmıştır.
Yinelemeli artımsal bir
yaklaşım vardır.
Her döngü bir fazı ifade eder
ve doğrudan adım
tanımlama gibi bir faz
yoktur.
Ayrıca prototip yaklaşımı
vardır.
Bu modeldeki süreçler
planlama, risk analizi,
üretim, kullanıcı
değerlendirmesidir.
Planlamada amaçlar,
olası seçenekler ve
kısıtlamalar
değerlendirilir.
Risk analiz kısmında diğer
yöntemlerde bulunmayan,
risk araştırması ve olası
çözüm ler bulunması
aşamasıdır.
Üretim ürünün geliştirildiği
mühendislik aşamasıdır.
Kullanıcı değerlendirmesi
geliştirilen ürünü inceleme
ve değerlendirme
aşamasıdır.
Bu aşamalar en küçükten
başlayıp gittikçe büyüyerek
ürünün tamamlanmasına
kadar tekrar eden bir çevrim
halinde olduğundan bu
modele spiral denilmiştir.
Spiral modeli klasik çevrimi
geliştirme için kullanmakta,
prototipleme yoluyla da
riskleri en aza indirgemeyi
amaçlamaktadır.
Evrimsel bir yaklaşım olarak,
müşteri ve geliştiriçinin her
evrim sırasında beraberce
riskleri anlaması ve
önlemler almasını
sağlamaktadır.
Klasik çevrimi esas alan
çeşitli geliştirme yöntemleri
bulunur.
Evrimsel geliştirme modeli
aşamalar, diğer bir değişle
evrimler halinde ürün ortaya
çıkarmayı hedefler.
Her evrinde geliştirilen
ürünler uygulama
alanında tam işlevselliğe
sahiptir.
Ortaya çıkan her ürün teslim
edilerek kullanıma sunulur.
Ürünün kullanımı sırasında
elde edilen veriler geri
beslemeler ve yeni
gereksinimler bir sonraki
evrime geçilir.
Her yeni evrim, sistemin
kapsamını, işlevlerini ve
yeteneklerini biraz daha
artırır.
Sürüm1
Sürüm2
Sürüm3
Modelin uygulamadaki başarısı
ilk evrimde ortaya çıkan ürüne
bağlıdır.
İlk ürün pilot ürün olarak
değerlendirilir ve daha sonraki
ürünler bu ürünü esas alır.
Evrimsel prototipleme
evrimsel geliştirmeden
biraz farklı olarak, her
evrinde ortaya bir
prototip, yani ön ürün
çıkarılır.
Ön ürünün uygulama
alanında denenmesinden
sonra, kullanıcı girdileri
alınarak bir başka ön ürün
oluşturulur ve denemeye
sunulur.
Bu şekilde geliştirmeye devam
edilerek ürün son haline
getirilir ve sonra kullanıma
sunulur.
Evrinsel gelişmeden farklı
olarak, ara aşamalarda
müşteriye tam bir sürüm teslim
edilmez.
KULLANICI GİRDİLERİ
İLK
SÜRÜM
2.
SÜRÜM
3.
SÜRÜM
SON ÜRÜN
İsterlerin çoğunluğunun belirsiz
olduğu ve kullanıcıya ne
istediği tam bilemediği
durumlarda, bu model ile
kullanıcıya ön ürünler
sunularak isterlerin daha iyi
tanımlanması sağlanır.
Artımlı geliştirme
modeli, isterlerinin tamamı
belirli olan bir ürünün
sürümler geliştirilmesi
ilkesine dayanmaktadır.
Önce en temel isterlere
göre çekirdek yapıda
olan ilk ürün geliştirilir.
Bu ürün asıl sistemin
temel işlevlerini yerine
getirebilecek
durumdadır; amcak bazı
işlevleri eksiktir.
Sonraki her artımda, ya da
sürümde, isterlerin bir kısmı
daha gerçekleştirilerek
çekirdek ürüne yeni işlevler
kazandırılır ve her sürüm bir
öncekinden fazla işlevselliğe
sahiptir.
Yani, sürümlerde eksiklikler
bulunduğundan ürünün tam
kullanımı mümkün olmaz.
Sistem henüz
gerçekleştirilmemiş yetenekleri
ve işlevleri hakkında
kullanıcıya uyarı iletileri verir.
Bu modelde güvenli bir
şekilde ilerlenebilir ve
sistem her sürümde
sınanarak çekirdek sürüm
güçlendirilir ve ana sürüm
ortaya çıkarılır.
4.SÜRÜM
3.SÜRÜM
1.SÜRÜM
2.SÜRÜM
Araştırma Tabanlı Model
Bu model yap-at prototipi
olarak da bilinir. Araştırma
ortamları bütünüyle
belirsizlik üzerine çalışan
ortamlardır.
Yapılacak işlerden edinilecek
sonuçlar belirgin değildir.
Geliştirilen yazılımlar genellikle
sınırlı sayıda kullanılır ve
kullanım bittikten sonra işe
yaramaz hale gelir ve atılır.
Model-zaman-fiyat
kestirimi olmadığı için
sabit fiyat
sözleşmelerinde uygun
değildir.
Gelişigüzel Model
Bu süreç modelinde
herhangi bir yöntem
yoktur. Yazılım tamamen
geliştiren kişiye bağlıdır.
İleri zamanlarda geliştirilen
yazılımı hazırlayan kişi bile
anlamakta zorluk çekebilir.
Bu yüzden izlenebilirliği ve
bakımı çok zordur.
Daha çok 1960'lı yıllarda
kullanılan bir yöntemdir.
Genellikle tek başına yazılım
geliştirenler tarafından tercih
edilmiştir. Geliştirilen yazılımın
programlaması diğer metotlarla
geliştirilen yazılımların
programlamasına göre basittir.
GENEL YAZILIM MİMARİSİ
Donanımda olduğu gibi
yazılım da belirli yapı
taşlarından
oluşmaktadır
Elektronik donanım üzerinde
çalışan her türlü yazılımı
genel bir yazılım çerçevesi
içinde düşünürsek, bu
çerçeve içinde mutlaka
belirli bir mimari öne
çıkacaktır.
Uygulama yazılımlarının
düzeyi dikkate alınarak
sistem yazılım mimarisi
üçe ayrılır.
Doğrudan çalıştırma en
basit mimari, doğrudan
bir donanım üzerinde
çalışan ve yanlızca
makine kodundan oluşan
uygulama yazılımıdır.
Bu tür yazılımlar daha çok
gömülü sistemlerde
bulunurlar.
Bir eprom içinde saklaman
çamaşır makinesi programı
gibi.
Basit mimari
Eğer bilgisayar donanımı
üzerinde belirli süreçleerin
eşgüdüm içinde yürütülmesi,
sistem özkaynaklarının iyi
denetlenmesi ve çeşitli giriş/çıkış
işlemleri isteniyorsa amaca
uygun bir işletim sistemi seçilir ve
uygulama yazılımı bunun
üzerinde çalışır.
Karmaşık mimari
Uygulama yazılımını çeşitli
geliştirme ve bakım kolaylıkları
nedeniyle bir ara katman
yazılımı ile alttaki işletim
sistemi ve donanımdan
ayırmak geliştirme ve işletim
bakımından çok olmaktadır.
KULLANICI-SUNUCU
MİMARİLERİ
Ağ üzerinde haberleşen
bilgisayarlardan oluşan dağınık
bilgi işleme ortamlarının
yaygınlaşmasıyla bu mimaride
yaygın hale gelmiştir
Bu mimari yazılıma özgü
olduğundan ister merkezi,
ister dağınık ortamda olsun
donanımdan bağımsız
olarak kolaylıkla uygulana
bilir.
Kullanıcı ve sunucu
arasındaki veri iletişimi
ve denetim genellikle iki
parçalı olarak geliştirilen
ayrık yazılım bileşenleri
ile sağlanır.
Bu şekilde kullanıcılar bir
tane olabileceği gibi
yüzlerce de ola bilir.
Üç temel yazılım bileşeni
bulunur.
Kullanıcı belirli bir isteği
kullanıcıdan alıp
sunucuya gönderen,
sonra da yanıtı alıp tekrar
kullanıcıya veren
bileşendir.
Genel olarak ayrı bir
bilgisayar veya uçbirim iş
istasyonu üzerinde
çalışırlar.
Kullanıcı, bir işletmen
yani bir insan olabileceği
gibi bir başka yazılım
bileşeni hatta başka bir
sistem de olabilir.
Kullanıcı kullanıcıdan gelen
isteği oluşturan verilerin
doğrulanması, sonra da bu
isteğin belirli iletiler halinde
sunucuya gönderilmesini
sağlar.
İnsanla etkileşim
halindeki pek çok
sistemde bu işlevi
grafiksel bir ara yüzü
yapar.
Uygulamanın
karmaşıklığına göre
bazı kullanıcılar birden
fazla sunucu
kullanabilirler.
Sunucu bir ya da daha
fazla kullanıcı tarafından
gönderilen istekleri
yerine getirerek sonuçları
geri gönderen yazılım
bileşenidir.
Genellikle bir kullanıcı
arayüzü bulunmaz ve
ayrı bir bilgisayarda
çalışırlar.
Sunucu bilgisayar donanımı
görevin türüne ve işyüküne
bağlı olarak normal bir
bilgisayar olabileceği gibi
çok güçlü bir bilgisayar da
olabilir.
Genellikle çok sayıda
işlemciye büyük disk
sığalarına ayrık
yedekleme
donanımlarına sağiptirler.
Görev-kritik olanlar hem
yazılım hem donanım
olarak hataya dayanıklı
olurlar.
Sürekli gelişen teknolojiye
uyum için en kritik nokta
olduklarından ölçeklenebilir
ve yükseltilebilir
yapıdadırlar.
Sunucuların yazılım
yapıları da değişik
olabilir.
Bir kısmı herkese sırayla
hizmet veren tek bir süreçten
oluşabildiği gibi bir kısmı da
her kullanıcı oturumu için ayrı
bir alt sunucuyu dinamit
olarak yaratır.
Sunucu yazılımı,
genellikle iş yapmadan
kullanıcıdan istek
gelmesini bekler, gelen
isteğe yanıt verir ve
tekrar beklemeye başlar.
Eğer çok sayıda kullanıcı
varsa bunların belirli bir
anda istekte bulunmaları
olasılıkları matematiksel
olarak hesaplanmalıdır.
Yoğun ve düzensiz isteklerin
olduğu ortamlarda ortalama
hizmet süresini hesaplamak
için kullanılabilecek “kuyruk
teorisi” bunlardan biridir.
Bir sunucunun başarılı
olabilmesi için her zaman
her kullanıcıya yeterince
hızlı olarak servis
verebilmesi gereklidir.
Sunucular görevlerine
göre birkaç çeşit
olabilirler.
Dosya sunucuları genellikle
bir bilgisayar ağı üzerindeki
dosya ve dizinlerin ortak
kullanıcılar tarafından
paylaşımını sağlarlar.
Bu sunucu diğer bir
adıyla kütük sunucusu
kullanıcılarla aynı işletim
sistemi ve dosya yapısını
kullanmak zorunda
değildir.
Ancak kullanılan iletişim
yazılımı bu çevrimi kendi
içinde saydam olarak
yaparlar.
Kullanıcıların kendi
bilgisayarlarının bir uzantısı
olarak ayrı birer sürücü gibi
bağlanabildiği dosya dosya
sunucuları olabileceği gibi
bazı paket yazılımları kendi
üzerinden çalıştıran
sunucular da vardır.
Ağ sunucuları bazı işletim
sistemleri tüm yazılımları
belirli bir sunucu
üzerinde tutarlar.
Gerektiği zaman uç
bilgisayarlar birer kullanıcı
olarak dosyaları ağ üzerinden
çekip kendi üzerlerinde
çalıştırırlar.
Bu tür sistemlerde
yazılımın tek bir kopyası
sunucuya yüklenir, fakat
fazla sayıda kullanıcı
lisansı olabilir.
Kullanıcı bu yazılıma ait
yürütülebilir kodu kendi
üzerinden çektikten
sonra kendi işlemcisi
üzerinde koşturur.
Veritabanı sunucuları bu
sunucuların en büyük
özellikleri büyük disk
kapasiteleri ve veritabanı
yönetim sistemleridir.
Kullanıcının kullanıcı
üzerinde kullanıcının SQL
gibi bir veritabanı kullanım
dili ile oluşturduğu komutlar
sunucuya gönderilir.
Sunucu kendi işlemci
gücüyle veritabanı
üzerinde arama yapar
sonuç verileri işler ve
kullanıcıya gönderir.
Web Sunucusu
İnternet üzerinde bir web
sitesinin yayınından
sorumlu olan sunucudur.
Web servisi internet
üzerinde en yaygın olarak
kullanılan servisdir.
Temel olarak HTTP
(Hyper Text Transfer
Protocol) protokolü
kullanılarak verilen bir
servistir.
Red Hat Linux dağıtımları
ile beraber web servisi
için iki farklı sunucu
gelmektedir.
Bunlardan birincisi
Apache web sunucusu
, diğeri tux web
sunucusudur
Servis sunucuları bir
bilgisayar üzerinde ve işletim
sistemi kapsamında çalışan
bir kısım sunucu yazılımlar
uygulama yazılımı ya da
işletim sisteminden gelen
istekleri karşılamaya yararlar.
Bir ağ üzerindeki
bilgisayarları tanımlamaya
yarayan isim sunucusu ilk
giriş sunucusu bunlara
örnektir.
İşlem yönetimi günümüz
işletim sistemlerinin
önemli bir parçasıdır.
İşletim sisteminin işlemlere
yer alması,
aralarında haberleşmeyi
sağlaması onun önemli
görevlerindendir.
İşletim sistemi kaynakları
işlemlere göre ayırmalı,
işlemleri veri aktarımı ve
paylaşımına uygun hale
getirmeli, her işlemin
kaynağını diğer işlemlerden
korumalı ve işlemler arası
senkronizyonu sağlamalıdır.
Bunları yapabilmek için
işletim sistemi her işlem için
o işlemin mevkisini ve sahibi
tanımlayan ve işletim
sistemini her veri üzerinde
kontrol uyguladığı bir veri
yapısı sağlamalıdır.
İki Katmanlı Mimari
İki katmanlı mimaride,
kullanıcı arayüzü ve
uygulama yazılımları bir
katman, veriler ise ikinci
katman olarak kullanılır.
Kullanıcı arabirimi ve
uygulama yazılımlarının
olduğu bilgisayarlar istemci,
verilerin olduğu bilgisayar
ise sunucudur.
İki katmanlı mimaride,
uygulama programları her
bilgisayara ayrı ayrı
yüklenmeli ve program
değişikliği tekrardan tüm
bilgisayarlara yeniden
yüklenmelidir.
Veri tabanı tüm istemciler
tarafından kullanıldığı için,
kullanıcı ve iş yükü arttıkça
kullanımdaki etkinlik
azalabilmektedir.
Program ağdaki başka bir
bilgisayara yüklenerek,
yetki zaaflarına yol
açabilir.
Üç Katmanlı Mimari
Üç katmanlı mimaride,
kullanıcı arayüzü, uygulama
yazılımları, veriler ayrı
bilgisayarlarda
bulunmaktadır.
Üç katmanlı mimaride,
web tabanlı uygulamalar
ile gerçekleştirilmektedir.
Bu uygulamaları
kullanmak için bir adet
web brovser olması
yeterlidir.
Uygulama
yazılımlarındaki bir
değişiklik aynı anda
yazılımı kullanan tüm
programlarda etkin
olacaktır.
Gereksiz yetkilendirmeler
ortadan kalkacaktır. Veri
tabanı ile bağlantı uygulama
yazılımı tarafından yapılacağı
için veri tabanı daha etkin
kullanılmaktadır.
Dağıtık mimariler
dağıtık bilgi işlemenin
özelliklerine bu bölümde
değinmiştik.
Bu özellikten yarar
sağlamak üzere bazı
uygulamalar dağıtık
olarak
gerçekleştirilirler.
Belirli bir kullanıcı yada
sunucu mantığı yoktur ancak
iletişimi kolaylaştırmak ve
güvenilir hale getirmek için
genellikle bir ara katman
vardır.
Dağıtık mimari ile
hataya dayanıklı
sistemler geliştirmek
daha kolaydır.
Genel olarak daha
esnek bir yapıya sahip
oldukları için rahatlıkla
büyüme veya küçülme
yapılabilir.
HAZIRLIYANLAR
Öğr. Gör. Mevlüt İNAN