30 Kasım 2015 Pazartesi

Daily Meeting 2

Görev olarak atadığım kayıtsız kullanıcıların yani ziyaretçilerin kulanacağı ana sayfayı oluşturdum. Ziyaretçilerin o an aktif olan yardım etkinliğini görebilmesi için gereken linq sorgusunu yazdım ve etkinlik geçmişini listeyen sayfayı oluşturdum. Aktif olan etkinliğin gösterilmesi için yazdığım linq sorgusunu eksik yazdığım için hata aldım ve baya uğraştıktan sonra hatamı görüp düzelttim. Ayrıca etkinlik ekleme, silme, güncelleme işleri yapan sayfaları oluşturdum. Daha önce yapılmış yardımların görüntüsünü temsil eden bir kaç resim ekledim.




Daily Meeting 1

   İlk olarak yapılacak projeye karar verip gereksinimleri analiz ettim. Projemi geliştirmek için scrum ve takım çalışmasının takibi için TFS kullandım. Visual Studio online da projeyi oluşturup backlogları girdim. Daha sonra backlogları splitlere bölerek bu splitleri de görev olarak atadım. Visual Studio dan TFSye bağlanark kendime atadığım önceliği yüksek olan ilk görevi seçtim. Proje için Asp.Net ile Mvc template i kullanmayı tercih ettim. Bu nedenle belirlediğim ilk görevim projenin veritabanı için tabloları oluşturup Asp'den veritabanına bağlanarak modeli oluşturmaktı. Bunu gerçekleştirirken bir sıkıntı yaşamadım. Böylece projenin Modelini oluşturmuş oldum.








29 Kasım 2015 Pazar

   Yazılım Mühendisliği


   Yazılım, herhangi bir boyuttaki herhangi bir tür donanımda çalışan bilgisayar programını ve elektronik ortamdaki her tür dökümanı içeren ürünlerdir. Yazılım mühendisliği ise karmaşık yazılım sistemlerinin belirli bir hedefe ve sisteme dayalı olarak iş bölümü yapılarak, belirli prensipler, yöntemler, araçlar kullanılarak geliştirilmesidir. Yazılım mühendisleri oluşturulacak yazılım ürünü ile ilgili müşteri ilişkilerini kurar, müşterilerden aldığı bilgiler doğrultusunda analiz yapar, tasarım yapar, program için gerekli kodları yazar, programı test eder ve yazılımı sorunsuz şekilde çalışır hale getirir. Bununla birlikte oluşturulmuş olan yazılımların bakımından da sorumludur. 

   Yazılım Mühendisliği Süreçleri

    Yazılım geliştirme, sadece kod yazarak ortaya bir yazılım ürünü çıkarmak değildir. Bu sadece yazılım geliştirme sürecinin bir bölümüdür. Yazılım geliştirme, yazılımın hem üretim hemde kullanım süreci boyunca geçirdiği tüm aşamalardır. Yazılım geliştirmede çok sayıda süreç ve model bulunur. Bu süreç modelleri ile projenin karmaşıklığı azaltılarak karışıklığı önlenmiş olur.

Yazılım geliştirme süreçlerinin ana katmanları :

Analiz : Problemin tanımlanması ve anlaşılması, problemin çözümü olan yazılımın nasıl yapılacağı, ne yapacağının belirlendiği aşamadır. Problemin doğru bir şekilde tanımlanması çok önemlidir. 

Tasarım : Analiz aşaması sonucunda belirlenen gereksinimlere yanıt verecek yazılımın temel yapısının oluşturulduğu aşamadır. Tasarım aşaması ile yazılımın hem kullanıcı arayüzü hemde programın omurgası oluşturulmuş olur. 

Kodlama : Eldeki tasarım doğrultusunda yazılımın gerçekleştirilmesi aşamasıdır. Yazılım geliştirme ortamının, programlama dilinin, veritabanı yönetim sisteminin yazılım geliştirme araçlarının seçimi bu aşamada gerçekleştirilir.

Test : Kodlama sürecinin ardından elde edilen yazılımın beklentileri sağlayıp sağlamadığını kontrol etmek için gerçekleştirilen sınama ve doğrulama aşamasıdır. Hata ayıklamada kolaylık sağlaması için erkenden ve sık sık test edilmelidir.

