QA ekibini dağıtmanın kötü bir karar olmuş olabileceğine dair eleştiri
(davidkcaudill.medium.com)- DevOps tarzı optimizasyonlarla sürüm çıkarma, dağıtım, imaj yönetimi ve geri alma süreçlerindeki darboğazlar azaltıldıktan sonra, yazılım tesliminde en yavaş nokta test olarak kaldı
- Sektör, testin kendisinden çok QA ekibini darboğaz olarak görmeye başladı; rolden beklentiler artarken kötüleşen çalışma koşulları, sözleşmeli çalıştırma, offshore’a taşıma ve istihdam azaltma devam etti
- QA organizasyonlarının dağıtılması, deneyimli QA çalışanlarının moralini kırdı; geliştiriciler kalite işlerini doğal biçimde üstlenemeyince düşük kaliteli yazılım sorunu büyüdü
- Kalite yönetimi; hata takibi, sınıflandırma, inceleme, kalite savunuculuğu ve uçtan uca test gibi adlandırılması ve atanması gereken gerçek bir iştir
- Kalite işi organize edilmezse sorunları bulan ve toparlayan kişiler ödüllendirilmez; hızlıca üretip bozan tarafın tekrar tekrar ödüllendirildiği bir yapı oluşur
DevOps optimizasyonundan sonra kalan darboğaz
- DevOps uygulayıcıları, Theory Of Constraints yaklaşımını uygulayarak yazılım teslim hattını ve pratiklerini güçlü biçimde optimize etti
- Manuel sürüm yönetimi, dağıtım, imaj yönetimi ve production rollback otomasyonun hedefi haline geldi
- Ürün backlog’undan kodun müşteriye ulaşmasına kadar olan süreçteki düşük değerli faaliyetler, ortadan kaldırılacak veya optimize edilecek darboğazlar olarak ele alındı
- Bunun sonucunda yazılım tesliminin en yavaş kısmı test olarak kaldı
- Test, sürekli teslimatın var olma nedenlerinden biridir
- Testleri hızlandırmak, otomatikleştirmek ve paralelleştirmek mümkündür
- Bir pratikte en değerli faaliyet darboğazsa, bunun zaten optimuma yakın bir durum olduğu düşünülür
Sektörün QA ekibini darboğaz olarak görmesi
- Optimizasyon alışkanlığı, testin kendisinin ötesinde QA rolüne de uygulandı
- Entegrasyon testleri ve uçtan uca testleri birim testlerine indirerek paralelleştirme yönünde bir eğilim oluştu
- İnsan kaynağı tarafında, kod yazamadığı düşünülen kişilerin özellik ekiplerine itilmesi de yaşandı
- Sektör, darboğazın test değil QA ekibi olabileceğini düşünmeye başladı
- QA rolüne yönelik beklentiler yükseldi
- Ücretler düştü ya da diğer rollere kıyasla artmadı
- Rol sözleşmeli hale getirildi ve offshore’a taşındı
- QA mühendisi istihdamını azaltma tercihleri devam etti
QA rolünün küçülmesinin yarattığı kısır döngü
- QA’da kalan kişiler giderek daha dezavantajlı bir yapının içinde kaldı
- Yeterince iyi kod yazabilenler veya çalışma koşullarından bıkanlar QA’dan ayrıldı
- Diğerleri, QA’da kalan insanları “o alandan çıkacak kadar yeterli olmayan kişiler” olarak gördü
- Yeni mezunlara QA alanını önerenlerin sayısı da azaldı
- Şirketler, “bu fonksiyonu artık bulundurmayacağız, siz halledin” yaklaşımıyla QA ile yollarını ayırdı
- Bu süreç, QA kariyeri inşa etmiş kişiler için saygısızca ve moral bozucu oldu
- QA’nın dağıtılması düşük kaliteli yazılım sorununu büyüttü; birçok organizasyon yazılım kalitesinde kimin ne yapması gerektiğini bilmez hale geldi
- QA fonksiyonunu koruyan organizasyonlar bile, zaten zarar görmüş bir alan içinde bu rolün yerini bulmakta zorlandı
“Test uzmanlarını işten çıkarmak” çözüm değildi
- Daha hızlı yazılım teslimi için “tek garip numara” test uzmanlarını işten çıkarmak değildi
- QA alanını bozmak, en kötü yönetim hatalarına yakın bir karardı
- On yıllar içinde gelişmiş bir şeyi yok eden bir tercihti
- Etkisi yıllar boyunca hissedilmeyebilir
- Organizasyon sorunu hissettiğinde, anlamlı bir toparlanma için yeniden yıllar gerekebilir
- QA rolünde zaten bozuk olan kısımlar hâlâ çözülmeden duruyor
- İş bölümü gerçekleşmedi; geliştiriciler ek ücret, takdir veya ödül yapısı olmadan QA işlerini gönüllü olarak üstlenmiyor
- Yüksek işlevli QA ekipleriyle çalışmış bazı kişiler, bu davranışların bir kısmını taklit edebilir; ancak daha yeni mühendisler ve yöneticiler neyin eksik olduğunu anlamakta zorlanır
- Temel ilke, kalite güvencesinin bir iş olduğudur
- Diğer işler gibi, “birilerinin” yapacağı varsayılırsa başarısız olur
- Görünmeyen iş olarak bırakmak da başarısızlığa yol açar
Yazılım kalite yönetimi için gereken işler
-
Hata takibi
- Kullanıcıların bug bilgisi gönderebilmesi ve geliştiricilerin bug kaydedebilmesi için bir yöntem gerekir
- Bug, neyin yanlış olduğunu ve ne kadar ciddi olduğunu açıklayan ayrı bir ticket’tır
- Düzeltme işinin kendisini açıklamaz
- Kusuru, yeniden üretme adımlarını ve etkiyi içermelidir
- Son dönemde birlikte çalışılan geliştirme ekiplerinin çoğu bu tür kusurları takip etmiyordu
- “Zaten düzeltmeyeceğiz”, “benim işim değil”, “yeni özelliklerle ödüllendiriliyorum” gibi gerekçeler düşük kaliteli sonuçları meşrulaştırmaz
- Bug listesini yönetmek başlı başına bir iştir
-
Sınıflandırma ve önceliklendirme
- Bug sınıflandırması, gelen bug’ları atama, önceliklendirme, düzenleme, sınıflandırma ve mükerrerleri ayıklama sürecidir
- Yüksek, orta ve düşük ciddiyet ölçütlerini tutarlı biçimde belirlemek organizasyona yardımcı olur
- Geçmişte buna “bug hijyeni” denirdi
- Hangi ekibin ilgili bug’ı üstlenmesi gerektiğini belirlemek de bir iştir
- İyi işleyen organizasyonlar, dış baskı veya yeniden yapılanma durumlarında daha iyi yanıt verebilir
- İşten çıkarmalar olsa bile kalite düşüşünü kademeli olarak yönetir
- Organizasyon değişikliklerinde belirli bug kategorilerini yeni ekibe devreder
- Durdurulan özelliklere ait bug’ları topluca kapatır
- Hiç dış stres veya organizasyon değişikliği yaşamayan ekiplerin sınıflandırma sürecini görmezden gelebileceğini söylemek neredeyse şaka gibidir
-
Kusur incelemesi
- Yeniden üretme, bug yönetiminin önemli bir parçasıdır
- Birinin “sinema bileti almaya çalıştım ama olmadı” raporunu, “adında İngilizce dışı karakterler olan müşterilerde karakter kodlama sorunu satın alma akışını bozdu” biçimine dönüştürmesi gerekir
- “Bu sorun kaç kez yaşandı?”, “kullanıcı etkisi nedir?” gibi sorulara gerçek insanların zaman ayırarak yanıt vermesi gerekir
- Kusur incelemesi, bug backlog’una mühendislik titizliği uygulama işidir
-
Kaliteye odaklanan rol
- Şirket içinde nihai ürünün kalitesine odaklanan birinin olması gerçek değer taşır
- Kalite herkesin işi olabilir ama aynı zamanda birinin işi olmalıdır
- Kalite ile hız arasındaki gerilimde kaliteyi savunan birine ihtiyaç vardır
- Test araçları, test kalitesi ve test planı için mümkün olduğunca iyi yapılmasını isteyen, görüş sahibi bir paydaş gerekir
-
Uçtan uca test
- Birçok mühendislik organizasyonunda en büyük ve en yaygın sorunlardan biri sistem sahipliğidir
- Mimari karmaşıklığın artması, ekipleri ve uygulamaları küçük tutma amacıyla gerçekleşti; bu makul bir strateji olabilir
- Ancak bunun sonucunda uygulamanın en önemli kısımlarında boşluk oluştu
- Ortalama bir ekip artık ürünün uçtan uca kullanımını ve doğrulamasını yapmıyor; çünkü bu çok zor
- Ürün yayınlanmadan önce organizasyon içinde onu gerçekten kullanan birinin olduğundan emin olunmalıdır
Kalite işini görmezden gelince ortaya çıkan organizasyon sorunları
- “Biz çevik, lean ve dinamiğiz; böyle işler yapmamıza gerek yok” tepkisi gelebilir
- Yakından bakıldığında bu işlerin organizasyon içinde zaten gerçekleşiyor olma ihtimali yüksektir, ancak çok kötü yapılıyordur
- Otomobil, banka veya doktor gibi başka alanlarda “biz kalite güvencesi yapmıyoruz” sözünü duymak iyi bir deneyim değildir
- Kalite faaliyetleri tanınmaz ve organize edilmezse çok kötü durumlara yol açar
- En vicdanlı çalışanlar en buruk hale gelir
- Kalite sorunlarını görür ve sık sık çözerler
- Bunun için takdir görmezler
- Kalite endişeleri dile getirdiklerinde hızı yavaşlatmaya çalışan kişiler gibi muamele görürler
- “Hızlı hareket edip bir şeyleri bozan” kişilerin tekrar tekrar ödüllendirildiğini görürler
- Kendilerini başkalarının dağınıklığını öfkeyle temizleyen kişiler gibi hissederler
- Böyle organizasyonlarda önemsemek başlı başına kariyer açısından dezavantaj haline gelir
1 yorum
Hacker News yorumları
Kariyerimin başlarında, 1970'lerin sonlarında IBM Hursley Park'taki Product Assurance, yani QA organizasyonunda çalıştım. Sorumlu olduğum ürün olan kelime işlem sistemini test etmek için kod ve donanım yazıyor, test edilen sistem üzerinde test vakaları çalıştırıyordum.
Bulduğumuz sorunları geliştirme ekibine yalnızca genel açıklamalarla iletiyorduk; amaç, ekibin test vakasına uyum sağlamasını değil hataları düzeltmesini sağlamaktı. Sonuçta tireli sözcüklerin satır sonu bölünmesi ve backspace ile silme konusunda 3 hata bulduğumuzda, geliştirme ekibi o alandaki 4 hatayı düzeltiyor ama bizim gerçekten bulduklarımızdan yalnızca 2'sini düzeltmiş oluyordu; böylece kalan gerçek hata sayısını istatistiksel olarak tahmin edebiliyorduk.
QA ekibi olmayan organizasyonlarda sniff test kavramını getirdim. Genelde şirketten ya da departmandan herkesin yeni bir özelliği yaklaşık 1 saat kurcaladığı bir oturumdur; özellik tamamlanmış kabul edilse bile sınır koşulları neredeyse her zaman bozuk olurdu. Tüm alanlara
""girip göndermek, arayüzde yalnızca klavyeyle gezinmek ya da büyük yazı tipi, tarayıcıda %110 yakınlaştırma gibi basit koşulları denemek sorunları sık sık ortaya çıkarırdı; artık buna şaşırmıyorum bile.Küçük özellikler geliştirilirken genelde yalnızca programcılar test eder; bu yöntem gerçek son kullanıcıların kullanım biçiminden farklı olabildiği için özellikle faydalıdır.
15-20 yıl önce en üst düzey QA ekiplerine yatırım yapan iki şirkette çalıştım; o ekipler gerçekten karşılığını veriyordu. QA, geliştiricinin soruna fazla yakın olduğu için aklına gelmeyen hataları çok iyi buluyordu ve ürünler de dünya standardında oluyordu.
İki şirkette de kritik nokta, yukarıdan yayınlanıp yayınlanmayacağı konusunda son yetkinin QA ekibinde olduğunun belirlenmiş olmasıydı.
Günümüzde şirketler, geliştiricilerin otomasyon testleri kullanmasının ve kod kapsamına aşırı odaklanmasının daha iyi olduğunu düşünüyor; ama %100 kod kapsamına sahip olup nesnel olarak çalışmayan çok fazla ürün gördüm. Otomasyon testleri kötü demiyorum; insan QA test uzmanlarını ortadan kaldırmanın sorun olduğunu söylüyorum.
Yakın zamanda çalıştığım bir şirketin QE ekibi testleri yürütmek için muazzam miktarda kod yazıyordu; satır sayısı, test edilip onaylanan modülden daha fazlaydı.
Yine de herkesin bildiği büyük bir yazılım şirketinde bir test yöneticisinin, %100 kapsama ulaşıldığına göre test ekibinin işinin bittiğini ilan ettiğini duymuştum.
Böyle bir yetki olsa bile QA'in çoğunlukla düşük ücretli sözleşmeli çalışanlardan oluştuğu ve yalnızca kendilerine söyleneni yaptığı şirketlerde işler hâlâ berbattı.
assertTrue(true)olan testler yazan geliştiriciler gördüm. Her zaman yeşil yanar ve kapsam %100 olur.Aynı kişiler yeni özellik geliştirebiliyorken neden test yazmaları gerektiğini sorardı; sonra kıdemli bir QA gelir ve her şeyi kırardı. Bir keresinde F5'e 1 dakika içinde 50 kez basınca backend'in veritabanı isteklerini döndürürken
outOfMemoryile öldüğünü bulmuştu.Spesifikasyonun çok ötesindeki sınır koşullarını bulmakla gurur duyuyorlar ve bunun değeri fazlasıyla var. İyi bir tip sistemi değişiklik yapma konusunda nasıl güven veriyorsa, mükemmel QA de geliştiriciye güven verir. Özellikle oyunlar gibi etkileşimi yüksek uygulamalarda, birim testleri ve entegrasyon testleriyle parametre uzayının tamamını kapsamak zordur.
Bir organizasyondaki en vicdanlı çalışanların en çok burukluk yaşayanlar olduğu sözü acı bir gerçek. Kalite sorunlarını görür, çoğu zaman bizzat çözerler ama takdir görmezler; kalite kaygılarını dile getirdiklerinde ise hızı yavaşlatmaya çalışan kişiler gibi muamele görürler.
“Hızlı hareket et ve bir şeyleri kır” tarafı ödüllendirilmeye devam eder; önemseyenler ise arkalarını toplar ve öfkeleri birikir. Onlara göre önemsemek bizzat kariyer açısından büyük bir dezavantaj gibi hissettirir; çünkü gerçekte de öyledir.
DBA ve altyapı organizasyonları da QA ile aynı durumda; yakında dengenin yeniden geri gelmesini umuyorum.
Kullanıcılar hataları bildirebiliyor ve internet üzerinden güncelleme alabiliyorken, çok para ve zaman harcamaya ne gerek var diye hesaplıyorlar. Oyunlar ve yazılımlar fiziksel medyadan indirme odaklı hale geldikten sonra yama yapmak daha ucuza geliyor gibi. Elbette bu korkunç güvenlik sorunlarına ve kötü kullanıcı deneyimine yol açıyor; ama yukarıdakiler kârı maksimize ettiği sürece pek umursamıyor.
POC SaaS ürünü yapıyorsanız aviyonik mikrokontrolör düzeyinde kaliteye ihtiyacınız yoktur. Her ödünleşimin riski ve maliyeti vardır; iyi mühendis aradaki farkı bilmelidir.
QA ekibinin temel sorunu IT ekibi ya da yönetim organizasyonuyla aynı. İşini iyi yaptığında hiçbir şey yapmıyormuş gibi görünür
Bu yüzden kişinin kendi işini “meşrulaştırmak” zorunda kaldığı durumlar sık yaşanır; bu da genellikle metriklere aşırı bağımlı olmaktan kaynaklanır. Goodhart Yasası’nda olduğu gibi, metriğin neyin vekil değeri olduğunu ve işin gerçek amacının ne olduğunu anlamamaktır
Kötü QA ekipleri söyleyecek bir şeyleri varmış gibi görünmek için gereğinden fazla kusur arar; iyi QA ekipleri ise kaliteyi doğrularken aynı zamanda çalışanları daha yüksek kalite üretmeleri için eğitir
İş gücünün genelinde eğitim eksikliği olduğunu hissediyorum. Kısa süre önce ön sayfaya çıkan “95. yüzdelik dilim de o kadar olağanüstü değil” yazısı (https://news.ycombinator.com/item?id=38560345) da, çoğu uygulayıcı aktif olarak antrenman yapmadığı ya da geri bildirim almadığı için herhangi bir alanda ilk %5’e girmenin kolay olduğu yönündeydi
Şirketlerin amatör spor takımı gibi değil, profesyonel takım gibi sürekli antrenman yapması gerekmez mi diye düşünüyorum. İşe alımda da “zaten en iyi performans gösteren biri mi”den çok “bu kişiyi en iyi performans gösteren biri hâline getirebilir miyiz” diye bakılmalı. Önceki ortamında başarılı olmuş olması, yeni ortam çok farklıysa sanıldığından daha az anlam taşır
Yazılım kalitesiyle ilgili her yazıda mühendislerin yaygın ilgisizliğini doğal kabul eden çok sayıda yorum var. Duruma göre değişir ama insanlar kendi organizasyonlarının yerel optimumuna uyup sadece akıntıya kapılmak ve inisiyatifi bırakmak konusunda epey iyi görünüyor. Bu tamamen onların suçu değil ama masum da değiller
Tekrarlayan işleri otomasyonla ortadan kaldırırsanız o kişinin pozisyonu ortadan kalkar; ama doğru yaparsanız yönetici onun bütün gün oturup hiçbir şey yapmadığını düşüneceği için, bunu doğru yapmaya yönelik teşvik azdır
Bulunan bug sayısına göre değerlendirilmeyeceğiniz için, sayıyı artırmak adına aptalca bug’ları zorla bulma baskısı da yoktur
İyi eğitim için teknik rollerde yeterince geniş görüşlü ve iyi insanların bulunması gerekir. En yeni teknolojilerin hepsini bilmeleri gerekmez ama saçmalığı sezebilmeli ve işaret edebilmelidirler. FAANG de istisna değil
Bu yazıda da geçtiği gibi, asıl mesele QA’nın neredeyse her zaman iş birimleri ve üst yönetim tarafından maliyet merkezi olarak görülmesi
Maliyet merkezi olarak görülen organizasyonlarda çalışmamanın daha iyi olduğuna dair bir varsayımım var. Bonus, takdir ve saygı her zaman para kazanan tarafa gider; maliyet merkezleri ise daha az kişiyle daha fazla işi üstlenir, başarısızlığın sorumluluğunu üzerine alır ve şirket küçülürken ilk kesilen yer olur. IT için de aynı şey geçerli
Bu kısır döngü yüzünden QA kariyeri, benzer becerilerle geliştirici olmaktan her zaman daha zor olmak zorunda kalır. Çok iyi insanlar yorulup mümkün olan en kısa sürede çıkar ve bu yapı kendi kendini güçlendirir
Erişilebilirlik, gözlemlenebilirlik, iyi loglama, test altyapısı iyileştirmeleri, CI/CD ayarları, stabilite, daha iyi linting ve analizör sorunları hep önemli; ama hızlıca özellik yayınladığınızda ödüllendiriliyorsunuz
Bu yıl ekip ve uygulama için gerekli olduğunu düşündüğümden bu tür işlere fazla zaman harcadım ve yıl sonu performans değerlendirmemden endişeliyim. Şimdi diğer insanların bu işleri neden kaçındığını anlıyorum; gelecek yıl daha görünür özellik yayınlarına odaklanmayı düşünüyorum. Uygulamadaki bug’lar için üzgünüm ama konut kredisini ödemek için işe ihtiyacım var
Bazı organizasyonlar QA/QC’nin getirdiği değeri içtenlikle önemser. Bunu yazılımdan çok üretim sektöründe daha net gördüm; tahminimce bunun nedeni yazılımın doğası gereği daha soyut olması ve israfı izlemenin daha zor olması
Gerçekten iyi QA, kolay yolu arayan kişi değil, QA’nın misyonuna inanan kişidir. Sonuçta değeri yaratan şey, organizasyonun ve bireylerin QA ruhunu gerçekten benimsemesi; bunu sadece biçimsel olarak yapan yer de çok
Yine de sorun değil. Daha iyi ve sağlam hâle getirmek hoşuma gidiyor ve içimi rahatlatıyor. Bozma işini alaycı insanlara bırakacağım
Bonusların vb. başka gruplara gitmesi sorun değil. Teknik bir rolde yeterince iyi kazanıyorum ve para kazandıran o rollerin önemli bir kısmı, gerçekten iyi yapsam bile beni çok mutsuz ederdi
Yazılım kalitesi, kodun sürdürülebilirliği ve iyi tasarım, ancak o şirkette uzun süre çalışmayı planlıyorsanız önemlidir
Birkaç yıl sonra bir sonraki şirkete geçmeyi düşünüyorsanız, en uygun yol görünür işler yapıp hızlıca yükselmek ve bu geçmişi daha yüksek maaşlı bir işe geçmek için kullanmaktır. Birkaç yıl sonra o proje bozulsa ya da bakımı imkânsız hâle gelse bile, o sırada artık orada olmayacağınız için fark etmez
Startup’lar da aynı şekilde işler. Her yere kazınmış büyüme zihniyeti tam olarak bu kalıptır. Ürün 5 yıl sonra bakımı imkânsız hâle gelse bile, o zamana kadar exit yapıp nakde dönmüş olabilirsiniz
Böyle insanları tam olarak suçlamıyorum. Şirketlerin bizzat kullandığı pratikler bunlar ve insanlar sadece o kurallara göre oynuyor. Hoşuma gitmiyor, hatta gerçekten nefret ediyorum ama anlıyorum
İşin ilginç yanı, yöneticilerin ve üst düzey yöneticilerin işten ayrılma oranından, şirkete bağlılık eksikliğinden ve sessiz istifadan şikâyet etmesi. Kendi yarattıkları zehri kendileri tatmak gibi
5 yıl sonra teknik borçla birlikte hayatta kalmışlarsa, birçok startup için bu aslında iyi bir problemdir. Ne de olsa 5 yıl dayanmış oldukları anlamına gelir
QA mühendisleri hata ayıklamada da oldukça iyidir. Pipeline’lara, kaynak koda, test dizinlerine dokunur; uygulama geliştirme ve dağıtımının neredeyse her yönüyle ilgilenirler.
QA lead’i olduğum dönemde, pipeline hata mesajlarını okumaya bile çalışmadan her gün Slack’te şikâyet eden yazılım mühendislerini sık görürdüm. Pipeline optimizasyonu sırasında da kök sorunu görmezden gelir, o kök sorundan çıkan semptomları sanki sihirli ve anlaşılmaz sorunlarmış gibi ele alıp günlerce tahmin yürüterek çözmeye çalışırlardı.
Bu yazıda geçen QA mühendislerine yönelik küçümseme abartı değil. QA organizasyonu olan şirketler bile çoğu zaman mühendislik organizasyonları kadar sıkı mülakat süreçleri uygulamaz; bu yüzden QA mühendisleri düşük değerlendirilir.
QA’ya saygı duyan SWE’ler yalnızca bizzat QA’da çalışmış kişilerdi. Bu küçümseme o kadar yaygındı ki sonunda mühendislik organizasyonuna geri döndüm; principal engineer olarak kıdemimi ya da yönetici rolümü kullanarak bunu değiştirmeye çalıştım ama başaramadım. Mühendislik kendi kibrinin ötesini göremedi, liderlik de yardımcı olmadı.
İşten çıkarılmadan önce çalıştığım şirketteki yeni CTO, QA ihtiyacının otomasyonla ortadan kaldırılabileceğini söyledi ama bunun ne anlama geldiğine dair tek bir örnek bile vermedi. İyi yazılım üretmeye yönelik yukarıdan gelen saygı seviyesi işte bu kadardı.
Microsoft bu sorunun en belirgin görüldüğü örnek gibi duruyor. QA ekibini kaldırdıktan sonra Windows ve bulut ürünleri güncellemelerinde hatalar gözle görülür şekilde arttı.
İşimde Microsoft yazılımlarını ve hizmetlerini çok kullanıyorum; kalite düşüşünün bir şekilde bedelini ödemelerini isterdim.
Kişisel deneyimim olabilir ama mühendislik için gerçekten test yazan bir QA ekibi hiç görmedim.
Benim karşılaştığım QA ekipleri test planları yazar ve bunları manuel olarak çalıştırırdı; nadiren de otomatikleştirilmiş tarayıcı/cihaz testleriyle yürütürlerdi. Bu testlerin de değeri var ama bence birim testleri veya entegrasyon testlerinden daha az.
Bu modelde fiilen mühendislik ekibi QA ekibine dönüşüyordu; ayrı QA ekibi ise çoğu zaman hata olmayan şeyleri hata gibi bulup gürültü yaratıyor, sağladığı değerden daha fazla maliyet çıkarıyordu.
İyi işleyen bir QA ekibi modelini öğrenmek isterim. Manuel test harika ama deneyimime göre sınırları var. QA çalışanlarını küçümsemeye çalışmıyorum, yalnızca kendi deneyimimi paylaşıyorum.
PM’den, satıştan ve geliştirme ekiplerinin çoğundan daha kapsamlı biçimde kullanıcıya görünen tüm sistemi bilir; hangi düğmeye basınca ne olacağını tam olarak söyleyebilir. Kötü QA gerçekten de bir gürültü kaynağıdır ama kötü geliştiriciler, sistem yöneticileri ve 1./2. seviye destek de öyle.
Buna maruz kalırken gerçekten sinir bozucudur ama çıktının kalitesi çok daha iyi olur.
Eskiden QA genellikle test yazmaz, kodu manuel olarak test eder ve kullanıcıların yapmamasını umduğunuz bütün tuhaf davranışları denerdi. Testlerle genel olarak yakalanması zor sorunları ve hataları bulurdu.
Şimdi QA’yı kullanıcılara yıkıyoruz. Genç geliştiricilerle çalışırken QA kavramının kendisinin giderek yabancılaştığını hissediyorum. Production’a hata çıkınca “lokalde kurcaladığında nasıldı?” diye sorduğumda çoğu zaman tuhaf bakışlar alıyorum. Tip denetleyiciden geçtiyse neden yayınlamayalım, der gibiler.
Günümüzde programcı verimliliği dakikadaki PR sayısıyla ölçüldüğünden, hata sokmak sorun değil; hatta iyi bir şey. Biri production’da bulursa birkaç gün sonra onu düzelten bir PR daha açabilirsiniz. QA olsaydı bu akışı bozardı.
QA fonksiyonunu hayata geçirme biçimi şirketten şirkete değişir. Bunu müşteriye de bırakabilirler, geliştiricilere, müşteri desteğine, manuel QA’ya ya da SDET’lere de. Sonuçta her şey liderliğin kaliteye ne kadar önem verdiğine ve QA’yı nasıl gördüğüne bağlıdır.
Bir QA ekibi varsa, sürecin erken aşamalarına katıldığında başarı ihtimalinin en yüksek olduğunu düşünüyorum. İyi bir QA ekibi, kod yazılmadan önce hataları bulmalıdır. Ne kadar geç dahil olursa hatalar da o kadar geç bulunur ve “kod tamam” ile yayın arasına daha sert şekilde sıkıştırılır. QA ekibinin otomasyon becerisi olmalı ki manuel testleri tekrar etmek yerine yeni test senaryolarına zaman ayırabilsin.
Bu yazı epey can yakıcı geliyor. QA bazen ikinci sınıf vatandaş muamelesi görüyor ve işini düzgün yapmak için ihtiyaç duyduğu bağlamı sağlayacak tartışmaların dışında bırakılıyor. İyi insanlar geliştirme ya da ürün yönetimine ayrıldıkça durum daha da kötüleşiyor; aşağı yönlü sarmal gerçekten var.
Burada tarif ettiğin şey liderlik sorunu; QA’nın yararlılığıyla ilgili bir sorun değil.
QA, erken aşamada sürece dahil edilmeden test altyapısı ve test planları hazırlayarak zaman geçirir; en sonunda da önüne bir kod yığını ve 48 saatlik onay takvimi konur, yoğun baskı altında imza atması beklenirdi.
Ama ara sıra problem alanını derinlemesine anlayan ve geliştirmeyi gerçekten yönlendiren QA organizasyonlarıyla da karşılaşmak mümkündü. Geliştirmeyle baştan sona yan yana ilerlerlerdi; yalnızca kaliteyi artırmakla kalmaz, herkesin zamanından da tasarruf sağlarlardı.
FoundationDB’yi geliştirirken kalite ve testlere neredeyse takıntı düzeyinde odaklanmıştık. Bu yüzden Flow adlı bir dil bile geliştirdik; rastgele büyüklükte FDB kümelerini deterministik olarak simüle edebiliyor, aşırı koşullara maruz bırakabiliyor, sistem özelliklerinin ihlalini işaretleyebiliyor ve bu ihlale yol açan test çalıştırmasını eksiksiz yeniden üretebiliyorduk.
Her gece on binlerce test çalıştırmasının, yeni kod yoksa temelde hepsinin yeşil yandığı noktaya kadar geldik. Kırmızı yanan testler neredeyse her zaman yakın zamanda eklenen koddan kaynaklanıyordu; bu yüzden kolayca tespit edilip düzeltilebiliyordu.
Bu sayede ekip, yeni eklenen hataların hızla yakalanacağını bilerek geliştirme yapabiliyordu; bu da yayın sonrasında işlem işleme sistemini yeniden yazmak gibi cesur projeleri güvenle üstlenebilecek bir tempoya yol açtı. Sonuçta 10 kat hız artışı da elde edildi.
Nihayetinde kaliteye odaklanmak hıza dönüştü ve ikisi hiç de birbiriyle çelişmedi. Bunun münferit bir durum olduğunu düşünmüyorum; bu yüzden yeni bir projeye yol açtı, ama bu bir sonraki hikâye.