YAZILIM MÜHENDİSLİĞİNİN TEMEL İLKELERİ



Benzer belgeler
SİSTEM VE YAZILIM. o Bilgisayar sistemleri donanım, yazılım ve bunları işletmek üzere gerekli işlemlerden oluşur.

Yazılım Mühendisliği 1

YZM 2108 Yazılım Mimarisi ve Tasarımı

YAZILIM MÜHENDİSLİĞİ - 1

MESLEKİ TERMİNOLOJİ I 1. HAFTA YAZILIM MÜH. TEMEL KAVRAMLAR

9.DERS Yazılım Geliştirme Modelleri

Y I L D I Z T E K N I K Ü N İ V E R S İ T E S İ MÜHENDİSLİĞİ

Yazılım Süreçleri Software Processes

BMH-405 YAZILIM MÜHENDİSLİĞİ

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Bilgisayarda Programlama. Temel Kavramlar

BLG Sistem Analizi ve Tasarımı. Öğr. Grv. Aybike ŞİMŞEK

SİSTEM ANALİZİ VE TASARIMI

CENG 302 Yazılım Mühendisliği Yazılım Mimarisi - Devam. Alper UĞUR

Sistem Geliştirme Yaşam Döngüsü (The Systems Development Life Cycle) (SDLC)

YAZILIM MÜHENDİSLİĞİ Şubat 2012 Yrd.Doç.Dr. Yunus Emre SELÇUK GENEL BİLGİLER

Chapter 8 Yazılım Testi. Lecture 1. Chapter 8 Software testing

BMH-405 YAZILIM MÜHENDİSLİĞİ

1.Yazılım Geliştirme Metotları 1

Eylül 2007 de v1.0 ı yayınlanan SysML sayesinde endüstri mühendislerinin de ihtiyacı karşılanmış oldu.

Akış. Atik Yazılım Geliştirme Tanımı ve Kavramlar Tarihi Metotları Dünyada Atik Yazılım Geliştirme Örnekleri Sonuç BİL 588 2

Öğretim planındaki AKTS Ulusal Kredi

YAZILIM MÜHENDİSLİĞİ-1

AKIŞ ŞEMASI AKIŞ ŞEMASI AKIŞ ŞEMASI ŞEKİLLERİ GİRİŞ

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

Yazılım Mühendisliği Bölüm - 3 Planlama

YAZILIM GÜVENLİK TESTLERİ. H A L D U N T E R A M A N h a l d u n t e r a m a g m a i l. c o m

4. Bölüm Programlamaya Giriş

BÖLÜM 1 YAZILIM TASARIMINA GİRİŞ YZM211 YAZILIM TASARIMI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