Bakım : Üretilen yazılımın tesliminden sonra da oluşan hataları giderme ve yeni özellikler ekleme aşamasıdır. Yazılımın kullanılmaya başladığından itibaren geçerli süreçtir.

   Klasik Yöntem ve Trendler

Waterfall Model :  Şelale modeli olarak da bilinir. Bu modelde bulunduğun aşama bitmeden önce bir sonraki aşamaya başlanamaz ve her aşamanın sonunda döküman oluşturulup projeye devam edilip edilmeyeceği yorumlanır. Küçük çaplı, kolay, sorunların net bir şekilde ortaya konulduğu projelerde kullanılabilir. Esnek bir yapısı olmadığı için müşteri ihtiyacına göre sonradan ekleme, çıkarma yapılacak büyük çaplı projelerde safhaların en baştan uygulanması gerektiğinden bununda maliyeti arttırmasından dolayı böyle projelerde tercih edilmemelidir.

V Model : Verification and validation model waterfall'daki gibi sistem gereksinimleri belirlenmelidir. Waterfalldan farklı olarak test planı yazılım geliştirmeye başlamadan oluşturulur. Bu modelin kullanılabilmesi için müşterinin ne istediği net olarak bilinmelidir. gereksinimleri belli olan küçük büyük bütün projelerde kullanılabilir.

Incremental Model : Sistem her bir işlevi yerine getiren incrementlerden oluşur. Müşteri gereksinimleri önceliklendirilerek yüksek öncelikli olanlar ilk olarak gerçekleştirilir. böylece ana sürüm elde edilir. Daha sonra diğer önceliklerde bu sürüme fonksiyon olarak eklenir. Bu süreç bütün incrementler eklenene kadar devam eder.

RAD (Rapid Application Development) Model : Hızlı uygulama geliştirme modelidir. 4 aşamadan oluşur: ihtiyaçların planlanması, kullanıcı destekli tasarım, yapılandırma, uygumaya geçiş. 


  AGILE DEVELOPMENT :

   Agile (çevik) dünya üzerinde kabul edilen yöntemler arasında en hızlı ve güvenli proje geliştirme yaklaşımıdır. Çok kapsamlı olmayan ve belirsizliğin çok fazla olduğu projeler için çok kullanışlı bir yöntemdir. Waterfall modelinin aksine proje başlangıcında detaylı tanımlama yapılmadığından müşterinin proje ekibiyle bir arada  çalışmaya istekli olması önemlidir. Tanımlama, tasarım ve gerçekleme süreçleri eş zamanlıdır. 

Agile Prensibleri  :
  • Bireyler ve arasındaki etkileşim, kullanılan süreç ve araçlardan daha önemlidir.
  • Portatip ürün, anlaşılır dökümantasyondan daha önemlidir.
  • Müşteri ile ilişki, müşteri sözleşmesinde yazanlardan daha önemlidir.
  • Değişime dapte olmak, yapılan plana ne olursa olsun bağlı olmaktan daha önemlidir.
  • Projeleri aşamalı olarak geliştirmeyi öngörür.
  • Amacı çok kısa döngülerle sık çıktılar üretmektir.
  • Kalite tarifi müşterinin üründen beklentileri karşılamasıdır.
  • Risk iterasyonlardan ve maksimum etkileşimden dolayı minimumdur.
Farklı Agile Frameworkler :
  • Scrum
  • Extreme Programing
  • Lean Software Development
  • Feature Driven Development
  • Dynamic Systems Development Method

SCRUM

