Yazılım mühendisliğinin tarihi - History of software engineering - Wikipedia

1960'lardaki başlangıcından beri, yazı yazılım yazılım kalitesinin en iyi şekilde nasıl en üst düzeye çıkarılacağı ve nasıl yaratılacağıyla ilgilenen bir mesleğe dönüşmüştür. Kalite, yazılımın ne kadar sürdürülebilir olduğuna, kararlılığına, hızına, kullanılabilirliğine, test edilebilirliğine, okunabilirliğine, boyutuna, maliyetine, güvenliğine ve kusur veya "hata" sayısına ve ayrıca zarafet, özlülük ve müşteri gibi daha az ölçülebilir niteliklere atıfta bulunabilir. diğer birçok özelliğin yanı sıra memnuniyet. Yüksek kaliteli yazılımın en iyi nasıl oluşturulacağı, kod yazmak için "en iyi uygulamalar" olarak adlandırılan yazılım tasarım ilkelerini kapsayan ayrı ve tartışmalı bir sorundur ve ayrıca optimum ekip boyutu, süreç, zamanında yazılımın en iyi nasıl teslim edileceği gibi daha geniş yönetim konularıdır. ve olabildiğince çabuk, iş yeri "kültürü", işe alma uygulamaları vb. Bütün bunlar geniş başlık altında yazılım Mühendisliği.[1]

Genel Bakış

Yazılım mühendisliğinin evrimi bir dizi alanda dikkate değerdir:

  • Meslek olarak ortaya çıkışı: 1980'lerin başında,[2] yazılım mühendisliği profesyonelliği, bilgisayar bilimi ve geleneksel mühendisliğin yanında yer almaktır.[kaynak belirtilmeli ]
  • Kadınların rolü: 1970'ten önce erkekler daha prestijli ve daha iyi ödeme yapanları dolduruyor donanım mühendisliği roller genellikle yazılımın yazımını kadınlara ve Grace Hopper veya Margaret Hamilton birçok doldurdu bilgisayar Programlama Meslekler.[3][4]
    Günümüzde, nedeni açıkça belirlenemeyen bir durum olan diğer mesleklere göre yazılım mühendisliğinde daha az kadın çalışıyor. Pek çok akademik ve profesyonel organizasyon[DSÖ? ] bu durumu dengesiz görüyor ve çözmek için çok uğraşıyoruz.[5]
  • Süreçler: Süreçler yazılım mühendisliğinin büyük bir parçası haline geldi. Yazılımı geliştirme potansiyellerinden ötürü selamlanıyorlar, ancak programcıları kısıtlama potansiyelleri nedeniyle sert bir şekilde eleştiriliyorlar.[kaynak belirtilmeli ]
  • Donanım maliyeti: Yazılımın donanıma göre göreli maliyeti, son 50 yılda önemli ölçüde değişti. Ne zaman anabilgisayarlar pahalıydı ve büyük destek personeli gerektiriyordu, onları satın alan az sayıda kuruluş da büyük, pahalı özel yazılım mühendisliği projelerini finanse edecek kaynaklara sahipti. Bilgisayarlar artık çok daha fazla sayıda ve çok daha güçlü, bunun da yazılım üzerinde çeşitli etkileri var. Daha büyük pazar, büyük projeleri oluşturmak için destekleyebilir raftaki ticari gibi şirketler tarafından yapıldığı gibi yazılım Microsoft. Ucuz makineler, her programcının oldukça hızlı bir terminale sahip olmasını sağlar. derleme. Söz konusu programlar aşağıdaki gibi teknikleri kullanabilir: çöp toplama, bu da programcının yazmasını daha kolay ve hızlı hale getirir. Öte yandan, daha az sayıda kuruluş, programcıları büyük özel yazılım projeleri için istihdam etmek yerine raftaki ticari mümkün olduğu kadar yazılım.[kaynak belirtilmeli ]

1945'ten 1965'e: Kökenler