design)1980li ve 1990lıyıllar Birleştirilmiş Modelleme Dili (Unified Modeling Language-(UML) yazılım geliştirme araçlarının temelidir.

ARDIŞIL DİYAGRAM YAPI DİYAGRAMI. Sistem Analizi ve Tasarımı Dersi

YAZILIM MİMARİLERİ DERSİ BİLGİSAYAR PROGRAMCILIĞI

Yazılım Çeşitleri. Uygulama Yazılımları. İşletim Sistemleri. Donanım

YMT 505-Yazılım Proje Yönetimi Giriş- Temel Kavramlar

Proje Yönetimi Profesyonellerinin Yetenekleri LinkedIn üzerinden incelemeler Erdem Seherler, MBA, PMP

5. PROGRAMLA DİLLERİ. 5.1 Giriş

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

YAZILIM KAVRAMINA BİR BAKIŞ. Gürcan Banger Elektrik Yük. Müh. ESOGÜ - 9 Nisan 2007

Bir yazılım geliştirme metodolojisi aşağıdaki adımlardan meydana gelir; Yazılım geliştirme sürecine destek verecek araçlar, modeller ve yöntemler.

YMT 312-Yazılım Tasarım ve Mimarisi Yazılım Mühendisliği ne Giriş

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

Yazılım Geliştirme Genel Tanımlar

WÜRTH ÜN MODERN STOK YÖNETİM SİSTEMİ ORSY

TEMEL BİLGİ TEKNOLOJİLERİ KULLANIMI


aselsan Açık Pozisyonlar Bilgi Teknolojileri (BT) Denetçisi İç Denetçi

ALGORİTMA VE PROGRAMLAMA I

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

Chapter 15. Getting the Gameplay Working. T. Kıvanç Bayraktaroğlu

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma

BİLİŞİM SİSTEMLERİNİN PRENSİPLERİ

08225 AĞ TEMELLERĠ. Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU. 20 EKi Salı, Çarşamba

Üst Düzey Programlama

Moodle-IST Kullanım Klavuzu

YZM211 YAZILIM TASARIMI

Sistem ve Yazılım Nedir?

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Yaz.Müh.Ders Notları #4 1

Elbistan Meslek Yüksek Okulu Güz Yarıyılı

PROGRAMLAMA TEMELLERİ

BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama

PHP Günleri 2013#1. mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak? Özgür Yazılım A.Ş.

SİSTEM MÜHENDİSLİĞİ TASARIMIN SENTEZLENMESİ II

Ubuntu Hakkında En Çok Sorulan Sorular

5.DERS PROJEDE YÜRÜTMENİN PLANLANMASI

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Client Server Database

MONTE CARLO BENZETİMİ

BİÇİMSEL YÖNTEMLER (FORMAL METHODS) Betül AKTAŞ Suna AKMELEZ

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

OPERASYONEL ÜSTÜNLÜK VE TÜKETİCİ YAKINLAŞMASINI SAĞLAMAK ve KURUMSAL UYGULAMALAR

BİLİŞİM SİSTEMLERİNİN PRENSİPLERİ

Aşırı Programlama İçin Üç Yeni Pratik

BİL-142 Bilgisayar Programlama II

cofaso ile farkı yaşayın Şubat

Bilişim Sistemleri. Modelleme, Analiz ve Tasarım. Yrd. Doç. Dr. Alper GÖKSU

Bilgisayar Sistemleri; donanım, yazılım ve kullanıcılardan oluşur. Yazılım sadece belirli bir işlemi yapan bir program değildir. Yazılım belirli bir

Başarı Değerlendirme YAZILIM. Mühendisliğe Temel Bir Bakış. Yazılım Nedir? BIL 304 YAZILIM MÜHENDİSLİĞİ

YAZILIM SINAMA TEKNİKLERİ GENEL BİLGİLER

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Yazılım Mühendisliğine Giriş 2018 GÜZ

Sistem Analizi ve. Tasarımı. Mustafa COŞAR

Basit Mimari, Katmanlı Mimari ve doğrudan çalıştırma olarak üçe ayrılır.

Özgür Yazılım Lisansları

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Yazılım Mühendisliği II (BIL 306)

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların

TÜMLEŞİK MODELLEME DİLİ. UML (Unified Modeling Language)

FMEA. Hata Türleri ve Etkileri Analizi

Uyumluluk markalamasından katma değerli kodlamaya kadar

Proje Çevresi ve Bileşenleri

VERİ TABANI YÖNETİM SİSTEMLERİ

Veritabanı Yönetim Sistemleri (Veritabanı Kavramı) Veri Modelleri

BLM 426 YAZILIM MÜHENDİSLİĞİ BAHAR Yrd. Doç. Dr. Nesrin AYDIN ATASOY GENEL BİLGİLER

İŞLETİM SİSTEMLERİNE GİRİŞ. Modern bilgisayar çalışma prensipleri, Von Neumann ın 1945 de geliştirdiği

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

İleri Yazılım Mimarisi (SE 658) Ders Detayları

Model Tabanlı Geliştirmede Çevik Süreç Uygulanması

İyileştirilmesi Gereken Sorunlar: Kredi kartının hesap kesim tarihinin veri tabanına yanlış kaydı.

VERİ YAPILARI VE PROGRAMLAMA

Transkript:

YAZILIM MÜHENDİSLİĞİNİN TEMEL İLKELERİ BÖLÜM 1: YAZILIM MÜHENDİSLİĞİNİN KAPSAMI Yazılım nedir? Bilim mi? Endüstri mi? Mühendislik mi? Sanat mı? Yazılım en yalın biçimiyle, bir sistemin donanım bileşenleri dışında kalan herşey olarak tanımlanabilir. Yazılımın Temel Bileşenleri = Mantık + Veri + Belge + İnsan + Program. Yazılım mühendisliği, adından da anlaşıldığı gibi bir mühendisliktir. Fakat hemen belirtilmelidir ki, yazılım mühendisliği, diğer tüm mühendislik alanları bir yana kendisi bir yana dedirtecek kadar farklı bir mühendislik alanıdır. Çünkü diğer mühendislik ürünleri birer fiziksel nesne iken, yazılım mühendisliğinin son ürünü kavramsal bir eserdir. Yazılım, diğer fiziksel ürünleri çalıştırır yönetir, kendisi değişik fiziksel ortamlarda bulunabilir. Diğer mühendislik alanları insanlığa sunabilecekleri imkânlar bakımından maddenin fiziksel sınırlamalarına bağlı iken, yazılım mühendisliği adeta bir sanat dalı gibi sunabilecekleri sadece insan zekâsı - başka bir deyişle insan yaratıcılığı- ile sınırlı olan bir mühendisliktir. Bugün için yazılım, otomobil ve uçak gibi ulaşım araçlarından tıp dünyasına, iş makinelerinden ev aletlerine, oradan askerlik, haberleşme ve eğitime kadar günlük hayatın hemen her alanını kontrol etmeye başlamıştır. - 1 -

Rekabet Gücü Unsurları: Verim, Kalite, Zamanlama (time to market) Yazılımın Mühendislik olması için; Standartlara dayanması gerekir. (kalite standartları, verimin standartları) Ölçülebilir olması gerekir. (kalitenin ölçülebilmesi, verimin ölçülebilmesi) Yazılım Mühendisliği nedir? Müşterinin ihtiyaçlarını karşılayan, öngörülmüş bütçe ile zamanında teslim edilen ve hatasız bir yazılım geliştirmek için teknik yöntemler öngören bir disiplindir. - 2 -

Tarihsel gelişim açısından bakıldığında; 1950 ler ve 1960 larda yazılım mühendisliği sadece programcılık olarak ele alınmıştır. Yazılım Krizi ilk olarak 1968 de bir NATO Konferansında dile getirilmiştir. ABD de 1970lerde kamu tarafından sipariş yolu ile satın alınan yazılım ürünlerinin ancak % 5 i kabul edilip kullanılabilmiştir, % 40 ı hiç kullanılamamış, geri kalanı ise maliyet artışı, zaman artışı, performans eksikliği veya bazı özelliklerinden taviz verilerek kullanılabilmiştir. Yazılımın yoğun kullanımı 1980 lere rastlamışsa da 1990 lara kadar büyük projelerde başarı oranı çok düşük kalmıştır. Hedef: Yazılım Krizini çözmek... Yazılım Mühendisliği kavramının ortaya çıkışında rol alan problemler; Ürünün geç teslim edilmesi. Öngörülen bütçeyi aşmak. Müşterinin ihtiyaçlarını tam manasıyla karşılayamamak. - 3 -

Yazılım krizi çözülememiştir. Yazılım krizi çözülemediği için buna yazılım depresyonu dendi. Çünkü bu çok uzun zaman almış ve öncü sınamalar kötü sonuçlanmıştır. - 4 -

Bir örnekle anlatmak gerekirse; CM NEW diye bir kodlama metodu var. (CM NEW Yeni bir programlama dili olabilir.) Bu kodlama metodu şu anda kullanılan metottan %10 daha hızlı olduğunu savunuyor. Soru : Bu kodlama metodunu kullanır mıydınız? Genel Cevap : Evet! Fakat bir yazılım mühendisi bu cevabı verirken aşağıdaki koşulları göz önünde bulundurmalı; Bu yeni kodlama metodu için eğitim maliyeti, Yeni teknolojiyi tanıtmanın olumlu veya olumsuz etkileri, Yeni metot ile geliştirilecek bir ürünün, sisteme yerleştirildikten sonra bakımının yapılması gerek, bu bakım yapılırken, bakımın maliyeti müşteri için daha fazla olacaktır. Bunun etkilerinin düşünülmesi gerekli. - 5 -

Yaşam Döngü Modeli; yazılım geliştirilirken takip edilecek safha ya da adımlardır. Teorik olarak ne yapılacağının tanımlanmasıdır. Safhaların sayısı ve niteliği modelden modele değişir. Belirli bir ürün üzerinde yapmış olduğumuz gerçek işlemlerdir. - 6 -

1. Requirements Phase: Elimizdeki problemin ne olduğunu anlamaya çalışıyoruz. Yapılan işi anlamaya çalışıyoruz. Müşterinin gereksinimlerini topluyoruz. Müşterinin gereksinimlerini belirle. Müşteri ne istiyor, ihtiyaçları neler. 2. Analysis (Specification) Phase: Toplamış olduğumuz gereksinimleri analiz ediyoruz. Analizin sonucunu şartname dokümanı olarak yazıyoruz. (Software ne yapacak) Müşterinin ne istediği değil, neye ihtiyacı olduğunu tesbit etmeye çalışıyoruz. Ayrıca müşteri ürün tesliminde ben bunu istemedim diye itiraz etmesi durumunda, bu döküman kullanılarak müşteriye isteklerinin ne olduğu gösterilir. Yazılım Proje Yönetim Planında bütün detaylarıyla yapacaklarımızı yazıyoruz. Ürünün tam olarak ne yapması isteniyor. Bu soruya cevap bulmaya çalışıyoruz. - 7 -

3. Design Phase: Tasarım safhası boyunca 2 tür tasarım yapılır. İlk olarak Mimari (Architectural) Tasarım yapılır. Kabataslak sistemin mimarisini gösteren bir plan çizilir. Sistemi modüler olarak bölmek gerekmektedir. Yani sistemin mimarisini bir ağaç olarak düşünüp daha küçük parçalara, modüllere bölerek çalışmalıyız. Daha sonra Ayrıntılı (Detailed) Tasarım yapılır. Burada da veritabanı tespit edilmeli ve ne tip algoritmaların kullanılacağı belirlenmelidir. 4. Implementation Phase: Herbir modül için kod yazıyoruz. (Coding) Herbir modülü birbirinden bağımsız olarak test ediyoruz. (Unit testing) Sistemin bir bütün olarak çalışması gerekmektedir. Bu yüzden bütün modülleri birleştiriyoruz. Modülleri birleştirirken sorun ve yanlışlıklar çıkabilir. Bunu test ediyoruz. (Integration testing) Gerçek veriyi kullanarak sistem test edilir. Kabul testi müşteri tarafından yapılır. (Acceptance testing) - 8 -

5. Postdelivery Maintenance: Teslim sonrası sistemde yapılan herhangi bir değişikliğe Teslim Sonrası Bakım (Postdelivery Maintenance) denir. Teslim sonrası bakımın iki çeşidi vardır: Düzeltici Bakım (Corrective Maintenance): Sistemdeki hataları düzeltmek için yapılan bakım (software repair). Özellikleri Artırılması (Enhancement) diğer bir deyişle yazılım güncellemesi (software update), şartnamede (specification) yapılan değişiklikleri ve bu değişikliklerin mevcut yazılıma uyarlanmasını içerir. Bu uyarlamanın iki çeşidi vardır; Bunlardan birincisi müşterinin düşünceleri doğrultusunda ürünün yararlılığını arttırmak için kullanılan Mükemmelleştirici Bakım (Perfective Maintenance) dır. İkincisi ise ürünün çalışma ortamında meydana gelen değişikliklere karşı yapılan Uyarlanabilir Bakım (Adaptive Maintenance) dır. 6. Retirement: Yazılım vadesini doldurduğunda, yazılımı emekliye ayırırız, elimizden çıkarırız. - 9 -

Klasik bakım, zamana bağlı olarak yapılan bir bakımdır. Önce sistem geliştirilir, sonra zamanla bakım yapılır. Teslimden sonra sistemi geliştirirken de bakım yapılabilir. Bu geçici tanımdır. Çünkü bir faaliyetin icra edilmesine bağlı olarak, klasik bakım veya klasik geliştirme olarak sınıflandırılabilir. - 10 -

Bir sisteme yazılım ürünü kurulduktan 1 gün sonra, bir hata ya da yanlış tespit edip düzelttiğimizde, buna klasik bakım (classical maintenance) diyoruz. Sisteme yazılım ürünü kurmadan 1 gün önce, bir hata ya da yanlış tespit edip düzelttiğimizde, buna klasik geliştirme (classical development) diyoruz. - 11 -

Örneğin; yazılım install oldu. Müşteri de ürünün fonksiyonlarını arttırmak ve güncellemek istiyor ya da yeni bir fonksiyon ilavesi istiyor. Bu Classical (perfective) Maintenance dır. Müşteri daha kurulum yapılmadan önce birşeyler değiştirmek isterse, bu Classical Development dır. *** Bir yazılım geliştirilirken müşterinin gereksinimlerinde sürekli değişiklik olursa buna moving target (değişen hedef) problemi denir. - 12 -

Genel olarak zamana bağlı olarak yapılan bakım olarak tanılayabiliriz. Moving target problemin dışında diğer problemler ise; Artık hiçbir sistem sıfırdan başlamamaktadır. Mevcut olan yazılımlar kullanılarak sistemler oluşturulmaktadır. Yeniden kullanımın yaygın olmasıdır. Bu nedenle bakım terminolojisi kullanıcıyı caydırır. Bu da daha modern bir bakımın tanımını doğurur. - 13 -

1995 te International Standarts Organization (ISO) ve International Electrotechnical Commission (IEC) bakımın artık zaman bağlı olmamasını, işlevsel olarak yapılmasını belirtmiştir. Artık bakım şöyle ifade ediliyor; Herhangi bir zamanda, herhangi bir nedenle yazılım bileşenlerine bir şey ilave edilecekse, ya da yeniden düzenlenecekse, bu işlemi gerçekleştiren süreç bakım olarak tanımlanmaktadır. Artık zamana bağlı değil, Hatayı düzeltme, adaptasyon, güncelleme için önce veya sonra kavramı yoktur. - 14 -

- 15 -

Soru: Kötü bir yazılıma mı yoksa iyi bir yazılıma mı bakım yapılır? İyi bir yazılıma bakım yapılır. Kötü bir yazılımı kullanmak istemeyiz. Bu nedenle kötü yazılımları atarız. Soru: Neden her zaman bir bakım söz konusu? Yazılım, sürekli değişen bir gerçekliğin modelidir. İyi bir yazılımın bakımdan geçmesi doğaldır. Yaşayan yazılımlara bakım yapılmazsa sistem genişleyemez. - 16 -

Teslim sonrası bakımın maliyeti artmış Şaşırtıcı şekilde, klasik evreler maliyetleri güçlükle, değiştirmiştir. - 17 -

Eski sorumuza dönersek; CT OLD mu yoksa CT NEW mi (%10 daha hızlı) daha iyi? Eğer kodlama da %10 luk bir zaman kazanımı varsa toplam kazanç % 0,85 dir. % 34 * % 25 development = 8,5 % % 10 * % 8,5 = 0,85 % Toplam Kazanç; Bu yüzden yatırım yapmaya değmez. Eğer kodlamada değilde teslim sonrası bakımı % 10 azaltacak deseydi; % 10 * % 75 = % 7,5 Toplam Kazanç Alınırdı. Çünkü iyi bir yatırım olurdu. Yazılım Mühendisi ekonomik faktörleri göz önünde tutmalıdır. - 18 -

Bir hatayı ne kadar erken bulup düzeltirsek, bize maliyeti daha düşük olacaktır. Yazılım geliştirme süreci boyunca herhangi bir iş akışında (workflow) yapılan bir hatanın maliyeti düşünüldüğünde bu durumu maliyetin en yüksek olacağı iş akışından en düşük olacağı iş akışına göre doğru sıralarsak; Teslim Sonrası Bakım > Uygulama > Tasarım > Analiz > Gereksinim Büyük bir ekmek fırınının otomasyonundan sorumlusunuz. Yazılımın geliştirilme (Development) maliyetinin 450.000$ olacağı tahmin edilmektedir. Yazılımın teslim sonrası bakımı (Postdelivery Maintenance) için yaklaşık ne kadar paraya ihtiyaç olacaktır? (Sorunun çözümü için Şekil-1- deki grafikten yaralanabilirsiniz.) 450.000 $ * 75 / 25 = 1.350.000 $ - 19 -

- 20 -

Yazılım yaşam çevrimi (life cycle) içinde, bir hatayı ne kadar erken tespit edip düzeltirsek, bize fiyatı maliyeti o kadar düşük olacaktır. İlk aşamada yapılan çalışmalar kâğıt üzerinde olduğu için, hatalar daha ucuza mal oluyor. En son aşamada olursa daha pahalıya mal oluyor. Eğer yazılım yaşam çevrimi içinde hata geç fark edilirse; Dokümantasyon ve kod değişir. Değişikliklerden dolayı ürün yeniden test edilecektir. Regresyon testi yeniden icra edilir. Müşterinin bilgisayarına ürün yeniden kurulur. Bu büyük bir maliyet getirir. [Regresyon Hatası (Regression Fault): Bir programın herhangi bir bölümünde yapılan değişiklikten dolayı, o değişikle alakası olmayan başka bir bölümün etkilenmesi sonucu oluşan hataya regresyon hatası denir.] - 21 -

Büyük ölçekli yazılım ürünlerinde hataların % 60 ile % 70 arasında; gereksinimler, analiz ve tasarım aşamasında yapılan hatalardan meydana geldiği belirlenmiştir. Örnek: Jet Propulsion Laboratory yapmış olduğu incelemelerde - Şartnamelerin sayfa başına başına 1,9 nun, - Tasarımın sayfa başına 0,9 nun, - Kodlamanın sayfa başına 0,3 nün hatalı olduğu tespit edilmiştir. - 22 -

Sonuç olarak, hataları en ön saflalarda bulmalıyız. Özellikle maliyeti azaltmak için, olabildiğince hatayı erken tespit etmeliyiz. - 23 -

Donanımı ucuza satın alabiliriz. Ama yazılım pahalıdır. Büyük programları yazmak, uzun zaman gerektirir. 1 kişi ile yazılım projesi geliştirmek kolay değildir. Bunun için yazılım projesi gruplara bölüştürülmelidir. Bunun avantajı; zaman azalır, maliyer düşer. Dezavantajı ise; sistemi modüler olarak düşünürsek, bir gruptaki kişilerin projeyi paylaşması gerekecek. Bundan dolayı modüller arasında parametre sorunları yaşanabilir. Parametrelerin sayısı ve tipi aynı olmalıdır. Bir diğer dezavantaj ise grup üyeleri arasında iletişim problemleri olabilir. - 24 -

Projenin başlangıcında plan yapılmaz. Çünkü ne yapacağımızı bilmiyoruz. Ancak gereksinimler belirlenip şartname dokümanı oluşturulduktan sonra planlama yapabiliriz. Projenin başında kaba taslak planlama yapıyoruz. Buna preliminary planning (kaba taslak planlama) denir. Şartname müşteri tarafından imzalandıktan sonra Yazılım Proje Yönetim Planı (Software Project Management Plan) yapılır. Yönetici, proje boyunca SPMP ye ihtiyaç duyar. - Projede çalışacak kişi sayısı, - Testler (hangi testlerin olacağı), - Ayrılacak zaman ve bütçe gibi bilgileri izler, kontrol eder. - 25 -

Sonuç olarak planlama aktiviteleri yazılım yaşam döngüsü boyunca tamamlanacaktır. Ayrı bir planlama safhası yoktur. Testi, geliştirme safhasından sonra ya da yazılımı müşteriye teslimden önce yapmak oldukça zordur. Özel bir test safhası yoktur. Test işlemi her safhanın sonunda yoğun bir şekilde yapılır. - 26 -

Her safhanın sonunda test yapılır. Bu test işlemine verification (doğrulama) denir. Projenin sonunda, müşteriye ürünü teslim etmeden önceki testing işlemine ise validation (sağlama) denir. - 27 -

Yazılım yaşam döngüsü boyunca sürekli olarak test aktiviteleri devam ettirilmelidir. Problemin çözümü için uğraşan herkesin test yapması gerekir. Özel bir kalite güvence grubu oluşturulup, bunlara test ettirilmelidir. Test için ayrı bir safha yoktur. - 28 -

Dokümantasyon içinde durum aynıdır. Ayrı bir belgeleme safhası yoktur. Dokümantasyon her zaman güncel olmalıdır. Projenin başından itibaren dokümantasyona başlanmalıdır. Neden Devamlı dokümasyon: Projenin başındaki bireyler, proje tamamlandan ayrılabilir. Bir önceki aşamanın dökümü olmadan bir sonraki aşamaya geçilmez. Dokümantasyon olmadan test yapamayız. Dokümantasyon olmadan bakım yapılmaz. - 29 -

Sonuç olarak dokümantasyon aktiviteleri bakım ve diğer geliştirme aktivitelerine paralel olarak icra edilmelidir. Ayrı bir dokümantasyon safhası yoktur. - 30 -

1975 ile 1985 yılları arasında, yazılan programların daha az hatalı olması amacıyla, bir grup teknikler ortaya atılmıştır. Buna tekniklere structured (classical paradigm) denilmektedir. 1970 lerde programların boyutları büyüktü ve bu programlamlar aynı zamanda oldukça da başarılıydılar. Ancak 1980 lerde yazılan ürünlerin 50.000 den fazla satıra sahip olması üzerine bu paradigm büyük programlarda iyi sonuç vermedi ve başarısız olmaya başladı. Bu structured paradigm ın başarısız olmasının nedeni hem dataya, hem de process lere birlikte önem vermemesidir. Hiçbir metot bu ikisine bir önem vermiyor. Kullanılan metotlar bu yüzden başarısız. - 31 -

Çözüm: İkisine birden önem vermek... Object: Hem data (veri), hem de o data (veri) üzerinde çalışacak olan faaliyetleri birleştiren bir yazılım bileşenidir. Örnek: Bank Account Banka Hesap uygulamasını ele alalım. - Data (veri): Account Balance (Hesap Bakiyesi), - Actions (Faaliyetler): Depozit (Depozito), Withdraw (Para çekmek), Determine Balance (Kalan Bakiye) - 32 -

a) Classical Paradigm b) OO Paradigm - b de para çekmek, depozito,... vs. için mesaj çekiyoruz. Mesaj gönderen Object in içini göremiyor. Sadece istekte bulunuyor. - 33 -

