• Buradasın

    Yazılım Kalitesi ve DevOps Pipeline Eğitimi

    youtube.com/watch?v=J-NMLQ8La20

    Yapay zekadan makale özeti

    • Bu video, Sabit Teknolojiler şirketinin kurucusu ve CEO'su tarafından sunulan kapsamlı bir eğitim içeriğidir. Konuşmacı, yaklaşık 130 kişilik bir şirketin lideri olarak test, kalite ve DevOps alanlarında uzmanlık sahibidir.
    • Video, yazılım kalitesi ve DevOps pipeline'ı konusunu kapsamlı bir şekilde ele almaktadır. İçerikte kalite sürecinin DevOps'a nasıl uygulanacağı, pipeline adımları (kod kontrolü, derleme, paketleme, testler, kod kalitesi denetimi), test türleri (unit test, integration test, functional test), kod kalitesi metrikleri ve teknik borç yönetimi gibi konular detaylı olarak anlatılmaktadır.
    • Eğitimde ayrıca test otomasyonu, CI/CD pipeline'ları, quality gate'ler, kod inceleme süreçleri, test yaşam döngüsü ve test ortamlarında sistem izolasyonu gibi pratik konular da ele alınmaktadır. Video boyunca çeşitli araçlar (Sonar, Kobertura, Wiremock, Lodyum, APM araçları) ve teknikler (constructor injection, logger kullanımı, servis sanallaştırma) hakkında bilgiler verilmekte ve kalite hedeflerinin nasıl belirleneceği açıklanmaktadır.
    00:07Sunum ve Şirket Tanıtımı
    • Konuşmacı, ev kalite sürecinin DevOps'a nasıl uygulanacağını anlatacağını belirtiyor.
    • Sağ Bilgi Teknolojileri Ofisi, test merkezi ve AR-GE merkezi olarak nitelendirilen, yaklaşık 130 kişilik bir şirkettir.
    • Şirketin Testinyum, Lodyum ve Sbox gibi test ürünleri bulunmakta ve San Francisco'da bir ofis açarak global pazarda yer almayı hedeflemektedir.
    01:47Konuşmacının Deneyimi
    • Konuşmacı 2009 yılında Sabit Teknolojilerin kurucusu olmuş ve 2013 yılında test otomasyon konularına girerek bir TÜBİTAK TEYP projesi haline getirmiştir.
    • Şirketin idealinde, testten farklı olarak kalite sürecinin uygulamanın yazılmasından itibaren başlaması ve kalite denetimiyle devam etmesidir.
    • Kalite denetimi sadece test etmekle kalmaz, uygulamanın kaliteli geliştirilmesi ve yaşatılmasıyla da ilgilidir.
    02:44Kalite ve Test Anlayışı
    • Kalite, testten farklı olarak uygulamanın kalite denetimiyle başlar ve geliştirme aşamasında da sorumluluk alır.
    • Uygulama kaliteli geliştirilmezse, test aşamasında bile sorunlar yaşanacaktır.
    • Kalite denetiminde kullanılan metrikler arasında kod tekrar oranı, kod karmaşıklığı, hata oranları ve birim test kapsamı bulunmaktadır.
    04:15Quality Assurance Pipeline
    • Konuşmacı, Cenks üzerinde basit bir pipeline oluşturmuş ve bu pipeline'ın adımlarını açıklamaktadır.
    • Pipeline, uygulamanın kontrol edilmesi, derlenmesi, paketlenmesi, birim testlerin çalıştırılması ve kod kalitesi denetimi gibi adımlardan oluşmaktadır.
    • DevOps süreçlerinde QA pipeline'ında branch işlemleri gibi ek adımların da olması gerekebilir.
    06:41Kod Kalitesi Önemi
    • Bir kodun kalitesini belirleyen metrikler arasında birim test kapsamı bulunmaktadır.
    • Kaliteli olmayan bir kod, test aşamasında bile sorunlar yaşatır ve bu durumda testciye sorulmaz, kod kalitesi sorumluluğundadır.
    • Konuşmacı, Java ile geliştirilen ve Amazon'da sunulan basit bir uygulama örneği göstermektedir.
    10:51QA Pipeline Çalıştırma
    • QA pipeline'lerini çalıştırmak için bir uygulama kullanılıyor, bu uygulama içinde entityler, data access object layer, service layer ve web servisleri bulunuyor.
    • Developer olarak uygulamaya yeni bir özellik ekleyip, "kullanıcı tanımlama deneme" yazısını düzeltme isteği yapılıyor.
    • Değişiklik kaydedildikten sonra, bu değişikliğin metrikleri karşılayıp karşılamayacağı kontrol ediliyor.
    12:23Git ve Pipeline Süreci
    • Değişiklikler için git kullanılıyor ve "sample test hive commit" adıyla commit yapılıyor.
    • Pipeline başlatıldığında önce git repostosundan proje alınıyor, sonra build ve package işlemleri yapılıyor.
    • Unit testler ve integration testler çalıştırılıyor; unit testler sadece bir birim seviyesinde, integration testler ise context seviyesinde testler yapılıyor.
    14:09Kalite Kontrol ve Testler
    • Kalite kontrolü için Sonar kullanılıyor ve quality gate'i geçildiğinde test ortamına deployment yapılıyor.
    • Functional testler için BDD (Behavior Driven Development) ve Cucumber kullanılıyor, arka planda Selenium çalışıyor.
    • Testium ile testler çalıştırılırken ekran görüntüsü ve video kaydı alınabiliyor, böylece test sırasında yapılan işlemler izlenebiliyor.
    16:25Çeşitli Testler ve Cihazlar
    • Testium ile farklı çözümler, işletim sistemleri ve tarayıcılar üzerinde testler çalıştırılabilir.
    • Laboratuvarda yaklaşık 200 gerçek cihaz bulunuyor ve testler bu cihazlar üzerinde çalıştırılabiliyor.
    • Performans testleri için alternatif olarak Loadium veya BlazeMeter gibi araçlar kullanılabilir.
    19:52Pipeline Tanımı ve Sorumluluklar
    • Pipeline tanımı için Jenkins üzerinde pipeline plugin kurulup, Groovy ile programatik olarak pipeline scripti yazılıyor.
    • Agile metodolojisinde "kaliteden tüm ekip sorumludur" kuralı var, yani test yapan testlerini yapmakla, kod yazan kaliteli kod yazmakla yükümlü.
    • Sonar ile kalite puanlaması yapılıyor ve A++, A+, B, B+ gibi puanlamalar veriliyor.
    23:39Kod Test Edilmesi ve Unit Test Kavramı
    • Konuşmacı, matematik servis adlı bir Java uygulamasında topla fonksiyonunun iki sayıyı topladığını iddia eden bir kod örneği gösteriyor.
    • Konuşmacı, bu fonksiyonun çalıştığını kanıtlamak için sadece gözle kontrol edilmesinin yeterli olmadığını, özellikle binlerce fonksiyonlu bir uygulamada bu yöntemin uygun olmadığını belirtiyor.
    • Konuşmacı, bir başka öneri olan ön yüz üzerinden test etme yönteminin de geçerli olmadığını, özellikle servislerin test edilmesi gerektiğinde bunun yeterli olmadığını vurguluyor.
    27:51Unit Test Yazma ve Önemi
    • Konuşmacı, matematik servis test adlı bir test sınıfı oluşturarak unit test yazmanın önemini gösteriyor.
    • Doğru bir unit test için, fonksiyonun beklenen sonucu döndürdüğünü kontrol eden assertion eklenmesi gerektiğini vurguluyor.
    • Konuşmacı, bir fonksiyonu test etmek için bildiği tek yöntem unit test yazmak olduğunu ve bu nedenle takımında unit test yazılmasını beklediğini belirtiyor.
    30:51Test Türleri ve Karşılaştırması
    • Unit test'in üstünde integration test ve functional test bulunuyor, test ağacı çok değişken.
    • Unit test sayısı çok fazla olabilir ancak etkisi daha az, integration test daha etkilidir çünkü alt birimlerdeki entegrasyonu test eder.
    • Integration test yapmak maliyetli olabilir ve çok sayıda test çalıştırması bir-iki saat alabilirken, unit testler ortalama beş-on saniye içinde tamamlanmalıdır.
    33:24Test Coverage ve Kalite Kontrolü
    • Konuşmacı, yeni sürümdeki fonksiyonların覆盖率应该达到100%,特别是服务和业务逻辑部分。
    • 使用Kobertura插件可以生成单元测试覆盖率报告,显示哪些代码行被测试覆盖,哪些没有。
    • 覆盖率报告不仅显示整体覆盖率,还指出具体哪些方法或条件没有被测试到,例如正数和负数的情况。
    • 在代码管道中,需要关注代码是否正确编写,单元测试和集成测试的覆盖率,以及应用程序是否能够成功构建。
    37:56Kod İnceleme Süreci ve Test Antipatternleri
    • Kod production'a gitmeden code review sürecinden geçmelidir, bu sayede kötü niyetli davranışlar tespit edilebilir.
    • Coverage araçları (Covertura gibi) metotların çağrılıp çağrılmadığını kontrol edebilir, ancak kötü niyetli davranışlar code review sürecinde daha kolay tespit edilir.
    • Unit test antipatternlerinden biri aynı test içerisinde iki farklı fonksiyonu test etmektir, bu doğru bir test stratejisi değildir.
    39:48Kod Kalitesi ve Standartlar
    • Bir şirketin kod kalitesiyle ilgili bir kültürü olmalı, bu konuda "Clean Code" kitabı önerilmektedir.
    • Kod kalitesi, kodun okunabilirliği ve standartlara uyumu gibi faktörlerle değerlendirilir (örneğin camel case kullanımı).
    • Konsola yazma işlemleri (System.out.println veya Console.Write) blok hata olarak değerlendirilmeli, bunun yerine logger kullanılmalıdır.
    41:46Kod Kalitesini Kontrol Etme Yöntemleri
    • Kod kalitesini kontrol etmek için code review süreci ve otomatik kontrol araçları kullanılabilir.
    • Sonar gibi araçlar kod kalitesini analiz eder ve standartlara uygun olmayan kod parçalarını tespit eder.
    • Sonar, kodda bulunan hataları (bug'ları) ve onları düzeltmek için gereken zamanı (technical dept) belirler.
    45:27Statik Kod Analizi
    • Statik kod analizi, kaynak kodun içine girerek adım adım kalite analizi gerçekleştirir.
    • Kalite sadece kod yazımına göre değil, uygulamanın performansına da bağlıdır.
    • Bir uygulama çok iyi yazılsa bile, yüksek kullanıcı sayısıyla birlikte yavaşlaması durumunda kalitesi sorunlu sayılır.
    46:14Kod Kalitesi Metrikleri
    • Constructor injection yapılmaması bir hata olarak kabul edilse de, bu hata majör değil ve minör seviyeye düşürülebilir.
    • Kalite metrikleri oluşturarak, kod kalitesini değerlendirebilir ve custom kalite metrikleri yazabilirsiniz.
    • Kod dökümantasyonu (Javadoc) yapmak, servis metotlarının başında transaction attribute tanımı yapmak gibi kurallar kalite metrikleri olarak belirlenebilir.
    48:34Teknik Borç ve Quality Gate
    • Kalite metrikleri toplanarak teknik borç (technical debt) hesaplanır, bu da bugları çözmek için gereken adam günüdür.
    • Quality gate tanımları ile pipeline'da kod kalitesinin kontrol edilip edilmeyeceği belirlenir.
    • Kalite seviyeleri (A++, A+, B, C gibi) belirlenerek, projelerin kalitesi değerlendirmeye alınır.
    51:22Kalite Hedefleri ve İzleme
    • Kalite hedefleri belirlenerek, örneğin 6 ayda C+ seviyesinden B+ seviyesine, sonraki 6 ayda A+ seviyesine çıkılabilir.
    • Yeni blok işi (new block) olmaması önemlidir, eski kodun kalitesi önemli olsa da yeni yarattığınız kodun kalitesi daha da önemlidir.
    • Pipeline'da uygulama derlenir, paketlenir, unit testleri ve integration testleri çalıştırılır, kod kalitesi kontrol edilir ve quality gate'e göre değerlendirilir.
    52:38Teknik Borç ve Performans İzleme
    • Teknik borç (technical debt) sürekli yükselmesi beklenmez, düşmesi hedeflenir.
    • Reopen oranları (testte geri gönderilen kodlar) kontrol edilerek, kod kalitesi yönetilir.
    • Reopen oranları yüksek olan geliştiricilere "hızlı yazma, kaliteli yaz" şeklinde uyarı verilir.
    55:16Yazılım Geliştirme Sürecinde Testin Önemi
    • Yazılım geliştirme sürecinde test, sadece kod yazmakla sınırlı değil, analiz, proje yönetimi ve test gibi farklı alanları içermektedir.
    • Bir test süreci için test lifecycle (test yaşam döngüsü) gereklidir ve bu içerisinde neyi test edeceğinizi, hangi senaryoları ve test case'leri kullanacağınızı belirlemeniz gerekir.
    • Test sürecinde veri hazırlığı önemlidir; örneğin regresyon testi başlarken tüm gerekli verilerin hazır olması beklenir.
    57:00Test Planlaması ve Otomasyon
    • Test planlamasında neyi test edeceğinizi, hangi data setlerini kullanacağınızı ve önceliklerinizi belirlemeniz gerekir.
    • Otomasyon sadece test yaşam döngüsündeki uygulama kısmını içerir ve test süresini optimize etmektedir.
    • Kaliteli bir otomasyon kullanmak, yüksek kapsama ve minimum eforla test yapmanızı sağlar.
    58:14Test Raporlama ve Coverage
    • Test sürecinden feedback almak için çıktılar vermeniz gerekir; test edilen senaryolar, case'ler, veriler ve bulunan bulgular hakkında raporlama yapmalısınız.
    • Manuel test yaparken yüksek efora çıkmak zorunda kalırsınız, ancak otomasyon ile aynı eforla yüksek coverage'lar elde edebilirsiniz.
    • Test lifecycle olmayan yerlerde operasyonel maliyetler (opex) artar ve aynı testi farklı kişilerin yapması coverage'ı artırmez.
    59:58Regresyon Testi ve API Testleri
    • Regresyon testi için sadece hissi bir yaklaşım yeterli değildir, etki edebilecek tüm noktaları test etmeniz gerekir.
    • API testleri özellikle dışa açık entegrasyonlar veya mikroservice mimarileri kullanıyorsanız önemlidir.
    • Consumer driven contract test kavramı, farklı servisler arasında kontratların test edilmesini sağlar ve API'ların doğru çalıştığından emin olmanızı sağlar.
    1:05:12Test Ortamlarında İzolasyon Önemi
    • Test ortamlarında arka taraftaki sistemlerin çökmesi veya bakım sırasında testlerin durması sık karşılaşılan bir sorundur.
    • Testte önemli noktalardan biri, test edilen sistemlerin diğer sistemlerden izole edilmesidir.
    • Entegrasyon testi öncesi, bir sistem öncelikle diğer bileşenlerle etki etmeden kendi başına test edilmelidir.
    1:06:53İzolasyon Teknikleri
    • Yük testi yaparken arka taraftaki ERP sistemlerine yük getirmek istenmese de, test ortamı ve production ortamı arasındaki farklar nedeniyle test yapmak zorlaşabilir.
    • Servis sanallaştırma ürünleri (örneğin Wiremock) kullanılarak sistemler arasında izolasyon sağlanabilir.
    • Wiremock hem scriptlerle hem de recording ile servislerin snapshot'ını alarak, aradaki bağımlılıkları kaldırmayı sağlar.
    1:08:32İzolasyon Örneği
    • Proxy üzerinden servisler kaydedilerek, arka taraftaki sistem çöktüğünde bile kaydedilen yanıtlar kullanılarak test edilebilir.
    • İzolasyon ortamı sayesinde arka taraftaki sistem çökse bile, kaydedilen servis yanıtları kullanılarak test işlemi devam edebilir.
    • Bu yöntem özellikle şirket içi sistemlerle entegre uygulamalar geliştirirken, evde geliştirme yapabilmenizi sağlar.
    1:12:09Git ve Commit Yönetimi
    • Birden fazla kişi aynı anda commit yaparken, her commit bir commit ID'sine sahip olup farklı pipeline'lar oluşturur.
    • İkinci commit, ilk commit ile çakışsa ve hata yaparsa, pipeline'den geçmez ve master branch'a gitmez.
    • Rollback senaryosu olması gereken bir durumdur, özellikle production'a gittiğinde hata alındığında geri alım yapılabilmelidir.
    1:14:27Functional Test ve Cucumber
    • Functional testlerde jenerik senaryolar oluşturulabilir ve Cucumber ile gerçekleştirilebilir.
    • Cucumber, Türkçe yazılan senaryoları da destekleyerek daha anlaşılır test senaryoları oluşturmayı sağlar.
    • Cucumber, kod dökümantasyonu sağlayarak analistlere de yazdırılabilecek, belli bir yazım şekli ve kültürü oluşturabilen bir yöntemdir.
    1:17:30Ecel Testing ve Sprint İlişkisi
    • Ecel testing'de sprinti bitirdikten sonra test gönderme yöntemi doğru değildir.
    • Sprint başında testlerin gelişimini sağlamalı ve kabul kriterleri sprint ile birlikte ortaya çıkmalı.
    • Testlerin geliştirilmesi sırasında dökümantasyon oluşturulmalı ve testler koşulabilir hale getirilmelidir.
    1:18:26Lodyum Yük Testi Aracı
    • Lodyum yük testi aracı, start edildiğinde otomatik olarak 30 makine açıp saniyede 300 thread ile büyük yük testi yapabilmektedir.
    • Lodyum, Blazmater gibi araçlara göre daha fazla makine sınırı olmadan kullanılabilir.
    • Yük testi sonuçları sadece performansı göstermez, aynı zamanda APM (Application Performance Monitoring) araçlarıyla entegre olarak problem nedenini de belirleyebilir.
    1:21:11Test Otomasyonu ve Kalite Hedefleri
    • Test yaşam döngüsü, A+ kalite hedefi, periyodik performans testleri ve test otomasyonunun belirli bir seviyede kullanılması gerekmektedir.
    • Test raporlaması aktif şekilde yapılmalı ve yatırım geri dönüşü sağlamalıdır.
    • Kaliteli kodda geliştirme hızı %20 artabilir, böylece daha fazla iş geliştirilebilir.
    1:24:22Kalite Hedeflerine Ulaşma Yolları
    • Kalite hedeflenmeli ve sürekli iyileştirilmeye çalışılmalıdır.
    • Kalite komiteleri kurulmalı ve test yaşam döngüsünün olgunlaştırılması hedeflenmelidir.
    • Test personelinin manuel test eforundan daha değerli işler yapması, test datası ve test覆盖率的提高以及质量指标的提升应该成为他们的工作重点。
    • 质量过程应该融入软件开发生命周期,而不是在应用开发完成后才进行测试。
    • 团队内部应该进行培训,包括测试开发、单元测试、代码整洁度、设计模式和反模式等方面的知识。
    • 源代码控制工具的使用非常重要,团队成员应该了解如何配置和使用分支。
    • 持续集成不仅仅是使用不同的工具,而是一个持续集成的过程,需要有质量指标来衡量。新科技的持续跟踪也很重要。

    Yanıtı değerlendir

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