YAZILIM MİMARİLERİ
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 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 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 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 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 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 Ü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İ SON ÜRÜN 3. SÜRÜM İLK SÜRÜM 2. SÜRÜM
İ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 1.SÜRÜM 2.SÜRÜM 3.SÜRÜM
Araştırma Tabanlı Model Bu model yap-at prototipi olarak da bilinir 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 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 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 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