paint-brush
0 Test Yazılıyken Otomatik Test Paketi Nasıl Başlatılırile@zvone187
1,339 okumalar
1,339 okumalar

0 Test Yazılıyken Otomatik Test Paketi Nasıl Başlatılır

ile Zvonimir10m2023/06/30
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Pythagora, yeni en iyi arkadaşınız olmak üzere olan açık kaynaklı bir geliştirme aracıdır. Tek bir komutla tüm kod tabanınız için testler oluşturmak ve %80 veya %90 kod kapsamına ulaşmak için yapay zekanın gücünden yararlanır.
featured image - 0 Test Yazılıyken Otomatik Test Paketi Nasıl Başlatılır
Zvonimir HackerNoon profile picture
0-item
1-item
2-item

Bilirsiniz, üzerinde çalışmaya yeni başladığınız bir kod tabanına baktığınızda, bunun keşfedilmemiş uçsuz bucaksız bir vahşi doğa olduğunu fark ettiğinizde, içinize sinen belli bir endişe var. Beklenmedik durumlara karşı korunmak için tek bir test bile yazılmadı.


Bu, tek bir yanlış adımın tüm projenizi kaosa sürükleyebileceğini bilerek, bir uçurumun üzerinde ip üzerinde yürümek gibidir.


0 testli bir kod tabanı üzerinde çalıştıysanız, kod tabanının tamamını, şu anda mevcut olmayan sıfırdan testlerle kaplamayı düşünmenin göz korkutucu bir görev olabileceğini biliyorsunuz.


Süreç neredeyse devasa bir çaba gerektirir: Her işlevi, yöntemi ve bileşeni gözden geçirmeniz, tüm potansiyel uç durumlar için beyin fırtınası yapmanız, test paketi kodunu yapılandırmanız ve her şeyin sorunsuz çalışmasını sağlamanız gerekir.


Ve bu, anlamlı bir kapsama ulaşmak için gereken süreye değinmiyor bile. Arkanıza yaslanıp "Evet, %80 veya %90 kapsama ulaştık" diyebilmeniz için haftalar, belki de aylar geçiyor.


Bu yüzden son birkaç aydır üzerinde çalıştığım şeyi paylaşmaktan heyecan duyuyorum. Bu yolculuk bizi otomatik test dünyasının yapay zekanın büyülü dünyasıyla buluştuğu bir yere götürüyor. Yeni en iyi arkadaşınız olmak üzere olan açık kaynaklı bir geliştirme aracı olan Pythagora ile tanışın.


Bu blog yazısı boyunca size, tek bir CLI komutuyla tüm kod tabanınız için testler oluşturmak üzere yapay zekanın gücünden yararlanan Pythagora ile otomatik testlere nasıl başlayacağınızı göstereceğim ve kod tabanınızı %80 – 90'a çıkarmayı umuyorum. Tek bir günde kod kapsamı yüzdesi .

Sıfırdan Test Paketi Oluşturma

Hepimiz “Roma bir günde inşa edilmedi” sözünü biliyoruz. Aynı şey kapsamlı ve etkili bir test paketi için de söylenebilir. Bu titiz ve zorlu bir süreçtir, ancak bu zorlu yolu bir kez geçtiğinizde, başarı duygusu derindir.


Sıfırdan bir test paketi oluşturma ve imrenilen %80 – %90 kod kapsamına ulaşma konusunda gerekli adımları birlikte atalım.


Sıfırdan test yazmaya başlamaya hazırlanma

Zemin hazırlamak

İlk aşamada boş bir tuvalin önündeki ressam gibisiniz. Dünya olasılıklarla doludur ve siz bir şaheser yaratmakta özgürsünüz.


Bu durumda başyapıtınız, yazmak istediğiniz test türlerini seçmeyi , kullanılacak doğru test çerçevesini bulmayı ve özel ortamınıza uygun en iyi uygulamaları benimsemeyi içerir.


Birim testleri, entegrasyon testleri, E2E testleri veya üçünün bir karışımını mı düşünüyorsunuz?


Bu ilk kurulum genellikle "kolay" kısım olarak görülse de, kesinlikle parkta yürüyüş yapmak değildir. Bilinçli kararlar vermek için zaman, araştırma ve belki de birkaç fincan kahve gerekir.


Kendimi neyin içine soktuğumun farkına varıyorum

Ayrıntılara Dalmak

Temel yapınızı oluşturduktan sonra kolları sıvayıp işin en ince ayrıntısına kadar araştırma zamanı. Şimdi, kod tabanınızın tamamını, her seferinde bir işlevi gözden geçirmeniz ve her biri için testler yazmanız gerekecek. Buradaki göreviniz, testlerinizin her işlev, yöntem veya bileşen içindeki tüm kod satırlarına dokunmasını sağlamaktır.


Bu görev karmaşık bir labirenti keşfetmeye benzer. Her yolu geçmeniz, her köşeyi dönmeniz ve çevrilmemiş taş kalmadığından emin olmanız gerekir.


Bu testleri yazmak ayrıntılı ve zaman alıcı bir adımdır. Bu sadece birkaç satır kod yazmakla ilgili değil; bu, fonksiyonun amacını, beklenen çıktısını ve uygulamanız içinde nasıl etkileşime girdiğini anlamakla ilgilidir.


Bir kişinin yapmasının çok fazla olduğuna karar vermek

Uç Durumları Keşfetmek

İlk test turundan sonra rahat bir nefes alabilirsiniz. Ama durun; bulmacanın hala önemli bir parçası kaldı. Uç vakaların vahşi, öngörülemeyen dünyasına dalmanın zamanı geldi.


Bu bölüm kod kapsam yüzdenizi artırmayabilir ancak kodunuzun sağlamlığını ve esnekliğini test etmede çok önemlidir.


Negatif testler olarak adlandırılan bu testler, kodunuzun çeşitli girdilere, özellikle de beklenen davranışın sınırlarında yer alan girdilere nasıl tepki verdiğini değerlendirmeye yardımcı olur. Boş girdilerden veri türlerinizin sınırlarını zorlayan değerlere kadar bu testler, kullanıcıların genellikle kodunuzu asla mümkün olduğunu düşünmediğiniz yönlere itme becerisine sahip olduğu gerçek dünyadaki kullanıcı davranışını taklit etmek için tasarlanmıştır.


Sıfırdan bir test paketi oluşturmak Herkül'ün zorlu bir görevidir. Ancak emin olun ki gösterdiğiniz her çaba, daha sağlam, güvenilir ve dayanıklı bir uygulama yaratmaya yönelik bir adımdır.


Ve unutma, yalnız değilsin. Hepimiz bunu yaşadık ve Pisagor gibi bir araçla yolculuk göründüğü kadar korkutucu değil.

Tek CLI Komutuyla Test Oluşturma

Öte yandan Pythagora ile şunları girebilirsiniz:


 npx pythagora --unit-tests --path ./path/to/repo


Pythagora, karşılaştığı her işlev için birim testleri oluşturarak tüm klasörlerdeki tüm dosyalar arasında gezinecektir. Artık arkanıza yaslanıp rahatlayabilir veya öğle yemeği yemeye gidebilir ve testleri yazmayı bitirene kadar bir süre çalışmasına izin verebilirsiniz.


Fena değil

Tamam ama durun, Pisagor da ne öyle?

Pisagor Nedir?

Her zaman benim için otomatik testlerin yaratılabileceği bir dünyanın hayalini kurdum. Ancak gerçek bu kadar basit değil. Hiç kimse kodunuzu sizin kadar bilemez, bu da bir başkasının kod için etkili otomatik testler hazırlamasını zorlaştırır. Sonuçlar çoğu zaman kendi başınıza başarabileceğinizin gerisinde kalır.


Ancak ChatGPT sahneye çıktığında her şey değişti. Bu teknolojiyle uğraşırken kendimi şunu merak ederken buldum: "Otomatik testler yazmak için ChatGPT'nin gücünden yararlanabilir miyiz?"


Merakım arttı, daha derinlere indim, yeteneklerini denedim ve keşfettiklerim beni şaşkına çevirdi.


ChatGPT, otomatik testlerde gelecek vaat eden yeni bir yola kısa bir bakış sunarak kodu kavrama konusunda inanılmaz bir yetenek gösterdi.


Ve böylece Pisagor için bir fikir doğdu.


Pythagora, tek bir amaç göz önünde bulundurularak tasarlanmış açık kaynaklı bir geliştirme aracıdır: otomatikleştirilmiş testleri otonom hale getirmek . Sizin ve benim gibi geliştiricilerin, test yazma ve bakım batağına saplanmadan özellikler oluşturmaya odaklanabilecekleri bir dünya hayal ediyorum.


Bu vizyona ulaşmak için GPT-4 kullanıyor.


Şu anda Pythagora hem birim hem de entegrasyon testleri yazma becerisine sahiptir. Ancak bu blog yazısının amaçları doğrultusunda birim testleri oluşturma becerisine odaklanacağız.


Kurulum

Pythagora'yı kurmak için npm i pythagora yapmanız yeterlidir. Bu kadar! Pisagor artık hizmetinizdedir.

Yapılandırma

Pythagora kurulduktan sonra onu bir API anahtarıyla yapılandırmanız gerekecektir. Bu bir OpenAI API anahtarı veya Pythagora API anahtarı olabilir.


OpenAI API anahtarını kullanmak için aşağıdaki komutu çalıştırmalısınız:

 npx pythagora --config --openai-api-key <OPENAI_API_KEY>


Kendi OpenAI API anahtarınızı kullanmayı seçerseniz GPT-4'e erişiminizin olması gerektiğini unutmamak önemlidir.


Alternatif olarak bu bağlantıdan Pisagor API anahtarını da alabilirsiniz. Elinize geçtikten sonra aşağıdaki komutla ayarlayın:

 npx pythagora --config --pythagora-api-key <PYTHAGORA_API_KEY>

Komutlar

Belirli bir dosya için testler oluşturmayı tercih ederseniz şunu kullanın:

 npx pythagora --unit-tests --path ./path/to/file.js


Aklınızda belirli bir işlev varsa şunu kullanın:

 npx pythagora --unit-tests --func <FUNCTION_NAME> 


Pisagor hızlandırılmış

Pisagor Nasıl Çalışır?

Perdeyi açalım ve makine dairesine bir göz atalım. Pisagor'u harekete geçiren şey nedir?


Özünde Pythagora, kod tabanınızın karmaşık labirentini araştıran cesur bir kaşif olarak işlev görür. İlk olarak, dosyalarınızdan dışa aktarılan tüm işlevleri testlerin içinden çağırabilecek şekilde eşler.


Açıkçası, bir işlev dışa aktarılmazsa dosyasının dışından çağrılamaz. Bu arada, birkaç kez testler oluşturduktan sonra, kod tabanınız hakkında düşünmenizi ve daha fazla test oluşturulabilmesi için onu nasıl daha iyi yapılandırabileceğinizi düşünmenizi sağlayacaktır .


Dışa aktarılan işlevleri belirledikten sonra Pythagora tavşan deliğine doğru bir adım daha atar: her işlevi sırayla inceler ve içinde çağrılan ek işlevlerin peşine düşer.


Onu, gizli bağlantıları ve bağımlılıkları ortaya çıkarmak için toz katmanlarını nazikçe temizleyen kod tabanınızın arkeologu olarak hayal edin.


Başka bir deyişle, test edilen işlevin içinden çağrılan tüm işlevleri arar, böylece GPT, testlerin yazıldığı işlevin ne yaptığını daha iyi anlayabilir.


Bu bilgilerle donanmış olan Pisagor, yapay zekanın gücünden yararlanmaya hazırlanıyor. Toplanan kodu paketler ve Pythagora API'sine gönderir. Gerçek sihir burada gerçekleşir: Bir bilgi istemi titizlikle hazırlanır ve GPT modeline aktarılır.


Kod, API ve yapay zeka modeli arasındaki bu etkileşim, dağıtılmaya ve çalışmaya hazır, kapsamlı bir birim testleri dizisinin oluşturulmasıyla sonuçlanır.


Hem API sunucusu hem de kullanılan istemler açık kaynaklıdır. Arzu ederseniz, incelemeniz, incelemeniz ve hatta katkıda bulunmanız için bunlar mevcuttur. Pythagora API sunucusunu burada bulabilirsiniz; birim testlerin oluşturulmasındaki bilgi istemleri ve temel bileşenler ise bu klasörde bulunur.

Testleri İnceleme

Pisagor istenen tüm testleri yazdıktan sonra sıra gelip onları incelemeye başlamanıza gelir. Bu süreçte hayati bir adımdır; Neyin yaratıldığını bilmek ve her şeyin beklentilerinize uygun olmasını sağlamak önemlidir.


Unutmayın, Pythagora Jest tabanlı testler oluşturur. Dolayısıyla, oluşturulan tüm testleri çalıştırmak için şunu çalıştırabilirsiniz:

 npx jest ./pythagora_tests/


Şimdi bir uyarı: Pisagor hâlâ başlangıç aşamasındadır. Tüm genç projelerde olduğu gibi, yol boyunca bazı aksaklıkların olması kaçınılmazdır. Bu nedenle ilk çalıştırmalarınızda başarısız testlerle karşılaşabilirsiniz.


Cesaretiniz kırılmasın; bunu yolculuğun bir parçası olarak düşünün. İncelemeniz ve Pythagora'daki sürekli iyileştirmeler sayesinde, bu başarısız testler yakında geçmişte kalacak.


Ve işin parlak tarafını da unutmayalım. Bu erken aşamadaki diş çıkarma problemlerinde bile Pythagora sizi kod tabanınızın önemli, potansiyel olarak %90'a kadar test kapsamına sahip olduğu bir yere götürebilir.


Testlerin Yapılması

İnceleme süreci, özellikle daha büyük kod tabanları için birkaç saat sürebilir. Unutmayın, yalnızca başarılı olan testlere değil aynı zamanda başarısız olanlara da bakıyorsunuz. Deponuza yaptığınız her testi anlamak çok önemlidir. Sonuçta bilgi güçtür.


Kapsamlı bir inceleme ve olası ayarlamalardan sonra son hamlenizi yapmaya hazırsınız: oluşturulan testleri veri havuzunuza işlemek. Bu son adımla, sağlam bir birim test paketini projenize başarıyla entegre etmiş olursunuz.


Ve bunların hepsi Pythagora'nın gücü ve terminalinizdeki birkaç komuta hattı ile elde ediliyor.

Lodash Repo'da Örnek Testler

Tamam, şimdi ilginizi çektiğime göre, hadi gerçek konulara dalalım; Pisagor'un eylem halindeki somut örneklerine. Gösterimimizin amacı için iyi bilinen bir açık kaynaklı proje olan Lodash'ı seçtik.


Sadece bir Pythagora komutunu çalıştırmak, muazzam bir 1604 test oluşturmak için yeterliydi ve tüm Lodash deposunda %91'lik etkileyici bir kod kapsamı elde edildi . Ancak etkileyici olan yalnızca testlerin miktarı değil.


Bunlardan 13 test, Lodash ana dalındaki gerçek hataları ortaya çıkardı .