Terim için varsayılan kökenler yazılım Mühendisliği ACM başkanından 1965 mektubu dahil Anthony Oettinger,[6][7] tarafından dersler Douglas T. Ross 1950'lerde MIT'de.[8] Margaret H. Hamilton "disipline, yazılım mühendisliğine meşruiyet kazandırmanın bir yolu olarak isim verme fikrini ortaya atan kişidir."[9][10]

NATO Bilim Komitesi iki konferansa sponsor oldu[11] 1968'de yazılım mühendisliği üzerine (Garmisch, Almanya - bkz. konferans raporu ) ve 1969, bu alana ilk desteğini verdi. Birçoğu bu konferansların mesleğin resmi başlangıcı olduğuna inanıyor. yazılım Mühendisliği.[6][12]

1965 - 1985: Yazılım krizi

Yazılım mühendisliği, sözde yazılım krizi 1960'ların, 1970'lerin ve 1980'lerin, yazılım geliştirme sorunlarının çoğunu tanımlayan. Pek çok proje bütçeyi ve takvimi aştı. Bazı projeler maddi hasara neden oldu. Birkaç proje can kaybına neden oldu.[13] Yazılım krizi başlangıçta şu terimlerle tanımlandı: üretkenlik, ancak vurgulamak için gelişti kalite. Bazıları terimi kullandı yazılım krizi Yeterli nitelikli programcıları işe almadıklarından bahsetmek.[kaynak belirtilmeli ]

Peter G. Neumann yazılım sorunları ve felaketlerin güncel bir listesini tutmuştur.[15] Yazılım krizi gözden kayboluyor, çünkü uzun bir süre (20 yıldan fazla) kriz modunda kalmak psikolojik olarak son derece zor. Bununla birlikte, yazılım - özellikle gerçek zamanlı gömülü yazılım - riskli kalır ve yaygındır ve rehavete teslim olmamak çok önemlidir. Son 10-15 yılda Michael A. Jackson Yazılım mühendisliğinin doğası hakkında kapsamlı bir şekilde yazmıştır, zorluklarının ana kaynağını uzmanlık eksikliği olarak belirlemiştir ve problem çerçevelerinin, yazılım mühendisliğinin bir önkoşulu olan yazılım mühendisliğinin "normal uygulaması" için temel oluşturmasını önermiştir. bir mühendislik bilimi haline gelmek.[16]

1985 - 1989: "Gümüş Kurşun Yok"

Onlarca yıldır, yazılım krizini çözmek, yazılım araçları üreten araştırmacılar ve şirketler için çok önemliydi. 1980'lerde yazılıma sahip olmanın ve sürdürmenin maliyeti, yazılımı geliştirmekten iki kat daha pahalıydı.[kaynak belirtilmeli ]

  • 1990'larda sahiplik ve bakım maliyeti 1980'lerde% 30 arttı.
  • 1995'te istatistikler, ankete katılan geliştirme projelerinin yarısının faaliyette olduğunu ancak başarılı olarak değerlendirilmediğini gösterdi.
  • Ortalama bir yazılım projesi, programını yarı yarıya aşıyor.
  • Müşteriye teslim edilen tüm büyük yazılım ürünlerinin dörtte üçü, ya hiç kullanılmayan ya da müşterinin gereksinimlerini karşılamayan arızalardır.

Yazılım projeleri

Görünüşe göre, 1970'lerden 1990'lara kadar her yeni teknoloji ve uygulama, bir gümüş kurşun yazılım krizini çözmek için. Araçlar, disiplin, resmi yöntemler süreç ve profesyonellik sihirli değnek olarak lanse edildi:[kaynak belirtilmeli ]

  • Araçlar: Özellikle vurgulananlar şunlardı: yapısal programlama, nesne yönelimli programlama, DURUM ICL'ler gibi araçlar CADES CASE sistemi,[17] Ada, dokümantasyon, ve standartları gümüş mermi olarak lanse edildi.
  • Disiplin: Bazı uzmanlar, yazılım krizinin programcıların disiplin eksikliğinden kaynaklandığını öne sürdüler.
  • Biçimsel yöntemler: Bazıları, biçimsel mühendislik metodolojilerinin yazılım geliştirmeye uygulanması halinde, yazılım üretiminin, diğer mühendislik dalları kadar öngörülebilir bir endüstri olacağına inanıyordu. Tüm programların doğruluğunu kanıtlamayı savundular.
  • Süreç: Birçoğu tanımlanmış süreçlerin kullanımını savundu ve metodolojiler gibi Yetenek Olgunluk Modeli.
  • Profesyonellik: Bu, bir etik kuralları, lisanslar ve profesyonellik üzerinde çalışmaya yol açtı.

1986'da Fred Brooks yayınladı Gümüş Kurşun Yok makale, hiçbir bireysel teknoloji veya uygulamanın 10 yıl içinde üretkenlikte 10 kat artış sağlayamayacağını savunuyor.[kaynak belirtilmeli ]

Gümüş mermiler hakkındaki tartışmalar sonraki on yıl boyunca şiddetlendi. Savunucuları Ada, bileşenleri ve süreçler, en sevdikleri teknolojinin sihirli bir değnek olacağını yıllarca tartışmaya devam etti. Şüpheciler aynı fikirde değildi. Sonunda, neredeyse herkes hiçbir zaman gümüş merminin bulunmayacağını kabul etti. Henüz, iddialar gümüş mermiler ara sıra açılır, hatta bugün.[kaynak belirtilmeli ]

Biraz[DSÖ? ] yorumlamak[neden? ] gümüş kurşun yok Yazılım mühendisliğinin başarısız olduğu anlamına gelir.[açıklama gerekli ] Bununla birlikte Brooks, daha fazla okuyarak şöyle devam ediyor: "Önümüzdeki 40 yıl içinde kesinlikle önemli ilerlemeler kaydedeceğiz; 40 yılı aşan büyüklükte bir düzen pek de büyülü değil ..."[kaynak belirtilmeli ]

Başarı için tek bir anahtar arayışı asla işe yaramadı. Bilinen tüm teknolojiler ve uygulamalar, yalnızca üretkenlik ve kalite açısından kademeli iyileştirmeler yapmıştır. Yine de başka hiçbir meslek için sihirli değnek yoktur. Diğerleri yorumluyor gümüş kurşun yok Yazılım mühendisliğinin nihayet olgunlaştığının ve projelerin sıkı çalışma nedeniyle başarılı olduğunu kabul ettiğinin kanıtı olarak.[kaynak belirtilmeli ]

Bununla birlikte, aslında bir dizi gümüş mermiler bugün, hafif metodolojiler dahil (bkz. "Proje Yönetimi "), elektronik tablo hesaplayıcıları, özelleştirilmiş tarayıcılar site içi arama motorları, veritabanı rapor oluşturucuları, bellek / farklar / geri alma özelliğine sahip entegre tasarım-test kodlama editörleri ve tamamen özelleştirilmiş web sitelerinin maliyetinin çok altında bilgi web siteleri gibi niş yazılımlar üreten özel mağazalar geliştirme. Bununla birlikte, yazılım mühendisliği alanı, çoğu sorunu iyileştirmek için tek bir "sihirli değnek" için çok karmaşık ve çeşitli görünmektedir ve her sorun, tüm yazılım sorunlarının yalnızca küçük bir bölümünü oluşturmaktadır.[kaynak belirtilmeli ]

1990 - 1999: İnternetin Önemi

Yükselişi İnternet World Wide Web'de uluslararası bilgi görüntüleme / e-posta sistemlerine olan talebin çok hızlı artmasına yol açtı. Programcılardan, resimleri, haritaları, fotoğrafları ve diğer resimleri, ayrıca basit animasyonları, daha önce hiç görülmemiş bir hızda, resim gösterimini / depolamayı optimize etmek için (küçük resimlerin kullanımı gibi) iyi bilinen birkaç yöntemle işlemeleri gerekiyordu.[kaynak belirtilmeli ]