- a da, dairenin çevresinin kesintili olmasının nedeni verilerin herbiri daire içindeki verilerle iletişim halinde ve birbirini görebiliyor olmasıdır. Fakat herhangi bir noktada oluşan en ufak hata, bütün verilerde etkili olacaktır. - b de bilgiler saklanmış olduğundan dolayı böyle bir sorun yok. b de karşılaşılan olaylar; Information Hiding Responsibility-Driven Design Impact on maintenance, development. - 34 -

Information hiding ile data görünmediğinden için postdelivery maintenance daha güvenlidir. Farkında olmadan yapılan hatanın olasılığını (regression fault) azaltıyor. Development daha kolaydır. - Obje lerin genellikle fiziksel karşılıkları vardır. - Modelleme kolaylaşıyor. (Tasarım kolaylaşıyor.) - 35 -

Eğer object ler daha iyi daha design edilirse, birbirinden bağımsız birimler olacaktır. - Gerçek dünyadaki object ile ilişkili olan herşey object de modelleniyor. (encapsulation) - İletişim mesaj-alıp verme ile oluyor. - Bu bağımsızlık responsibility-driven design tarafından sağlanıyor. - 36 -

Classical product temel olarak, tek bir birimden meydana gelir. OOP, karmaşıklığı azaltır. Çünkü, product ın birimleri birbirinden bağımsızdır. Bağımsız olduğundan bakımı kolaydır. Object ler birbirinden bağımsız olduğundan, OOP yeniden kullanımı (reuse) destekler. Reuse: Bir programda kullanmak için geliştirilen bir modülün, başka bir program içinde kullanılabilmesi. - 37 -

OOP da mesajla istekte bulunuyoruz. Nasıl gerçekleştirildiğini bilmiyoruz. Sorumluluk Obje ye aittir. Bunu bize sağlayan information hiding dir. Örnek: Chicago da oturan annenize bir çiçek göndereceksiniz. Ama ne çiçekçinin, ne konuştuğunuz kişinin nerede olduğu, ne de teslim yapacak olan kişinin yerini biliyorsunuz. Sonuç olarak, sorumluluk çiçeği getirecek kişiye ait. - 38 -

Classical paradigm da analiz ile design arasında keskin bir fark vardır. Modüller design safhasında ortaya çıkıyor. Analiz safhası sistemin ne yapacağı, design safhasında ise nasıl yapılacağı belirleniyor. OOP ise, objeler başlangıçta devreye giriyor, analiz workflow unda modüller ortaya çıkıyor. - 39 -

Classical paradigm da analiz safhasında; müşterinin neye ihtiyacı var, ne yapılması lazım sorularına cevap aranırken, Classical paradigm tasarım safhasında; product ı nasıl yapmamız gerektiğinin tespit edilmesi, mimari tasarım için modüllerin tespit edilmesi, ayrıntılı tasarımda da herbir modülün nasıl tasarlanacağı sorularına cevap aranır. - 40 -

OOP da Analiz workflow unda; Yapılmak isteneni belirle, Nesneleri belirle. OOP da Tasarım workflow unda; Nasıl yapılacağını belirle, Object leri tasarla. İki paradigm arasındaki fark bir sonraki slayt ta gösterilecektir. - 41 -

Classical Paradigm da Implementation safhasında Modülleri kodluyoruz. OOP da ise Implementation workflow unda class ları kodluyoruz... Burada modüller OO Analiz safhasında tanıtılır. Bu analizden tasarıma keskin bir geçiş sağlar. Object ler uygulama (implementation) iş akışı boyunca kodlanır. Tekrar kolay bir geçiş görürüz. - 42 -

OOP doğru kullanılmalıdır. Bütün paradigm lar kolaylıkla yanlış kullanılabilir. OOP doğru kullanıldığı zaman classical paradigm da karşılaştığımız bir çok problemi çözer. Tabi OOP bazı sorunları da çözememiştir, fakat şu an için en iyi alternatiftir. Tabi ileride ne olacağı bilinmez. - 43 -

Client: Müşteri (yazılım product ını user için yaptıran, satın alan kişi) Developer: Geliştirici (yazılım product ını geliştiren kişiler) User: Yazılım product ını kullanacak kişi. Internal Software (İçsel yazılım): Müşteri ve geliştirici (client & developer) aynı grupta, ya da şirkette ise buna içsel yazılım denir. Contract Software (Sözleşmeli yazılım): Müşteri ve geliştirici (client & developer) farklı grupta yada şirketlerde ise buna sözleşmeli yazılım denir. Commercial off-the-shelf (COTS) software: Bazı yazılım uygulamaları milyonlarca kişi için üretilebilir. Geliştirilen yazılım rafta duruyor, binlerce müşteriye sunuluyor. (MS Office...) Open Source Software: Geliştirilip, ücretsiz olarak dağıtılan yazılımlar. (Linux...) - 44 -

