• Buradasın

    Yazılım Geliştirme Yöntemleri: Çevik ve Plan Odaklı Yaklaşımlar

    youtube.com/watch?v=kFjn6j245Pg

    Yapay zekadan makale özeti

    • Bu video, bir yazılım mühendisliği dersinin kaydıdır. Eğitmen, yazılım geliştirme yöntemleri hakkında kapsamlı bilgiler sunmaktadır.
    • Video, çevik (agile) yazılım geliştirme yöntemlerini ve plan odaklı geliştirme yaklaşımlarını karşılaştırmalı olarak ele almaktadır. İçerikte çevik geliştirme prensipleri, ekstrem programlama (XP) yöntemi, Scrum modeli ve gereksinim analizi teknikleri detaylı şekilde anlatılmaktadır. Ayrıca, hangi durumlarda çevik, hangi durumlarda plan odaklı yaklaşımın tercih edilmesi gerektiği konusunda kriterler sunulmaktadır.
    • Ders, yazılım geliştirme sürecinde müşteri katılımı, sürekli sürüm geliştirme, test odaklı yaklaşım ve sürdürülebilir hız gibi temel prensipleri vurgulamaktadır. Ekstrem programlama metodolojisinin temel ilkeleri (önceden test geliştirme, çift programlama, sürekli yeniden düzenleme) ve Scrum yönteminin üç aşaması (taslak planlama, sprint döngüsü ve proje kapanış) detaylı olarak açıklanmaktadır.
    00:01Yazılım Mühendisliği Dersi ve Çevik Yazılım Geliştirme
    • Yazılım mühendisliği dersinin üçüncü konusu çevik yazılım geliştirme olup, orijinal kaynak İngilizce'den Türkçe'ye çevrilmiştir.
    • Ders kapsamında çevik yöntemler, plan odaklı ve çevik geliştirme, ekstrem programlama, çevik proje yönetimi ve çevik yöntemleri ölçeklendirme konuları işlenecektir.
    • Günümüzde hızlı yazılım geliştirilmesi, yazılım sistemleri için en önemli gereksinim haline gelmiştir.
    00:52Çevik Yazılım Geliştirme Gerekliliği
    • İşletmeler hızla değişen gereksinimlerle çalışır ve tüm gereksinimleri karşılayacak bir şekilde planlar yaparak yazılım üretmek pratikte imkansızdır.
    • Yazılım, değişen iş ihtiyaçlarını karşı yansıtacak şekilde hızla gelişmelidir ve ek gerekirse hızlıca yapılabilmelidir.
    • Hızlı yazılım geliştirme, şartname, tasarım ve uygulama birbiriyle ilişkilidir ve sistem sürüm değerlendirmesine dahil olan paydaşlarla bir dizi sürüm olarak geliştirilmiştir.
    02:45Çevik Yöntemlerin Özellikleri
    • Çevik yöntemler, 1980'ler ve 1990'ların yazılım tasarım yöntemlerinde yer alan genel giderlerden (overhead) memnuniyetsizlik duymaktadır.
    • Çevik yöntemin amacı, tasarım yerine koda odaklanmak ve yazılımı hızlı bir şekilde sunup, değişen gereksinimleri karşılayacak şekilde hızla geliştirmektir.
    • Çevik yazılım geliştirme, sürekli güncellenmesi gereken hızlı bir yazılım için idealdir, ancak uzay araçları veya sağlık/güvenlik yazılımları gibi ciddi plan ve güvenlilik gerektiren projelerde uygulanmaz.
    04:34Çevik Yöntemlerin Amacı ve Manifestosu
    • Çevik yöntemlerin amacı yazılım sürecindeki genel giderleri azaltmak, dökümantasyonu sınırlandırmak ve aşırı yeniden çalışma yapmadan değişen gereksinimlere hızlı yanıt vermektir.
    • Çevik yazılım geliştirme manifestosu, süreçler ve araçlardan ziyade bireyler ve etkileşimlere odaklanır.
    • Manifestoda kapsamlı dokümantasyon yerine çalışan yazılım, sözleşme müzakeresi yerine müşteri işbirliği ve bir planı takip etmek yerine değişime yanıt vermek vurgulanmaktadır.
    06:33Çevik Yöntemlerin Prensipleri
    • Müşteri katılımı prensibi, müşterinin geliştirme süreci boyunca yakından ilgilendiği, gereksinimleri belirlediği ve sistem yinelemelerini değerlendirdiği anlamına gelir.
    • Artılı teslimat prensibi, yazılımın her bir artıma dahil edilecek gereksinimleri belirleyen müşteriyle aşamalı olarak geliştirilmesini gerektirir.
    • Süreç yapmayan insanlar prensibi, geliştirme ekibinin becerilerinin tanınması ve kullanılması, kuralcı süreçler olmadan kendi çalışma yöntemlerini geliştirmelerine bırakılması anlamına gelir.
    • Değişikliği benimse prensibi, sistem gereksinimlerinin değişmesini bekleyip bu değişiklikleri karşılayacak şekilde tasarlamayı gerektirir.
    • Basitliği koru prensibi, hem geliştirmekte olan yazılımda hem de geliştirme sürecinde basitliğe odaklanmayı gerektirir.
    09:09Özel Sistem Geliştirme İçin Gerekli Koşullar
    • Özel sistem geliştirme için müşteriye katılım taahhüdü ve yazılımı etkileyen dış kural ve düzenlemenin olmaması gerekiyor.
    • Müşterinin işbirliği yapacağını taahhüt etmesi önemli.
    • Küçük, sıkı entegre ekipler odaklanan çevik yöntemler, büyük sistemlerde ölçeklendirilirken sorunlara yol açabilir.
    10:40Çevik Yöntemlerle Geliştirme Sorunları
    • Sürece dahil olan müşterilerin ilgisini uzun süreçlerde korumak zor olabilir.
    • Ekip üyeleri çevik yöntemleri gerektiren yoğun katılım için uygun olmayabilir.
    • Birden fazla paydaş olduğu yerlerde değişikliklere öncelik vermek zor olabilir.
    • Yazılımı sade tutmak için sürekli düzenleme yapmak ekstra çalışma gerektirir.
    • Sözleşmeler ve yazılım geliştirmeye yönelik diğer yaklaşımlarda sorun olabilir.
    12:19Çevik Yöntemler ve Yazılım Bakımı
    • Çoğu kuruluş yeni yazılım geliştirmeye harcadıklarından daha fazlasını mevcut yazılımları korumak için harcamaktadır.
    • Çevik yöntemler başarılı olacaksa orijinal geliştirmenin yanı sıra bakımı da desteklemeleri gerekir.
    • Çevik yöntemlerle geliştirilen yazılımlar orijinal geliştirme ekibine çok bağımlıdır, bu ekibin bakımı yapmazsa yeni gelen kişiler dokümantasyonun azlığı nedeniyle sıkıntı yaşayabilir.
    14:20Plan Odaklı ve Çevik Geliştirme Karşılaştırması
    • Plan odaklı yaklaşım, önceden planlanan aşamaların her birinde üretilecek çıktılarla ayrı geliştirme aşamalarına dayanır.
    • Çevik geliştirme ise özellik çıkarma, tasarım, uygulama ve testler birbiri ardına bırakılır ve geliştirme sürecinde elde edilen çıktılara müzakere sürecinde karar verilir.
    • Plan odaklı geliştirme kendi kendine yenilemeli bir süreçken, çevik geliştirme sürekli olarak gereksinim belirlenip, tasarlanıp, geliştirilir.
    17:53Plan Odaklı ve Çevik Geliştirme Seçimi
    • Uygulamaya geçmeden önce çok detaylı bir şartname ve tasarıma sahip olmak önemliyse plan odaklı yaklaşım kullanılmalıdır.
    • Yazılım müşterilere aşamalı teslimat adresi gerçekse çevik yöntem kullanılabilir.
    • Geliştirilmekte olan sistem ne kadar büyük ise, çevik yöntemler küçük ekiplerde etkilidir, büyük sistemler için planlı bir yaklaşım kullanılması gerekir.
    20:02Çevik Yöntemlerin Uygulanması İçin Değerlendirme
    • Karmaşık zamanlama gereksinimleri olan gerçek zamanlı sistemler (örneğin roket uçuşu) için plan odaklı yaklaşımlar gerekli olabilir.
    • Uzun ömürlü sistemler (örneğin Mars'a gönderilen araçlar) için daha fazla tasarım dökümantasyonu gerektirebilir.
    • Çevik yöntemler, gelişen bir tasarım takip etmek için uygun araçlara ve geliştirme ekibinin organize edilmesine ihtiyaç duyar.
    21:45Çevik Yöntemlerin Etkileyicileri
    • Geleneksel mühendislik organizasyonları genellikle planlı tabanlı bir geliştirme kültürüne sahiptir.
    • Çevik geliştirme yöntemleri, programcının ayrıntılı bir tasarımı dönüştürdüğü plan tabanlı yaklaşımlardan daha yüksek beceri seviyeleri gerektirebilir.
    • Sistem harici düzenlemeye tabiysa (örneğin FAA veya BTK onayları gerektiren sistemler), ayrıntılı belgeler üretmek gerekir.
    24:03Ekstrem Programlama
    • Ekstrem Programlama (XP), yinelemeli geliştirmeye ekstrem bir yaklaşım getirir ve yeni sürümler günde birkaç kez oluşturulabilir.
    • Ürün sürümleri her iki haftada bir müşterilere teslim edilir ve tüm testler her derleme için çalıştırılmalıdır.
    • XP'de artımlı geliştirme, müşteri katılımı, ikili programlama, kolektif mülkiyet ve uzun çalışma saatlerinden kaçınan bir süreç vardır.
    28:21Ekstrem Programlama Süreci
    • Ekstrem programlama sürüm döngüsü: kullanıcı hikayelerini seçme, hikayeleri görevlere bölme, sürümü planlama, geliştirme, entegrasyon, test ve yayınla.
    • Artımlı planlama, gereksinimlerin hikaye kartlarına kaydedilmesi ve sürüme dahil edilecek hikayelerin belirlenmesi içerir.
    • Küçük sürümler, işyeri sağlayan minimal işlevsellik seti geliştirilir ve sistemin sürümleri sıktır ve ilk sürümü aşama olarak işlevsellik ekler.
    32:44Otomatik Birim Testi ve Ekstrem Programlama
    • Otomatik bir birim testi, framework veya kütüphane olarak adlandırılabilir ve işlevsellik testi için kullanılır.
    • Test framework'ı sayesinde yazılım geliştirme sürecinde, testi başarıyla geçecek şekilde yazılım yazılır ve minimal, basit bir şekilde sadece testi geçecek araçlar geliştirilir.
    • Ekstrem programlama, kodu sürekli yeniden düzenlemeyi ve geliştiricilerin çiftler halinde çalışmasını vurgular.
    35:35Ekstrem Programlama Yöntemleri
    • Ekstrem programlama (XP) yönteminde, geliştiriciler tüm kodun sorumluluğunu alır ve herkes kodu biliyor, düzenleme yapabiliyor ve katkı sağlayabiliyor.
    • Büyük yazılımlarda ise genellikle geliştiriciler sadece kendilerine verilen kısmı görebilir, değiştirebilir ve düzeltebilir.
    • Sürekli entegrasyon, bir görev üzerindeki çalışma tamamlanmaz tamamlanana kadar tüm sisteme entegre edilir ve sistemdeki tüm birim testleri geçmelidir.
    36:52Ekstrem Programlama Pratikleri
    • Ekstrem programlamada büyük miktarlarda fazla mesai kabul edilmez çünkü yorucu olabilir, kaliteyi düşürebilir ve hata yapma ihtimalini artırabilir.
    • Müşteri (sistemin son kullanıcısı) bir temsilcisi, ekstrem programlama ekibinin tam zamanlı hazır bulunması gerekir.
    • Ekstrem programlama sürecinde müşteri geliştirme ekibinin bir üyesidir ve uygulama içinde sistem gereksinimlerini getirmekten sorumludur.
    38:11Gereksinim Senaryoları ve Kullanıcı Hikayeleri
    • Gereksinimler senaryo veya kullanıcı hikayeleri olarak ifade edilir ve kartlara yazılır.
    • Geliştirme ekibi bu hikayeleri uygulama görevlerine böler ve bu görevler zamanlama ve maliyet tahminlerinin temelidir.
    • Müşteri önceliklerine ve program tahminlerine göre sonraki sürümde hangi hikayelerin yer alacağına karar verir.
    39:35Reçeteli İlaç Hikayesi Örneği
    • Bir reçeteli ilaç hikayesinde, kliniğe giden hasta ve ilaç yazmak isteyen doktorun senaryosu detaylıca anlatılır.
    • Doktor, mevcut ilacı, yeni ilacı veya formülleri seçebilir; seçilen ilacı girer, dozu belirler ve reçeteyi onaylar.
    • Sistem, dozun onaylanmış aralıklarda olup olmadığını kontrol eder ve gerekirse doktora uyarı verir.
    42:58Görev Kartları
    • Geliştirme sürecinde görev kartları oluşturulur; örneğin "Reçetelenen ilacın dozunu değiştir" gibi görevler belirlenir.
    • Görev kartları yazılan hikayeye göre oluşturulur ve final projesinde de benzer görev kartları oluşturulması istenir.
    43:47İlaç Doz Kontrol Sistemi
    • Sistem, tehlikeli bir doz aralığında ilacın yazılıp yazılmadığını kontrol ediyor.
    • Her ilacın bir jenerik formülü var ve bu formül veritabanında kayıtlı olarak maksimum ve minimum doz bilgilerini içeriyor.
    • Doz belirtilen aralıkta değilse hata mesajı gösterilir, aralıkta ise onaylama tuşu aktif edilir.
    45:04Geleneksel ve Ekstrem Programlama Yaklaşımları
    • Geleneksel yazılım geliştirme, ileride maliyetleri düşürecek değişiklikleri önceden tahmin etmek için zaman ve çaba harcamayı savunur.
    • Ekstrem programlama (XP), değişikliklerin güvenilir bir şekilde öngörülemediği için bu yaklaşımın faydalı olmadığını savunur.
    • XP, sürekli kod iyileştirme ve yeniden düzenleme (refactoring) önerir, böylece yazılımın anlaşılırlığını artırır ve dokümantasyon ihtiyacını azaltır.
    47:53Yeniden Düzenleme (Refactoring)
    • Yenilenen kodu kaldırmak için sınıf hiyerarşisinin yeniden düzenlenmesi, kalıtım anlamlarını kolaylaştırmak için öz nitelikleri ve yöntemleri toparlamak önemlidir.
    • Metot, sınıf ve değişken isimlerinin anlaşılır olması kodun daha kolay anlaşılmasını sağlar.
    • Satır içi kodun program kitaplığına dahil edilmiş yöntemlerle değiştirilmesi, kod tekrarını önler ve kodun yeniden kullanılabilirliğini artırır.
    49:42Çevik Yöntemler ve Ekstrem Programlama
    • Çevik yöntemler, hızlı geliştirme, sık sürümler, işlem giderlerini azaltma ve yüksek kaliteli kod üretme odaklı geliştirme yöntemleridir.
    • Geliştirme için çevik veya plan odaklı bir yaklaşım kullanıp kullanmama kararı, yazılım türüne, geliştirme ekibinin yeteneklerine ve şirket kültürüne bağlıdır.
    • Ekstrem programlama, sık sürümler, sürekli yazılım iyileştirilmesi ve müşteri katılımı gibi iyi programlama uygulamalarını entegre eden bir çevik yöntemdir.
    50:34Ekstrem Programlama'da Test
    • Ekstrem programlama (XP), test merkezli bir yaklaşım geliştirmiştir ve her değişiklik yapıldıktan sonra program test edilir.
    • XP'de önce test geliştirilir, sonra program yazılır; bu da gereksinimleri daha net hale getirir.
    • Testler otomatik olarak yürütülebilmeleri için program olarak yazılır ve genellikle JUnit gibi bir test çerçevesinde dayanır.
    53:06Müşteri Katılımı ve Test Süreci
    • Müşteri, test sürecinde sistemin bir sonraki sürümünde uygulanacak hikayeler için kabul testleri geliştirmeye yardımcı olur.
    • Müşteri, geliştirme ilerledikçe test senaryoları yazarak programın müşterinin ihtiyaç duyduğu şey olduğundan emin olur.
    • Müşteri rolünü benimseyen kişilerin sınırlı zamanı vardır ve bu nedenle test sürecine eksiksiz dahil olamayabilirler.
    54:07Yazılım Mühendisliğinin Özellikleri
    • Her yazılım geliştirme yöntemi avantajları ve dezavantajları vardır.
    • Yazılım mühendisi, geliştirilecek sisteme uygun yöntemleri, metotları ve metodolojileri belirleyebilmek ve uygulayabilmektir, sadece kod yazmak değildir.
    • Yazılım mühendisi, yazılım geliştirme alanının tüm yönleriyle ilgilidir ve test senaryoları gibi detaylara da dikkat eder.
    54:47Test Senaryoları Örneği
    • Test senaryosunda ilacın bir dozunun miligram cinsinden miktarı ve günde kaç doz kullanılacağı gibi girdiler kontrol edilir.
    • Test senaryosunda dört farklı durum test edilir: dozun frekansının çok yüksek olması, tek dozun çok yüksek veya düşük olması, doz ve frekansın çarpımının çok büyük veya düşük olması.
    • İlk üç durumda hata mesajı, dördüncü durumda ise "okey" mesajı verilmelidir.
    57:47Test Otomasyonu
    • Test otomasyonu, testlerin görev uygulanmadan önce yürütülebilir bileşenler olarak yazılmasıdır.
    • Otomatikleştirilmiş bir test çerçevesi, yürütülebilir testler yazmayı ve yürütme için bir dizi test göndermeyi kolaylaştırır.
    • Test otomasyonu sayesinde sistemde herhangi bir işlevsellik eklendiğinde testler çalıştırılabilir ve yeni kodun ortaya çıkardığı sorunlar anında yakalanabilir.
    59:08Ekstrem Programlamanın Test Zorlukları
    • Programcılar programlamayı testi tercih ederler ve bazen test yazarken kestirme yolları kullanırlar, bu da eksik testler yazmalarına yol açabilir.
    • Karmaşık kullanıcı arayüzlerinde, ekranlar arasında görüntüleme mantığını ve iş akışını uygulayan kod için birim testleri yazmak zordur.
    • Bir dizi testin eksiksiz olup olmadığına karar vermek zordur ve iyi bir planlama yapılmadığı için test seti tam kapsam sağlamayabilir.
    1:00:25Çift Programlama
    • Ekstrem programlamada programcılar kod geliştirmek için birlikte oturarak çiftler halinde çalışırlar.
    • Çift programlama, ortak kod sahipliği geliştirmeye ve bilgiyi ekibe yaymaya yardımcı olur.
    • Ölçümler, eşli programlama ile geliştirme üretkenliğinin bağımsız çalışan iki kişininkine benzer olduğunu göstermektedir, ancak ekstra güvenlikle beraber var.
    1:01:19Çift Programmanın Avantajları
    • Çift programlamada bilgilerin paylaşımı, ekip üyeleri ayrıldığında bir projeye yönelik genel riskleri azaltır.
    • Çift programı mutlaka verimsiz değildir ve birlikte çalışan bir çiftin ayrı çalışan iki programcıdan daha verimli olduğuna dair kanıtlar vardır.
    • Çift programının avantajları, sistem için kolektif mülkiyet ve sorumluluk fikrini desteklemesidir, böylece tek bir kişi sorumlu tutulamaz.
    1:02:49Çevik Proje Yönetimi
    • Yazılım proje yöneticilerinin temel sorumluluğu, yazılımı zamanında ve planlanan bütçe dahilinde teslim etmektir.
    • Çevik proje yönetimi, artan gelişime ve çevik yöntemleri belirli güçlü yönlerine uyarlanmış farklı bir yaklaşım gerektirir.
    • Scrum yaklaşımı, gözlemci, geliştirme ve tekrara dayalı bir yazılım geliştirme yöntemidir.
    1:03:54Scrum Süreci
    • Scrum'da ilk aşama, proje için genel hedeflerin belirlenmesi ve yazılım mimarisinin tasarlanmasıdır.
    • Scrum süreci, bir dizi sprint döngüsü izler ve her döngü sistemin bir artışını gerçekleştirir.
    • Sprint döngüsünde değerlendirme, seçme, geliştirme, gözden geçirme ve test etme aşamaları bulunur.
    1:05:39Scrum Yöntemi
    • Sprint, sabit uzunluktadır ve normalde 2-4 hafta sürer; ekstrem programlamada bir sürü geliştirme scrum modelinde bir sprinte denk gelir.
    • Planlama için başlangıç noktası ürün birikimidir ve seçim aşamasında sprint sırasında geliştirilecek özellikleri müşteriyle birlikte çalışan ekip seçer.
    • Sprint sırasında ekip müşteriden ve organizasyondan izole edilir, tüm iletişimler scrum ustası aracılığıyla gerçekleştirilir ve sprint sonunda yapılan iş gözden geçirilir.
    1:07:17Scrum'da Takım Çalışması
    • Scrum ustası, günlük toplantıları düzenleyen, iletişimleri sağlayan ve ekip dışındaki müşterilerle iletişim kuran bir kolaylaştırıcıdır.
    • Tüm ekip üyeleri günlük toplantılara katılır, ilerlemeleri ve sorunları paylaşır, böylece herkes neler olup bittiğini bilir ve sorunlar ortaya çıktığında kısa vadeli çalışmalar yeniden planlanabilir.
    • Scrum'ın avantajları arasında ürünün yönetilebilir parçalara bölünmesi, kararsız gereksinimlerin ilerlemeyi engellememesi ve ekip iletişiminin geliştirilmesi bulunmaktadır.
    1:08:31Çevik Yöntemleri Ölçeklendirme
    • Çevik yöntemler küçük ve orta ölçekli projeler için başarılıdır, ancak büyük projelerle başa çıkmak için değiştirilmesi gerekir.
    • Büyük sistemler genellikle ayrı ekiplerin geliştirdiği sistemlerin koleksiyonlarıdır ve kahverengi alan sistemlerdir.
    • Büyük sistemlerin amacı esneklik ve aşamalı geliştirme değil, sistemlerin küçük parçalarının ayrı ayrı geliştirip birleştirilmesidir.
    1:11:00Büyük Sistem Geliştirme Zorlukları
    • Büyük sistemler uzun tedarik ve geliştirme süresine sahiptir, bu nedenle uyumlu ekipler oluşturmak zordur.
    • Büyük sistemler genelde çeşitli paydaşlara sahiptir ve tüm paydaşları geliştirme sürecine dahil etmek imkansızdır.
    • Çevik yöntemleri ölçeklendirirken çevik temelleri korumak önemlidir: esnek planlama, sık sistem gösterimleri, sürekli entegrasyon, test gelişimi ve iyi iletişimi korumak gerekir.
    1:12:04Büyük Sistem Geliştirmede Zorluklar
    • Büyük sistem geliştirmede sadece kod odaklanmak mümkün değildir, daha fazla ön tasarım ve sistem dokümantasyonu gereklidir.
    • Ekipler arası iletişim mekanizması tasarlanmalı ve düzenli toplantılar düzenlenmelidir.
    • Çevik yöntemler, ekip üyelerinin yüksek beceriye sahip olduğunda en iyi şekilde çalışır, ancak büyük kuruluşlarda kültürel direnç olabilir.
    1:13:23Bölümün Anahtar Noktaları
    • Ekstrem programlamanın belirli bir gücü, bir program özelliği oluşturmadan önce otomatik testlerin geliştirilmesidir.
    • Scrum yöntemi, bir proje yönetimi çerçevesi sağlayan çevik bir yöntemdir ve sistem artışı geliştirildiğinde sabit zaman periyotları olan sprint etrafında odanır.
    • Büyük sistemler için çevik yöntemleri ölçeklendirmek zordur ve büyük sistemler ön tasarım ve bazı belgelere ihtiyaç duyar.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor