marmara Üniversitesi bilişim ana bilim dalı

21
Marmara Üniversitesi Bilişim Ana Bilim Dalı Yazılım Mühendisliği Software Engineering Hazırlayan: Baha KURTBOĞANOĞLU Öğretim Üyesi: Doç. Dr. Erhan AKYAZI İSTANBUL, 2011

Upload: kris

Post on 23-Feb-2016

116 views

Category:

Documents


0 download

DESCRIPTION

Marmara Üniversitesi Bilişim Ana Bilim Dalı. Yazılım Mühendisliği Software Engineering. Hazırlayan: Baha KURTBOĞANOĞLU Öğretim Üyesi: Doç . Dr. Erhan AKYAZI İSTANBUL, 2011. Bilgisayar Yazılımı. Yazılım Nedir? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Marmara Üniversitesi

Bilişim Ana Bilim Dalı

Yazılım MühendisliğiSoftware Engineering

Hazırlayan: Baha KURTBOĞANOĞLU Öğretim Üyesi: Doç. Dr. Erhan AKYAZI

İSTANBUL, 2011

Page 2: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Nedir?

Yazılım, değişik ve çeşitli görevler yapma amaçlı tasarlanmış elektronik araçların, birbirleriyle haberleşebilmesini ve uyumunu sağlayarak, görevlerini ya da kullanılabilirliklerini geliştirmeye yarayan makine komutlarıdır.

Bilgisayar Yazılımı

2

TDK Sözlüğüne göre ise; Yazılım Bir bilgisayarda donanıma hayat veren ve bilgi işlemde kullanılan programlar, yordamlar, programlama dilleri ve belgelemelerin tümüdür.

Page 3: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılımın Tarihi Gelişimi

• 1823’de Charles Babbage'ın "Fark Aygıtı" adını verdiği otomatik hesap makinesinin buharla çalışan bir modelini yapmayı başarmıştır.

• 1847’de George BOOLE, Mantığın matematiksel çözümlemesi (Mathematical Analysis of Logic) adlı eserinde bugünkü bilgisayarların temelini oluşturan önermeleri matematiğe kazandırmıştır.

• 1952 yılında “Yazılım (software)” kelimesi ilk kez bir istatistikçi olan John Tukey tarafından kullanıldı.

• Yazılımın kelimesinin yanına mühendislik sözcüğünün getirilip “Yazılım Mühendisliği” olarak ilk defa 1968 yılında Almanya’da yapılan bir NATO konferansında kullanılmıştır.

• 1972’de IEEE Bilgisayar Topluluğu Yazılım Mühendisliği konusunda ilk süreli yayını çıkartmış: Transactions on Software Engineering.

Bilgisayar Yazılımı

3

Page 4: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Tarihte İlk Yazılım Dilleri

1940’lı Yıllar1943 - Plankalkül (Konrad Zuse) 1943 - ENIAC coding system 1949 - C-10

1950’li ve 1960’lı YıllarBu yıllar modern programlama dillerinin temellerinin atıldığı yıllardır. 1951 - Assembly Language 1952 - Autocode 1954 - FORTRAN (FORmula TRANslator)1958 - LISP (LISt Processor)1958 - ALGOL (ALGOrithmic Language)1959 - COBOL (COmmon Business Oriented Language)1962 - APL (A Programming Language)1962 - Simula 1964 - BASIC (Beginner's All-purpose Symbolic Instruction Code)1964 - PL/I (Programming Language One)

Bilgisayar Yazılımı

4

Page 5: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Tarihte İlk Yazılım Dilleri

1970’li YıllarBu yıllarda programlama dilleri olgunlaşmaya, çeşitlenmeye başladığı ve yapısal programlama dillerinin geliştirildiği yıllardır. 1970 - Pascal 1972 - C 1972 - Smalltalk 1972 - Prolog 1973 - ML 1978 - SQL

1980’li Yıllar1980’li yıllar daha geniş sistemler için ölçeklenebilir uygulamalar geliştirebiliecek dillerin doğduğu yıllardır. Bu yıllar nesne yönelimli programlamanın (Object Oriented Programming) çokça konuşulduğu yıllardı.1983 - Ada 1983 - C++ 1985 - Eiffel 1987 - Perl 1989 - FL (Function Level)

Bilgisayar Yazılımı

5

Page 6: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Tarihte İlk Yazılım Dilleri

1990’lı Yıllarİnternetin yaygınlaşmasıyla birlikte, internetle çok ciddi anlamda bütünleşen Java dilinin geliştirildiği ve yaygınlaştığı yıllar oldu 1990’lar.1990 - Haskell 1990 - Python 1991 - Java 1993 - Ruby 1995 - PHP 1995 - Delphi2000 - C#

Bilgisayar Yazılımı

6

Page 7: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Tarihte İlk Yazılımcı Bir Kadındı

Bugünkü programcılığın temellerini atan Lady Ada Lovelace 10 Aralık 1815 de İngiltere‘de doğdu. Programlama hayatı zeki bir matematikçi olan Charles Babbage ile tanışmasıyla başladı. Charles Babbage kendisi gibi matematikçi olan Ada Lovelace ile tanışmadan önce Napier‘in logaritma cetvelindeki yanlışlıklar üzerinde çalışıyordu.

Bilgisayar Yazılımı

7

Babbage ile Lovelace birlikte birçok farklı tip hesap yapabilen “analitik makine” adını verdiği bir makine tasarlamaya başladı. İşte bu esnada Lovelace çalışmasını sürdürdükleri bu makine için birçok bilgisayar programı geliştirdi. Lovelace bu çalışmalarıyla bilgisayar programcılığında bugünkü döngü ve rutinlerin temelini oluşturdu.

Bu programlar, kartların üzerine açılmış delikler halinde kodlanıyordu. Babbage’de yaşamının son 37 yılını bu makinenin yapımına adadı. Ancak kamuoyu tarafından yeterli ilgi ve desteği almayınca hayal kırıklığına uğradı. 1871 ‘de makineyi tamamlayamadan öldü.

Page 8: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılımın Mühendisliği Nedir?

Yazılım Mühendisliği; yazılım geliştirme ile ilgilenen bilim dalıdır. Yazılım Mühendisliği tanım olarak "Karmaşık yazılım sistemlerinin belirli bir hedefe ve sisteme dayalı olarak, iş bölümü yapılması suretiyle, belirli ilkeler, yöntemler ve araçlar kullanılarak geliştirilmesidir." Yazılım Mühendisliği belirli aşamalardan oluşmaktadır. Yazılım geliştirmenin yanında yazılımı işletmek de Yazılım Mühendisliğinin en önemli görevlerindendir.

Diğer bir tanıma göre ise; Yazılım mühendisliği büyük ölçekli ve karmaşık yazılımların geliştirilmesi ve bakımıyla uğraşan bilgisayar biliminde bir alandır. Bir yazılımın büyük ölçekli yazılımlar sınıfına dahil olabilmesi için bahsedilen ölçütlerden birisi en az 50 bin satır kod içermesinin gerektiğidir. Bu tip projelerde genellikle birden fazla insan birlikte çalışırlar. Yazılım mühendisliği, programlama bilgisi gibi teknik yönlerin yanında, yazılımın bütçe ve süresinin planlanması ve takip edilmesi, yazılımı geliştiren elemanların idaresi gibi yönetimsel yönler de içerir.

Yazılım Mühendisliği

8

Page 9: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılımın Mühendisliği Gelişim Süreci

• İlk bilgisayarlar için oluşturulan programların genel özellikleri şöyleydi. Sadece bir programcı tarafından yazılırlardı. Kullanıcılar kendi alanlarının uzmanı olan (bilim adamı ve mühendis gibi) kişilerdi. Programlar çözüm yolu belli olan teknik konulardaydı.

• Bilgisayarlar performans olarak geliştikçe ve ucuzladıkça kullanım alanları genişledi. Yazılımlar büyümeye ve karmaşık bir hal almaya başladı.

• Yazılımlar tarafından modellenmesi gereken şeyler teknik konular yerine, oldukça karmaşık iş süreçleri (uçaklar için rezervasyon yazılımları, stok takip ve maaş yazılımlarına ihtiyaç) olmuştu.

• Müşteri isteklerinin, oluşturulan yazılımla karşılanamaması nedeniyle yazılım krizi sürecinin meydana gelmesine neden oldu.

Yazılım Mühendisliği

9

Page 10: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Krizi

Yazılımların güvenli olmayışıyla ilgili geçmişte dikkate değer pek çok olay yaşanmıştır. Bunlardan birkaçı şöyledir:• 28 Temmuz 1962 - Mariner 1 Uzay Roketi: Mariner 1'in uçuş

yazılımındaki bir hata, fırlatma sırasında roketin istenen yörüngeden ayrılmasına yol açtı. Kazayla ilgili inceleme yapıldığında, bir kağıda kurşun kalemle yazılmış bir formülün bilgisayara yanlış geçirilmiş olduğu ortaya çıktı. Böylece bilgisayar roketin yörüngesini yanlış hesaplamıştı.

• 1985-1987 - Therac-25 Tıp Kazası: Therac-25 radyasyon terapi makinesinin kontrol yazılımındaki bir hata nedeniyle 1985-86 tarihleri arasında birçok hastanın ölümüne neden oldu.

Yazılım Mühendisliği

10

Page 11: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Bu ve benzeri nedenlerden dolayı, yazılım geliştirme sürecinin mühendislik temelleri üzerine oturtulması düşünüldü. Yani yazılım geliştirme sürecinin, sistematik, disipline edilmiş (belli kuralları olan) ve ölçülebilir bir süreç haline getirilmesi gerekir.

Yani Yazılım mühendisliği, yazılıma mühendislik yaklaşımlarının uygulanmasıdır. Bir inşaat mühendisinin bir binayı yaparken mühendislik yaklaşımlarını kullanarak binanın maliyetini ve inşaatın ne kadar süreceğini hesaplaması ve müşterinin arzusuna göre binayı doğru bir şekilde biçimlendirebilmesi gibi.

Peki biz de yazılımları böylemi hazırlamalıyız?

Yazılım Mühendisliği

11

Page 12: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Mühendisliğinin, diğer mühendislik ürünlerinden farklı birtakım eşsiz özellikleri vardır.

Bunlardan birisi karmaşıklıktır (complexity): Bir yazılım, gerçek dünyada bir iş sürecinin modelidir. İş süreci içerisinde olası bütün durumlar ve yönler tamamen yazılım tarafından adreslenmelidir. İş sürecini karmaşıklığı ölçüsünde yazılım da karmaşıklaşacaktır. Bunun yanında kolay kullanılabilirlik, kabul edilebilir bir performans, güvenilirlik ve ucuzluk gibi etmenler de işin içine giriyor.

Diğer bir özellik görünmezliktir (invisibility): Diğer mühendislik alanlarında ürünün (mesela bir evin veya elektronik devrenin) ne durumda olduğu kolayca görülebilir. Fakat bir yazılımın sadece çalışma esnasındaki davranışları gözlemlenebilir. İçerisindeki hatalar ve farklı durumlarda ne yapacağı kolay kolay tahmin edilemez.

Yazılımın yukarıda sayılan özelliklerine rağmen yazılım mühendisliği, büyük ölçekli yazılımların geliştirilmesinde fayda sağlayacak pek çok katkılarda bulunmuştur.

Yazılım Mühendisliği

12

Page 13: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Geliştirme AşamalarıKarmaşık yazılımları geliştirmek ve bakımını yapmak çok masraflı ve zordur. Bu yüzden yazılımlar yazılım mühendisleri tarafından nizami olarak planlı bir proje şeklinde geliştirilmektedir. Bu nizami geliştirme planına Yazılım Geliştirme Süreci adı verilmektedir.

Başlıca yazılım geliştirme aşamaları şunlardır:Çekirdek aşamalar:• Problemin Tanımı & Planlama• Çözümleme & Analiz• Dizayn & Tasarım• Programlama & Gerçekleştirim• Test• Uygulama

Destekleyici aşamalar:• Talep yönetimi• Proje yönetimi• Kalite yönetimi• Yapılandırma yönetimi• Yazılım sunumu• Dokümantasyon• Ayrık yapılandırma

Yazılım Mühendisliği

13

Page 14: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Geliştirme Modelleri

• Klasik Çevrim: Çağlayan (waterfall), şelale modeli, büyük tasarım modeli (grand design) ya da geleneksel model olarak adlandırılır ve sistematik olarak ilerleyen ardışık bir yaklaşımla yazılım geliştirilmesini sağlar.

• "V" modeli: Geliştirme sürecine sistem kavramıyla yaklaşarak klasik modeldeki test işlemlerinin ne zaman yapılacağını ön plana çıkarır.

• Prototipleme: Bu yöntemde geliştirici ile kullanıcı beraberce sistemin genel hatlarını tanımlarlar, üzerinde daha fazla düşünülmesi gereken noktaları belirlerler. Ondan sonra çabuk bir tasarım yapılır. Bu tasarım daha çok kullanıcı ile olan etkileşimi ya da sistemin en temel işlevini belirler ve ön ürünün, yani prototipin buna göre yapılmasını sağlar.

• Spiral model: (sarmal model de denebilir) hem klasik çevrim hem de prototipleme yöntemlerinin iyi yönlerinin birleştirilmesiyle oluşturulmuştur.

Yazılım geliştirme tekniklerinde ortaya çıkan son yenilikler çeşitli yazılım araç ve gereçlerinin kullanımını öngörmektedir. Geliştirilecek yazılımın özellikleri bu araç ve gereçler yardımıyla üst düzeyde tanımlanır, sonra da otomatik olarak bu işleri yapacak olan kaynak kod üretilir. Asıl ilke, makineye yapacağı işi çok üst düzeyde, konuşma diline yakın bir dil ile, özel bir gösterimle veya görsel olarak tanımlamaktır. Gerekli görüldüğü takdirde, yöntemlerin birden fazlası bir arada kullanılabilir.

Yazılım Mühendisliği

14

Page 15: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Mühendisliği ve Programlama

Programlama, yazılım mühendisliği kapsamındaki ürün geliştirme aşamalarından biridir.

• Programcılık mesleği bir sanat seklinde ortaya çıkmış ve uzun zaman bu boyutlarda gelişmiştir. Bugün de yazılan programların sanat boyutu vardır.

• Gelişme sürecinde bilimsel katkı artmış ve mühendislik yaklaşımı da kazanılmıştır.

Yazılım mühendisliği daha çok büyük ve karmaşık yazılım sistemlerini hedef alır.• Bir ders alıştırması için yazılabilecek 50-100 satırlık bir program, mühendislik

yaklaşımının uygulanmasını haklı çıkartacak bir örnek oluşturmaz.• Büyük kapsamlı yazılım sistemlerinin geliştirilmesinde ise programlamanın

işgücü payı ortalama %15-20 civarındadır.

Yazılım Mühendisliği

15

Page 16: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Mühendisliği ve Donanım

Donanım mühendislikleri ile yazılım mühendisliğinin en belirgin farkı ürünlerindedir.• Yazılım ürünü diğer mühendislik ürünlerine oranla daha soyuttur.• Yazılım projesi geliştirme ile sonlanırken donanım projelerinde ek olarak

imalat safhası vardır.• Seri üretim, yazılım geliştirme içerisinde neredeyse hiçten ibarettir.• Donanım ürünleri kullanıldıkça aşınırlar yazılım ürünlerinde ise aşınma

olmaz.• Yalnızca baştan beri gizli bulunan hatalar kullanıldıkça ortaya çıkar.

Donanım mühendisliklerinde maliyet odağı seri üretim ve yıpranmayken, yazılım mühendisliğinde maliyet odağı geliştirmedir.

Yazılım Mühendisliği

16

Page 17: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Mühendisliği Eğitimi

Yazılım Mühendisliği, 1968 yılında yazılım geliştirmedeki problemleri tartışmak ve gerekli çalışmaları tanımlayabilmek için NATO tarafından düzenlenen bir konferansta, güvenilir ve etkin olarak çalışan yazılımların ekonomik olarak elde edilebilmesi için mühendislik ilkelerinin uygulanması olarak tanımlanmıştır. 1968 yılında düzenlenen bu konferanstan bugüne kadar Yazılım Mühendisliği disiplini çok gelişme kaydetmiş ve ilerlemiş olmakla beraber, günümüzde hala diğer mühendislik dalları ile eş tutulmamaktadır.

Günümüzde yazılım geliştirme alanında milyonlarca kişi çalışmakta, yazılım mühendisliğinde yer alan çeşitli konular üzerinde çeşitli konferanslar düzenlenmekte ve yazılım mühendisliği üzerine eğitim programları bulunmaktadır. Bütün bu gelişmelere paralel olarak yazılım mühendisliğinin geçmişe oranla daha iyi tanındığını ve diğer meslek dalları arasındaki yerinin belirginleştiğini söyleyebiliriz. Ancak yazılım mühendisliği çevrelerinin üzerinde birleştiği bir konu, yazılım mühendisliğinin halen "genç" bir disiplin olduğu ve yeterli olgunluğa ulaşması için birçok konuda fikir birliğinin sağlanması için zamana gereksinim olduğudur .

Yazılım Mühendisliği

17

Page 18: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Mühendisliği Eğitimi

Yazılım mühendisliğinin olgunlaşma sürecini hızlandırmak için yakın geçmişte, uluslararası meslek kuruluşları (ACM, Association for Computing) "Yazılım Mühendisliği Koordinasyon Komisyonunu" oluşturmuş ve yazılım mühendisliği alanında çeşitli projelere başlamıştır. Bunlar;

• Yazılım mühendisliği çekirdek bilgisinin tanımlanması - Software Engineering Body of Knowledge (SWEBOK).

• Yazılım mühendisliği etiklerinin tanımlanması - Software Engineering Code of Ethics and Professional Practice (SWCEPP).

• SWEBOK ile uyumlu olarak örnek bir eğitim programı tanımlanması - Software Engineering Education Project(SWEEP).

olarak belirlenmiştir. Yazılım mühendisliği çekirdek bilgisinin(SWEBOK) ilk versiyonu, çalışmaların ilk aşamasının tamamlanmasıyla, 2001 yılında hazırlanmıştır. SWEEP kapsamında eğitim programlarının tanımlanması çalışmaları halen devam etmektedir. Yukarıda belirtilen çalışmalarla bağlantılı olarak, son yıllarda A.B.D, Avustralya, Kanada ve Türkiye'de çeşitli üniversiteler "Yazılım Mühendisliği Lisans ve Yüksek Lisans Programları" oluşturmuşlardır.

Yazılım Mühendisliği

18

Page 19: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Yazılım Mühendisliği Eğitimi

Günümüzde yazılımlarda karşılaşılan problemler, yazılım mühendisliği eğitiminin önemini vurgulamaktadır. Bu bağlamda, yazılım problemlerinin çözümü ve iyileştirmeler için, gelecekteki yazılım mühendislerinin eğitimine odaklanılması gerektiği, literatürde sıklıkla vurgulanmaktadır.

Yazılım Mühendisliği

19

Page 20: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Beni Dinlediğiniz İçin

TEŞEKKÜR EDERİM..

Page 21: Marmara Üniversitesi Bilişim Ana Bilim Dalı

Sibernetik ve Sanal Gerçeklik

21

Kaynakça

Meriç Merih AKYOL, Türkiye’de Yazılım Mühendisliği Ve Yazılım Yönetimi Uygulamaları, 2009 Yazılım Mühendisliği (Software Engineering), http://www.cengaver.net/depo/yazMuh.pdf, 12.05.2011 İrfan MACİT, Yazılım Mühendisliği ve Araçları (CASE), http://w3.gazi.edu.tr/~nyalcin/CASE.pdf,

12.05.2011 http://tr.wikipedia.org/wiki/Yaz%C4%B1l%C4%B1m_m%C3%BChendisli%C4%9Fi, 12.05.2011 Recep Rehat ÇETİN, Yazılım Mühendisliğinde Uygulama Geliştirmede Bir Çözüm: Yazılım

Konfigürasyon Yönetimi, 2007 Barış ULU, Banu DİRİ, Yazılım Mühendisligi Yönetim Süreci Ontolojisi, 2008 Yazılım Mühendisliği Nedir?, http://www.csharpnedir.com/articles/read/?id=230, 14.05.2011 Yazılım Mühendisliği’nin Asli ve Arızi Özellikleri, http://www.javaturk.org/store/swe/No%20Silver

%20Bullet%20-%20TR.pdf, 14.05.2011 Geçmişten Günümüze Programlama Dilleri, http://www.chip.com.tr/blog/kadircamoglu/Gecmisten-

Gunumuze-Programlama-Dilleri_1846.html, 14.05.2011 Dr. M.Erhan SARIDOĞAN, Yazılım Mühendisliği, 2008