Bir Agile frameworküdür. Adını Rugby isimli oyundan alır. Rugby gibi takım toplanır, planlama oyunu oynar ve görevler dağılarak herkes tek bir hedef için çalışır. 3 temel kavram vardır: Roller (Roles), Toplantılar (Meetings), Kavramlar/Araçlar (Artifacts).
1-Roller : 
-Ürün Sahibi (Product Owner) : Ekibin bir parçasıdır, detayları takip eder, geri dönüşler verir.
-Scrum Yöneticisi (Scrum Master) : Takımın Scrumun temel değerlerine ve kurallarına bağlı kalmasını garanti altına alır. Takımın kendi işine yoğunlaşmasını sağlayarak üretkenliğin artmasından sorumludur.
-Takım (Team) : Devamlı iletişim halinde olan ve tek bir hedefe ulaşmak için mücadele eden kişilerden oluşur. Kendi kendilerini organie ederler. Çalışma sonuçlarını belli aralıklar ile ürün sahibine gösterirler. Takım üyeleri; geliştiriciler, testçiler, analistler, tasarımcılardan oluşabilir.
2-Toplantılar (Meetings) :
-Sprint Planlama (Sprint Planinng) : Geniş kapsamlı gereksinim listesinin çıkarılması, gözden geçime olası gereksinim değişikliklerinin belirlenmesi, geliştirme araçları ve altyapısının onaylanması.
-Günlük Scrum Toplantısı (Daily Meeting) : Bu kısa toplantı her iş gününde belirlenen saatte gerçekleştirilir ve tüm takım katılır. Takımın ilerleyişini ve karşılaştıkları engelleri görmek için önemli bir fırsattır. ekipteki üyeler dün ne yaptım? bugün ne yapacağım? karşılaştığım sorunlar neler? şeklindeki soruları cevaplar.
3-Kavramlar/Araçlar (Artifacts) : 
-Product Backlog : Öncelikli sıralarına göre listelenmiş ürün gereksinim ve fonksiyonlarının bulunduğu bir liste kaydıdır.
-Sprint Backlog : Bir sprint boyunca geliştirilmesi gereken gereksinim ve fonksiyonların bir liste kaydıdır. 
-Sprint Kalan Zaman Grafiği (Burndown Chart) : Bu grafik, sprint boyunca işlerin ne kadar yapıldığı ile ne kadar yapılması gerektiğinin karşılaştırıldığı grafiktir.

Sosyal Yardımlaşma Projesi 

    Sosyal yardımlaşma projesi  yardıma ihtiyacı olan insanlara ulaşabilmek ve onlara kıyafet yardımında bulunmayı amaçlayan bir web uygulamasıdır. Bu projede geliştirilen uygulama sayesinde insanların yardım yapılabilmesi için düzenlenen etkinliklerden haberdar olmaları ve istedikleri etkinliğe katılarak yardımda bulunabilmeleri amaçlanmıştır.
   Projedeki roller sayfayı ziyaret eden kayıtsız kullanıcılar, üyeler ve yöneticilerdir. 
   Ziyaretçiler, sadece yardım yapılan kurumların hangileri olduğunu düzenlenen yardım etkinliklerini görebilir. Fakat düzenlenen etkinliklere katılıp yardımda bulunamaz. 
   Üyeler, yardım yapılan kurumları, düzenlenen etkinlikleri görebilir ve bu etkinliklere katılarak yardımda bulunabilir. 
   Yöneticiler, yardım yapılacak kurumları belirleyip bu kurumlar için yardım etkinliği düzenler. Etkinliğe katılan üyeleri ve bu üyelerin bağışta bulundukları ürünleri görebilir ve yapılan bu bağışların yeterliliğine göre etkinlikleri sonlandırabilir. 

Sosyal Yardımlaşma Projesi Backlog'ları :

  • Ben kayıtsız bir kullanıcı olarak sistemdeki etkinlikleri görebileyim ki gerçekleştirilen etkinlikler hakkında fikir sahibi olabileyim.
  • Ben bir üye olarak sisteme kayıt olabileyim ki sistemdeki gerçekleştirilen etkinlikleri görebileyim ve o etkinliğe katılabileyim.
  • Ben bir üye olarak etkinliğe katılabileyim ki bağış yapabileyim.
  • Ben bir üye olarak bilgilerime erişebileyim ki onları güncelleyebileyim.
  • Ben bir yönetici olarak bir etkinlik düzenleyebileyim ki üyeler etkinliklere katılabilsin.
  • Ben bir yönetici olarak yapılacak yardım etkinliğine katılanları görebileyim ki toplanacak yardım hakkında fikir sahibi olabileyim.
  • Ben bir yönetici olarak etkinliğe katılanların yaptıkları bağışları görebileyim ki yeterli seviyeye ulaştığında etkinliği sonlandırabileyim.
  • Ben bir yönetici olarak yapılan yardımlar yerine ulaştığında etkinliğe katılanlara bildiri/e_mail gönderebileyim ki etkinliğe katılanları yapılan yarıdmın yerine ulaştığına dair haberdar edebileyim.