buradan - Sibernetik ve Sanal Gerçeklik

Download Report

Transcript buradan - Sibernetik ve Sanal Gerçeklik

Marmara Üniversitesi
Bilişim Ana Bilim Dalı
Hazırlayan: Baha KURTBOĞANOĞLU
Öğretim Üyesi: Doç. Dr. Erhan AKYAZI
İSTANBUL, 2011
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.
2
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.
3
Tarihte İlk Yazılım Dilleri
1940’lı Yıllar
1943 - Plankalkül (Konrad Zuse)
1943 - ENIAC coding system
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 (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)
4
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)
5
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#
6
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ı. 1871 ‘de
makineyi tamamlayamadan öldü.
7
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.
8
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.
9
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.
10
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?
11
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.
12
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
13
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.
14
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.
15
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.
16
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 .
17
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.
18
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.
19
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/GecmistenGunumuze-Programlama-Dilleri_1846.html, 14.05.2011
 Dr. M.Erhan SARIDOĞAN, Yazılım Mühendisliği, 2008
21