İnternette çalışan tarayıcı kullanımındaki artış Köprü Metni Biçimlendirme Dili (HTML), bilgi görüntüleme ve erişimin organize edilme şeklini değiştirdi. Yaygın ağ bağlantıları, uluslararası pazarların büyümesine ve önlenmesine yol açtı. bilgisayar virüsleri MS Windows bilgisayarlarda ve istenmeyen e-postanın büyük ölçüde çoğalması, e-posta sistemlerinde, iletişim kanallarında taşkın ve yarı otomatik ön tarama gerektiren önemli bir tasarım sorunu haline geldi. Anahtar kelime arama sistemleri web tabanlı hale geldi arama motorları ve birçok yazılım sisteminin uluslararası arama için yeniden tasarlanması gerekiyordu. Arama motoru optimizasyonu (SEO) teknikleri. Bilgi akışını birden çok yabancı dilde çevirmeye çalışmak için insan doğal dil çeviri sistemlerine ihtiyaç duyuldu ve birçok yazılım sistemi, insan çevirmenlerin tasarım konseptlerine dayalı olarak çok dilli kullanım için tasarlandı. Tipik bilgisayar kullanıcı tabanları yüzlerce veya binlerce kullanıcıdan, çoğu zaman milyonlarca uluslararası kullanıcıya ulaştı.[kaynak belirtilmeli ]

2000 - 2015: Hafif metodolojiler

Birçok küçük kuruluşta yazılım talebinin artmasıyla birlikte, ucuz yazılım çözümlerine duyulan ihtiyaç, gereksinimlerden dağıtıma kadar daha hızlı ve daha kolay çalışan yazılımlar geliştiren daha basit, daha hızlı metodolojilerin büyümesine yol açtı. Hızlı prototip oluşturmanın kullanımı tüm hafif metodolojiler, gibi Aşırı Programlama (XP), büyüyen, çok sayıda küçük yazılım sistemi için gereksinim toplama ve güvenilirlik testi dahil olmak üzere yazılım mühendisliğinin birçok alanını basitleştirmeye çalıştı. Çok büyük yazılım sistemleri, dokümantasyon setindeki birçok cilt ile hala yoğun şekilde dokümante edilmiş metodolojileri kullanıyordu; ancak, daha küçük sistemler, yazılım hesaplamaları ve algoritmalarının, bilgi depolama / erişimin ve görüntülemenin geliştirilmesi ve sürdürülmesini yönetmek için daha basit, daha hızlı bir alternatif yaklaşıma sahipti.[kaynak belirtilmeli ]

Yazılım mühendisliğinde güncel eğilimler

Yazılım mühendisliği genç bir disiplindir ve halen gelişmektedir. Yazılım mühendisliğinin geliştirdiği yönler şunları içerir:[kaynak belirtilmeli ]

Yönler

Yönler yazılım mühendislerinin ilgilenmesine yardımcı olun kalite özellikleri eklemek veya çıkarmak için araçlar sağlayarak Genelge kodu birçok bölgeden kaynak kodu. Yönler, tüm nesnelerin veya işlevlerin belirli durumlarda nasıl davranması gerektiğini tanımlar. Örneğin, yönler ekleyebilir hata ayıklama, Kerestecilik veya kilitleme belirli türlerdeki tüm nesnelerin kontrolü. Araştırmacılar şu anda genel amaçlı kod tasarlamak için yönlerin nasıl kullanılacağını anlamak için çalışıyorlar. İlgili kavramlar şunları içerir: üretken programlama ve şablonlar.

Deneysel

Deneysel yazılım mühendisliği tasarlamakla ilgilenen bir yazılım mühendisliği dalıdır deneyler yazılım üzerinde, deneylerden veri toplamada ve bu verilerden yasalar ve teoriler geliştirmede. Bu yöntemin savunucuları, yazılımın doğasının, yazılım hakkındaki bilgileri yalnızca deneylerle ilerletebileceğimizi savunuyorlar.[kaynak belirtilmeli ].

Yazılım ürün grupları

Yazılım ürün grupları, diğer adıyla ürün ailesi mühendisliği, üretmenin sistematik bir yoludur aileler bir dizi tamamen bireysel ürünler oluşturmak yerine, yazılım sistemleri. Bu yöntem kapsamlı, sistematik ve resmi kodun yeniden kullanımı, yazılım geliştirme sürecini sanayileştirmeye çalışmak.

ICSE 2000'de düzenlenen Yazılım Mühendisliğinin Geleceği konferansı (FOSE), SE'nin 2000'deki son durumunu belgeledi ve önümüzdeki on yıl içinde çözülmesi gereken birçok sorunu listeledi. FOSE, ICSE 2000'de izler [18] ve ICSE 2007[19] konferanslar ayrıca yazılım mühendisliğindeki en son teknolojinin belirlenmesine yardımcı olur.[kaynak belirtilmeli ]

Yazılım mühendisliği bugün

Meslek sınırını ve içeriğini tanımlamaya çalışıyor. Yazılım Mühendisliği Bilgi Grubu SWEBOK 2006 yılında bir ISO standardı olarak tablo haline getirilmiştir (ISO / IEC TR 19759).[kaynak belirtilmeli ]

2006 yılında Money Magazine ve Salary.com Yazılım mühendisliğini büyüme, ücret, stres seviyeleri, saat ve çalışma ortamında esneklik, yaratıcılık ve alana girmenin ve ilerlemenin ne kadar kolay olduğu açısından Amerika'daki en iyi iş olarak derecelendirdi.[20]

Alt disiplinler

Yapay zeka

Çok çeşitli platformlar, AI'nın farklı yönlerinin geliştirilmesine izin verdi. uzman sistemler gibi Döngü -e derin öğrenme çerçeveleri gibi robot platformlarına Roomba açık arayüz ile.[21] Derindeki son gelişmeler yapay sinir ağları ve dağıtılmış bilgi işlem, aşağıdakiler dahil olmak üzere yazılım kitaplıklarının çoğalmasına yol açtı Deeplearning4j, TensorFlow, Theano ve Meşale.

Bir 2011 McKinsey Global Enstitüsü çalışma, 1,5 milyon yüksek eğitimli veri ve yapay zeka uzmanları ve yöneticilerinin eksikliğini buldu[22] ve bir dizi özel eğitim kampı bu talebi karşılamak için programlar geliştirmiştir. Veri İnkübatörü veya gibi ücretli programlar Genel Kurul.[23]

Diller

Erken sembolik yapay zekadan ilham aldı Lisp ve Prolog, erken AI programlamasına egemen olan. Modern yapay zeka geliştirme, genellikle aşağıdaki gibi ana dilleri kullanır: Python veya C ++,[24] veya niş diller gibi Wolfram Dili.[25]

Yazılım mühendisliği tarihinin önde gelen isimleri

Ayrıca bakınız

Referanslar

  1. ^ "CS302: Jared King" Yazılımın Tarihi"". learn.saylor.org. Alındı 2018-02-17.
  2. ^ "Yazılım mühendisliği ... son zamanlarda kendi başına bir disiplin olarak ortaya çıktı."Sommerville, Ian (1985) [1982]. Yazılım Mühendisliği. Addison-Wesley. ISBN  978-0-201-14229-7.
  3. ^ Abbate, Janet (2012). Cinsiyetin Yeniden Kodlanması. Cambridge, MA: MIT Press. pp.39. ISBN  978-0262534536.
  4. ^ Ensmenger Nathan (2012). Bilgisayar Çocukları Devraldı. Cambridge, MA: MIT Press. ISBN  978-0262517966.
  5. ^ "Bölüm 576: Kadınlar Kod Yazmayı Durdurduğunda". NPR Planet Money. 17 Ekim 2014. Alındı 27 Haziran 2018.
  6. ^ a b Meyer, Bertrand (4 Nisan 2013). Yazılım mühendisliğinin "kökeni""". Alındı 2016-11-25.
  7. ^ Tadre, Matti (2014-12-03). Bilgisayar Bilimi. CRC Basın. s. 121. ISBN  978-1-4822-1770-4.
  8. ^ Mahoney, Michael. "Yazılım Mühendisliğinin Kökleri" (PDF). CWI Üç Aylık. 3 (4): 325–334. Alındı 4 Haziran 2015.
  9. ^ 2018 Uluslararası Yazılım Mühendisliği Konferansı 40. yılını ve 50 yıllık Yazılım mühendisliğini kutladı. "ICSE 2018 - Genel Oturumlar - Margaret Hamilton". Alındı 9 Haziran 2018.
  10. ^ Rayl, A.J.S. (16 Ekim 2008). "NASA Mühendisleri ve Bilim Adamları - Hayalleri Gerçeğe Dönüştürüyor". NASA 50. yıldönümü web sitesi. NASA. Alındı 2016-11-25.
  11. ^ Brian Randell (2001). "NATO Yazılım Mühendisliği Konferansları". ncl.ac.uk. Alındı 2016-11-25.
  12. ^ a b c Kral Jared (2016). "Jared King" Yazılımın Tarihi"". CS302: Yazılım Mühendisliği. Saylor.org. Alındı 2016-11-25.
  13. ^ Therac-25
  14. ^ Leveson, N.G ​​.; Turner, CS (1993-07-01). "Therac-25 kazalarının araştırılması". Bilgisayar. 26 (7): 18–41. CiteSeerX  10.1.1.372.412. doi:10.1109 / MC.1993.274940. ISSN  0018-9162.
  15. ^ "RİSK LİSTESİ: RİSKLER-FORUM Özeti". Riskler Özeti.
  16. ^ {Michael Jackson, "Mühendislik ve Yazılım Mühendisliği", S Nanz ed, Yazılım Mühendisliğinin Geleceği, Springer Verlag 2010; Michael Jackson, Problem Frames: Yazılım Geliştirme Problemlerinin Analizi ve Yapılandırılması; Addison-Wesley, 2001}
  17. ^ D.J.Pearson "Bir yazılım mühendisliği sisteminin kullanımı ve kötüye kullanılması" Ulusal Bilgisayar Konferansı 1979
  18. ^ "ICSE2000: Katılım Çağrısı". Yalan söylüyorsun.
  19. ^ "ICSE 2007: Ana Sayfa". ucl.ac.uk.
  20. ^ Kalwarski, Tara; Daphne Mosher; Janet Paskin; Donna Rosato (2006). "Amerika'daki En İyi İşler". MONEY Dergisi. CNN. Alındı 2006-04-20., "MONEY Magazine ve Salary.com, büyüme, ücret, stres seviyeleri ve diğer faktörleri göz önünde bulundurarak yüzlerce işi araştırdı. Bu kariyerler en üst sırada yer aldı. 1. Yazılım Mühendisi ..."
  21. ^ "Roomba'yı Hacklemek". hackingroomba.com. Arşivlendi 18 Ekim 2009 tarihinde orjinalinden.
  22. ^ Manyika, James; Chui, Michael; Bughin, Jaques; Brown, Brad; Dobbs, Richard; Roxburgh, Charles; Byers, Angela Hung (Mayıs 2011). "Büyük Veri: İnovasyon, rekabet ve üretkenlik için bir sonraki sınır". McKinsey Global Enstitüsü. Arşivlendi 6 Mart 2013 tarihinde orjinalinden. Alındı 16 Ocak 2016. Alıntı dergisi gerektirir | günlük = (Yardım)
  23. ^ "NY, veri bilimcileri için yeni temel eğitim programı alıyor: Ücretsiz ama Harvard'dan daha zor". Venture Beat. Arşivlendi 15 Şubat 2016'daki orjinalinden. Alındı 21 Şubat 2016.
  24. ^ "C ++ Java". infoworld.com. Alındı 6 Aralık 2017.
  25. ^ Ferris, Robert (7 Nisan 2016). "Steve Jobs'un arkadaşı matematik dünyasını nasıl değiştirdi". CNBC. Alındı 28 Şubat 2018.

Dış bağlantılar