210 likes | 525 Views
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?
E N D
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? 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.
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 Tukeytarafı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ı Tarihte İlk Yazılım Dilleri 1940’lı Yıllar 1943 - Plankalkül (Konrad Zuse) 1943 - ENIAC codingsystem 1949 - C-10 1950’li ve 1960’lı Yıllar Bu yıllar modern programlama dillerinin temellerinin atıldığı yıllardır. 1951 - Assembly Language 1952 - Autocode 1954 - FORTRAN (FORmulaTRANslator) 1958 - LISP (LIStProcessor) 1958 - ALGOL (ALGOrithmic Language) 1959 - COBOL (COmmon Business Oriented Language) 1962 - APL (A Programming Language) 1962 - Simula 1964 - BASIC (Beginner'sAll-purposeSymbolicInstructionCode) 1964 - PL/I (Programming Language One)
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. 1970 - Pascal 1972 - C 1972 - Smalltalk 1972 - Prolog 1973 - ML 1978 - 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ı. 1983 - Ada 1983 - C++ 1985 - Eiffel 1987 - Perl 1989 - FL (Function Level)
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. 1990 - Haskell 1990 - Python 1991 - Java 1993 - Ruby 1995 - PHP 1995 - Delphi 2000 - C#
Bilgisayar Yazılımı Tarihte İlk Yazılımcı Bir Kadındı Bugünkü programcılığın temellerini atan Lady Ada Lovelace10 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‘inlogaritma cetvelindeki yanlışlıklar üzerinde çalışıyordu. Babbage ile Lovelacebirlikte 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’deyaş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ü.
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.
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.
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 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 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 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 • 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 • Yazılım Geliştirme Modelleri • Klasik Çevrim: Çağlayan (waterfall), şelale modeli, büyük tasarım modeli (granddesign) 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: Buyö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 • 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 • 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 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 • 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, AssociationforComputing) "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 EngineeringCode of Ethicsand Professional Practice (SWCEPP). • SWEBOK ile uyumlu olarak örnek bir eğitim programı tanımlanması - Software EngineeringEducation 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 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.
Beni Dinlediğiniz İçin TEŞEKKÜR EDERİM..
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), 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