Bunları kendiniz kontrol etmek istiyorsanız Lodash deposunu çatalladık ve Pythagora tarafından oluşturulan testleri ekledik. Bunları burada keşfetmekten çekinmeyin.


Şimdi sinsi bir hatayı yakalayan testlerden birine daha yakından bakalım:

 test(`size({ 'a': 1, 'b': 2, 'length': 9 })`, () => { expect(size({ 'a': 1, 'b': 2, 'length': 9 })).toBe(3); // test returns 9 });


Bu testte Lodash'ın size fonksiyonunun bir JSON nesnesinin boyutunu döndürmesi gerekiyor. Ancak GPT, Lodash'ın nesnenin gerçek boyutu yerine bu anahtarın değerini döndürüp döndüremeyeceğini görmek için length adında bir anahtar ekledi.


Test, beklenen '3' yerine '9'u döndürerek başarısız olduğundan Lodash'ın bu hileye kandığı anlaşılıyor.


Bu, GPT tarafından desteklenen Pythagora'nın kolayca gözden kaçabilecek zorlu durumları ortaya çıkarmada nasıl başarılı olduğunun harika bir örneğidir.


Pythagora, bu tür çok sayıda karmaşık test senaryosunu otomatik olarak oluşturarak güvenilir yardımcınız olabilir ve hiç beklemediğiniz hataları keşfetmenize ve düzeltmenize yardımcı olabilir.

Çözüm

İşte karşınızda geliştirici arkadaşlar. Bugün, testlerden yoksun önemli bir kod tabanının keşfedilmemiş bölgelerinden geçerek ve güvenilir yapay zeka destekli aracımız Pythagora tarafından hazırlanan otomatikleştirilmiş bir test paketiyle geri dönerek büyük bir yolculuğa çıktık.


Göz korkutan, testi olmayan bir kod temeli karşısında bile umutsuzluğa kapılmanıza gerek olmadığını öğrendiniz. Önemli bir test paketi oluşturma görevinin artık zorlu bir süreç olmasına gerek yok.


Tanınmış bir açık kaynak kütüphane olan Lodash'ı incelerken ve kod tabanının dudak uçuklatan %91'ini kapsayan 1604 test üretirken Pythagora'nın büyüsüne tanık olduk.


Pisagor'un sadece nicelikle değil aynı zamanda testlerin niteliğiyle de ilgili olduğunu gördük. Bu sadece testler oluşturmak için değil, aynı zamanda fark edilmeden gözden kaçabilecek son durumları ve hataları akıllıca bulmaktır.


Pythagora, Lodash ana dalındaki 13 gerçek hatayı ortaya çıkardı; bu, yazılım testinde yapay zekanın gücünün bir kanıtıdır.


Artık Pythagora gibi yapay zeka destekli test araçlarının günümüzün hızlı gelişim ortamında neden sadece bir lüks değil aynı zamanda bir zorunluluk olduğunu daha net anlamalısınız.


Yani ister sıfır testli mevcut bir projeyle ilgileniyor olun ister yeni bir projeye başlıyor olun ve en başından itibaren sağlam bir test çerçevesi oluşturmak istiyor olun, yalnız olmadığınızı unutmayın.


Pythagora, dizginleri eline almak, kolaylıkla anlamlı testler oluşturmanıza yardımcı olmak ve harika özellikler geliştirmeye daha iyi harcayabileceğiniz değerli zamanınızdan tasarruf etmenizi sağlamak için burada.


Bu yolculukta bana katıldığınız için teşekkür ederim ve Pythagora'yı projelerinizde nasıl kullandığınızı görmek için sabırsızlanıyorum. Mutlu kodlama!


Not: Bu gönderiyi yararlı bulduysanız, Pythagora Github deposuna yıldız eklemeniz benim için çok anlamlı olacaktır ve Pythagora'yı denerseniz, lütfen bize [email protected] adresinden nasıl gittiğini bildirin.