Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Yazılım Mühendisliği Software Engineering Marmara Üniversitesi

Benzer bir sunumlar


... konulu sunumlar: "Yazılım Mühendisliği Software Engineering Marmara Üniversitesi"— Sunum transkripti:

1 Yazılım Mühendisliği Software Engineering 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

2 Bilgisayar Yazılımı 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. 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.

3 Bilgisayar Yazılımı 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.

4 Bilgisayar Yazılımı Tarihte İlk Yazılım Dilleri 1940’lı Yıllar
Plankalkül (Konrad Zuse) ENIAC coding system C-10 1950’li ve 1960’lı Yıllar Bu yıllar modern programlama dillerinin temellerinin atıldığı yıllardır. Assembly Language Autocode FORTRAN (FORmula TRANslator) LISP (LISt Processor) ALGOL (ALGOrithmic Language) COBOL (COmmon Business Oriented Language) APL (A Programming Language) Simula BASIC (Beginner's All-purpose Symbolic Instruction Code) PL/I (Programming Language One)

5 Bilgisayar Yazılımı Tarihte İlk Yazılım Dilleri 1970’li Yıllar
Bu yıllarda programlama dilleri olgunlaşmaya, çeşitlenmeye başladığı ve yapısal programlama dillerinin geliştirildiği yıllardır. Pascal C Smalltalk Prolog ML SQL 1980’li Yıllar 1980’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ı. Ada C++ Eiffel Perl FL (Function Level)

6 Bilgisayar Yazılımı 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. Haskell Python Java Ruby PHP Delphi C#

7 Bilgisayar Yazılımı 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. 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ı ‘de makineyi tamamlayamadan öldü.

8 Yazılım Mühendisliği 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.

9 Yazılım Mühendisliği 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.

10 Yazılım Mühendisliği 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 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ı. Therac-25 Tıp Kazası: Therac-25 radyasyon terapi makinesinin kontrol yazılımındaki bir hata nedeniyle tarihleri arasında birçok hastanın ölümüne neden oldu.

11 Yazılım Mühendisliği 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?

12 Yazılım Mühendisliği 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.

13 Yazılım Mühendisliği 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

14 Yazılım Mühendisliği 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.

15 Yazılım Mühendisliği 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 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.

16 Yazılım Mühendisliği 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.

17 Yazılım Mühendisliği 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 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 .

18 Yazılım Mühendisliği 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.

19 Yazılım Mühendisliği 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.

20 Beni Dinlediğiniz İçin
TEŞEKKÜR EDERİM..

21 Sibernetik ve Sanal Gerçeklik
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), İrfan MACİT, Yazılım Mühendisliği ve Araçları (CASE), 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?, Yazılım Mühendisliği’nin Asli ve Arızi Özellikleri, Geçmişten Günümüze Programlama Dilleri, Dr. M.Erhan SARIDOĞAN, Yazılım Mühendisliği, 2008


"Yazılım Mühendisliği Software Engineering Marmara Üniversitesi" indir ppt

Benzer bir sunumlar


Google Reklamları