Software (yazılım): Bir bilgisayar sisteminin donanım bileşenleri dışında kalan herşeyi yazılım olarak verebiliriz. 1960-1970 li yıllarda programlar çok küçüktü. Program: Küçük yazılımlar. Örn: Karakök alan bir program... System: Birçok programı oluşturan yazılım. Örn: İşletim sistemi... Product: Küçük, büyük program... Methodology: Metotların toplamına denir. (1970 lerde kullanılıyordu) Paradigm: Bir süreç ya da model için esas olan örnek. Bir çeşit yazılım geliştirme yöntemi. (1980 lerden sonra kullanılmaya başlandı.) - Object Oriented Paradigm, - Classical Paradigm. Technique: Metotlarda kullanılan teknikler. - 45 -

Mistake: Programlardaki hata. Fault: Hatanın (mistake) neden olduğu arıza. Failure: Hata sonucunda gözlenen programın yanlış davranışı. Error: Yanlışın, hatanın derecesi. Defect: Failure, Fault, Eror için kullanılır (eksiklik, kusur) Bug: Program tarafındaki hata. - 46 -

Object in veri bileşenleri; - State variable (durum değişkenleri) - Instance variable (Java) (örnek değişkenler) - Field (C++) (alan) - Attribute (generic) (nitelikler) Object in Olay Bileşenleri - Member function (C++) - Method (generic) - 47 -

İyi bir yazılım geliştiricisi ve bakımcısının; Hard working (çalışkan) Intelligent (zeki) Sensible (mantıklı) Up to date and, above all, (modern) ve herşeyden önce Ethical (ahlaklı) olması gereklidir. - 48 -