GUI testine yaklaşımım ve endüstri konsensüsü gelişiyor. Ama bence birkaç anahtar teknik ortaya çıkmaya başlıyor.
Duruma bağlı olarak bu tekniklerden birini veya daha fazlasını kullanıyorum (örneğin ne tür bir GUI olduğu, ne kadar hızlı inşa edilmesi gerektiği, son kullanıcının kim olacağı vb.).
Manuel test. Kod üzerinde çalışırken GUI'yi her zaman çalıştırırsınız ve kodla senkronize olduğundan emin olursunuz. Kod ve çalışan uygulama arasında geçiş yaparak üzerinde çalıştığınız kısmı manuel olarak test edip yeniden test edersiniz. Önemli bir iş parçasını her tamamladığınızda, regresyon olmadığından emin olmak için tüm ekranı veya uygulamanın alanını genel bir test verirsiniz.
Birim testi. Fonksiyonlar veya küçük GUI davranışı birimleri için testler yazarsınız. Örneğin, grafiklerinizin 'temel' bir renge dayalı olarak bir rengin farklı tonlarını hesaplaması gerekebilir. Bu hesaplamayı bir işleve çıkarabilir ve bunun için bir birim testi yazabilirsiniz. GUI'de (özellikle yeniden kullanılabilir mantık) böyle bir mantığı arayabilir ve daha kolay birim testine tabi tutulabilen gizli işlevlere çıkarabilirsiniz. Karmaşık davranışlar bile bu şekilde çıkarılabilir ve test edilebilir - örneğin, bir sihirbazdaki bir dizi adım bir işleve çıkarılabilir ve bir birim testi, bir girdi verildiğinde doğru adımın döndürüldüğünü doğrulayabilir.
Bileşen gezgini. Tek rolü GUI'nizi oluşturan yeniden kullanılabilir bileşenlerin her birini sergilemek olan bir 'explorer' ekranı oluşturursunuz. Bu ekran, her bileşenin doğru görünüme sahip olduğunu görsel olarak doğrulamanın hızlı ve kolay bir yolunu sunar. Bileşen gezgini tüm uygulamanızı manuel olarak gerçekleştirmekten daha etkilidir, çünkü A) her bir bileşeni yalnızca bir kez doğrulamanız gerekir ve B) bileşeni görmek için uygulamanın derinliklerine gitmeniz gerekmez, sadece görüntüleyebilir ve hemen doğrulayın.
Otomasyon testi. Ekran veya bileşenle etkileşime giren, fare tıklamalarını, veri girişini vb. Simüle eden, uygulamanın bu manipülasyonlar verildiğinde doğru çalıştığını iddia eden bir test yazarsınız. Bu, diğer testlerinizin atlayabileceği olası hataları yakalamak için ekstra bir yedekleme testi olarak yararlı olabilir. GUI'nin kırılmaya en çok eğilimli ve / veya son derece kritik bölümleri için otomasyon testi yapma eğilimindeyim. Bir şey kırılırsa mümkün olduğunca erken bilmek istediğim parçalar. Bu, kırılma veya önemli ana ekranlara karşı savunmasız olan oldukça karmaşık etkileşimli bileşenleri içerebilir.
Fark / anlık görüntü testi. Çıktıyı ekran görüntüsü veya HTML kodu olarak yakalayan ve bir önceki çıktıyla karşılaştıran bir test yazarsınız. Bu şekilde, çıktı her değiştiğinde sizi uyarırsınız. Diff testleri, GUI'nizin görsel yönü karmaşıksa ve / veya değişebilirse, bu durumda, belirli bir değişikliğin bir bütün olarak GUI üzerindeki etkisi hakkında hızlı ve görsel geri bildirim almak isteyebilirsiniz.
Muhtemel her türlü testi kullanmak yerine, üzerinde çalıştığım şeye dayalı olarak test tekniğini seçmeyi ve seçmeyi tercih ediyorum. Bu yüzden bir durumda basit bir işlevi ayıklayacağım ve birim test edeceğim, ancak başka bir durumda bileşen gezginine bir bileşen ekleyeceğim, vb. Bu duruma bağlıdır.
Kod kapsamının çok yararlı bir metrik olduğunu bulamadım, ancak diğerleri bunun için bir kullanım bulmuş olabilir.
İlk önlem, hataların sayısı ve ciddiyeti olduğunu düşünüyorum. Birinci önceliğiniz muhtemelen düzgün çalışan bir uygulamaya sahip olmaktır. Uygulama düzgün çalışıyorsa, çok az veya hiç hata olmamalıdır. Çok veya ciddi hatalar varsa, muhtemelen test etmiyorsunuz veya testleriniz etkili değil.
Hataları azaltmanın yanı sıra, performans, kullanılabilirlik, erişilebilirlik, sürdürülebilirlik, genişletilebilirlik vb. Gibi başka önlemler de vardır. Bunlar, ne tür bir uygulama oluşturduğunuza, işletmeye, son kullanıcıya vb.
Tüm bunlar benim kişisel deneyimime ve araştırmamın yanı sıra Ham Vocke tarafından yapılan UI Testleri üzerine harika bir yazıya dayanıyor .