yazılım mühendisliği teknikleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
yazılım mühendisliği teknikleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

20.12.10

Yazılım Mühendisliği Pratikleri

TAI'de katıldığım bir eğitimde aldığım notlarımı sizinle paylaşmak istiyorum. Bunlar yazılım mühendisliği gerektiren işlerde göz önünde bulundurulması gereken pratiklerdir. Kaliteli bir iş için dikkat edilmesi gerekir.


PRATİKLER

1.Yönetim
  • Planlama
  • Check-list (Başlamadan önce yapılması gerekenler)
  • Görev paylaşımı
  • Risklerin tanımlanması
  • Başarının ölçülmesi ve değerlendirilmesi
  • Süreç yönetimi
  • Kayıtlı çalışma

2.Kaynak Yönetimi
  • İdeal ekip sayısı 5-7 (Tecrübe olarak söyleniyor)
  • Çalışanlara değer verme, adil olma, ödüllendirme
  • Eğitim
  • Uzmanlaşma
  • Etkin iletişim

3.Bütçe Yönetimi
  • İşgücü, zaman, yatırım ve maliyetler
  • Proje başlamadan önce deneysel kestirimler
  • Sürekli izleme ve ölçme

4.Metrik Yönetimi
  • Nokta atışı sayısal değerler
  • Amaç, başarımı ölçmek ve riskleri tanımlamak
  • Efor metrikleri
  • Geliştirilen kodun metrikleri
  • Gereksinim metrikleri
  • Değişiklik istekleri metrikleri
  • Hata metrikleri
  • Test metrikleri

5.Disiplin*
  • En önemlisi. Yetki ve sorumluluklar belli olmalı.
  • Saha kurallarını koymak ve kurum kültürü (Birçok toplantının verimsiz geçmesinin nedeni saha kurallarının tam konulamaması)
  • Son sözü söylememek projeye zarar verir. Hayır demeyi herkes bilmeli. Net olunmalı.
  • Sonuç odaklı olunmalı.

6.Gereksinim Yönetimi
  • Gereksinimlerin belirlenmesi
  • Gereksinimlerin herkesce anlaşılması
  • Gereksinim belirlemenin son aşaması olarak gereksinimlerin dondurulması.

7.Sistem Mühendisliği
  • İç içe çalışma (Geliştiriciler ile)
  • Sistem mimarisine hakim olma
  • Sistem yazılım uyumunun sağlanması

8.Arayüz Tanımlama ve Denetleme
  • Gereksinim analizi bitmeden önce tüm dış arayüzler tanımlanmalı
  • Çökmeler genellikle arayüzlerde olur. Genellikle iç arayüzlerde değil dış arayüzlerde hata çıkar. Bunun nedeni ekipler arası iletişim eksikliğidir.

9.Tasarım
  • Standartlara hakimiyet (178B, IEEE12207)
  • Planlara uyum
  • Sistem ve yazılım geliştirilmeye açık olmalı
  • Bir arayüzün başka bir arayüzle bağlantısı mümkün olduğunca az olmalı
  • Sadelik ve basitlik önemli
  • İnsan makine arayüz(GUI) tasarımına dikkat edilmeli. (Bir istatistiğe göre burada harcanan efor projeye harcanan eforun %47’si kadarmış)

10.Kodlama
  • Anlaşılabilir
  • Kısa yordamlar
  • Açıklamalar
  • Sık sık yedekleme
  • Hatalara teslim olmayın. Hatalar tecrübeleri arttırır.

11.Test
  • Projenin kritik bileşenleri fonksiyonel olarak test edilmeli (White-Box)
  • Aşırı yüklemelerle test edilmeli (Aşırı yükleme testi)
  • Projenin sonuna doğru, en gerçekçi senaryolarla denenmeli

12.Hata ayıklama (Debugging)
  • Hatalar birer birer ayıklanmalı

22.9.10

Yazılım Mühendisliği Hakkında


1.      YAZILIM MÜHENDİSLİĞİ TANIMLARI

Yazılım mühendisliği, bilgisayar bilimi, yönetim bilimi, ekonomi ve bilişim bilim dallarından yararlanmakta ve sorun çözümünde mühendislik yöntemlerini kullanmaktadır.(Kalıpsız, 2004)
Türk Dil Kurumu Tanımı: Bir bilgisayarda donanıma hayat veren ve bilgi işlemde kullanılan programlar, yordamlar, programlama dilleri ve belgelemelerin tümü.
Yazılım üretiminin, mühendislik yöntemleriyle yapılmasını öngören ve bu yönden yöntem, araç, teknik ve metodolojiler üreten bir disiplindir. (Sağıroğlu,2010)

2.      YAZILIM GELİŞTİRME TEKNİKLERİ

2.1.Yazılım Geliştirmede Klasik (Waterfall) Süreç
             Şelale modelinin en önemli aşaması analiz aşamasıdır. Bu aşama iyi olursa proje en kısa sürede bitirilebilir. Bu aşamada iyi analiz yapılamazsa tasarım yanlış olacaktır ve ilerleyen aşamalarda önceki aşamalara geçme mecburiyeti doğacaktır. İdeal proje hiçbir önceki aşamaya gidilmemiş projedir. Böylece maliyet artmadan kaynaklar optimum kullanılarak proje tamamlanmış olur.


2.2.Yazılım Geliştirmede Prototip Kullanımı
            Bu modelde yazılım tamamlanmadan prototipler oluşturulup kullanıcıya önceden gösterilmekte. Bu sayede kullanıcıdan projeye katkıda bulunacak feedback’ler alınabilmekte. Bu noktada yukarıda bahsettiğim şelale modelinden dah üstün bir model. Şelale modelinde müşteri son ürünü görüyordu, burada ise proje tamamlanmadan prototip üzerinde de müşteriye bir şeyler gösterildiğinden müşteri istekleri daha fazla ve düşük maliyetlerle karşılanabilmekte.

2.3.Artımlı Yazılım Geliştirme
   Bu modelde bir uygulama geliştirilir, süreç içerisinde bu geliştirilen uygulamaya gerekli eklemeler yapılır ve bu eklemelerle proje artırımsal olarak ilerler. Bitirme tezleri buna örnek gösterilebilir. Ya da bir hesap makinesi yaptınız, bu makine sadece toplama ve çıkarma yapabiliyor, siz buna sürekli yeni fonksiyonlar eklediniz ve bunu bilimsel bir hesap makinesi haline getirdiniz. İşte bu tarz bir geliştirme tekniği artımlı yazılım geliştirmedir.


2.4.Yazılım Geliştirmede Spiral Yöntem
Bu modelde yinelemeli bir yaklaşım vardır. Her yinelemede dört aşamadan geçilir. Bu aşamalar sırasıyla şekil-4’de de görüldüğü gibi analiz, dizayn, kodlama ve test aşamalarıdır. Projenin bir bölümü analiz edilir tasarlanır kodlanır ardından test edilir. Bu teste genellikle müşteri de katılır. Bu sayede bir hata oluşursa bu erken fark edilir ve müşteri hak ediş verirken daha şeffaf bir ortam sağlanır. Proje sonuçlanana kadar bu döngü devam eder.

2.5. Re-Use Modeli

            Bu modeli stajım sırasında görme fırsatım oldu. Özellikle büyük firmaların kullanabileceği bir yöntem. Daha önce kullanılmış kodların ihtiyaç duyulduğunda gerekli modifikasyonlarının yapılıp tekrar kullanılmasına dayanan bir yöntemdir. Stajda da Aselsan A.Ş.’de bu şekilde bir havuz var ve gerekli dökümantasyonla birlikte yapılan çalışmalar ileride tekrar kullanılabilir düşüncesiyle bu havuza atılıyor. Benim projem de aynı şekilde bu havuza ileride yapılacak bir ağ dinleme programında kullanılmak üzere havuza atıldı. Maliyetleri düşüren faydalı bir yöntem.

3.      YAZILIM GELİŞTİRMEDE KARŞILAŞILAN GERÇEK PROBLEMLER

Yazılım geliştirirken karşılaşılan problemlerin başında müşteri isteklerini tam olarak belirlenmesi gelmektedir.  Müşteri derdini tam anlatamazsa ya da analizci tam anlayamazsa ürün müşterini ihtiyacını karşılayamayacaktır.
Müşteri ile yaşanan başka bir problem ise müşterinin söylediklerini inkar etmesidir. Bu tarz durumların önüne geçebilmek için belgelendirme çok önem arz etmektedir.
Diğer bir problem tasarım hatasıdır. Yapılan analize uygun bir tasarım yapmak projenin sağlığı açısında hayati önem taşımaktadır. Örneğin bir veritabanında sık yapılan sorguların hızlı çalışması gerekmektedir ancak tasarım hatası yüzünden bunun teknik olarak mümkün olamayacağı bir durumla karşılaşılabilir.
Yanlış ya da eksik dökümantasyon da sık karşılaşılan problemlerdendir. Özellikle büyük projelerde bir projeyi aynı ekibin bitirmesi her zaman mümkün olmuyor, ekip elemanlarından biri birkaçı ya da tamamı değişebilir. Bu durumda dökümantasyondaki hatanın maliyeti büyük olur.
Yazılım bir ekip tarafından geliştiriliyorsa ekip çalışmasına yatkın ekip elemanlarından oluşmayan bir ekipte her zaman için problem yaşanır. Bu da yazılımın bitirilme süresini uzatacağından maliyetleri arttırır.

4.      ÜLKEMİZDEKİ YAZILIM MÜHENDİSLİĞİ

Ülkemizde yazılım mühendisliği çoktandır konuşulagelen ancak tam manasıyla yeni yeni kullanılmaya başlanan bir kavramdır. Bilgisayar mühendisliği okuyanlar bile bilgisayar mühendisliği kavramını tam kavrayamadıklarından kendilerine programcı olarak görmekteydiler. Ancak bu durum günümüzde büyük ölçüde değişmekte. Üniversitelerde bilgisayar mühendisliğinin yanında yazılım mühendisliği bölümleri kurulmaya başlandı. Yazılım mühendisliği ayrı bir bölüm olacak düzeye erişti. Öte yanda piyasaya bakacak olursak kurumsallaşmış köklü şirketlerde yazılım mühendisliği tam manasıyla yapılmakta. Bu büyük firma olmanın bir gereği haline geldi. Zaten öyle olmasaydı büyük projelerin gerçekleştirilmesi mümkün olmazdı. Diğer taraftan orta ve küçük yazılım firmalarında yazılım mühendisliği olgularına rastlamak zor. Bu firmalarda bu işin eğitimini almamış, birkaç kursta öğrendikleriyle bu işi yapmaya çalışsan insanlar maalesef yazılım mühendisliğinden uzaklar. Ancak üniversitelerden mezun olan ve yazılım mühendisliği kültürünü okuldan alan genç bilgisayar mühendislerini sayısı arttıkça ülkemizdeki yazılım mühendisliği kavramı da yaygınlaşacaktır.

KAYNAKLAR
1- 2004 Prof. Dr. Oya Kalıpsız YTÜ Ders Notları
2-2010 Prof.Dr. Şeref Sağıroğlu Gazi Ü. Ders Notları
3-DeGrace, Peter, and Stahl, Leslie Hulet, Wicked Problems, Righteous Solutions: A Catalogue of Modern Software Engineering Paradigms, 1990, pp. 116, 117, 127. Reprinted with permission of Prentice Hall, Englewood Cliffs, New Jersey.
4- Beck, K., Extreme Programming Explained: Embrace Change, Addison Wesley, 2000, ISBN: 0201616416.

                                                                                                         
                                                                                                              Mart 2010 - Mehmet Ali Demir
Related Posts Plugin for WordPress, Blogger...