Meta TestGen-LLM

Cahit Barkin Ozer
10 min readMar 8, 2025

--

Meta’nın LLM’leri Kullanılarak Birim Testlerini Otomatik İyileştirdikleri makaleyi inceliyoruz.

Öz

Bu makale, mevcut insan yazımı testleri otomatik olarak iyileştirmek için Büyük Dil Modellerini (LLM’ler) kullanan Meta’nın TestGen-LLM aracını tanımlamaktadır. TestGen-LLM, oluşturduğu test sınıflarının orijinal test paketine göre ölçülebilir bir iyileşme sağladığını garanti eden bir dizi filtreyi başarıyla geçtiğini doğrulamaktadır; böylece LLM halüsinasyonundan kaynaklanan sorunları ortadan kaldırdığını iddia eder. TestGen-LLM’in Instagram ve Facebook platformları için Meta test-a-thon’larındaki uygulaması anlatılmaktadır. Instagram’ın Reels ve Stories ürünlerinde yapılan bir değerlendirmede, TestGen-LLM’in test senaryolarının %75'i doğru şekilde oluşturmuştur, %57'si güvenilir bir şekilde geçmiş ve %25'i kapsamı (coverage) artırmıştır. Meta’nın Instagram ve Facebook test-a-thon’ları sırasında, bu araç uygulandığı tüm sınıfların %11,5'ini iyileştirmiş ve önerilerin %73'ü Meta yazılım mühendisleri tarafından üretim dağıtımına kabul edilmiştir. Yazarlar bu çalışmanın endüstriyel ölçekte LLM ile üretilen kodun, bu tür kod iyileştirme güvenceleriyle desteklenen ilk rapor olduğuna inanmaktadırlar.

Giriş

TestGen-LLM adında, Meta’nın Büyük Dil Modellerini (LLMs) kullanarak ek test senaryoları oluşturan ve Android test sınıflarını geliştiren otomatikleştirilmiş bir araç geliştirilmiştir. İnsan tarafından yazılan Kotlin testlerini genişleterek atlanan senaryoları kapsayacak ve kapsamı artıracak şekilde geliştirmektedir. Diğer LLM tabanlı araçlardan farklı olarak, TestGen-LLM, “Garantili Çevrimdışı LLM Tabanlı Yazılım Mühendisliği” olarak yazılım mühendisliği iş akışlarına entegre olur ve gerileme olmadan tam teşekküllü, doğrulanabilir iyileştirmeler sağlar. Bir filtreleme işlemi güvenilir olmayan test senaryolarını ortadan kaldırır, LLM’lerin, istemlerin ve parametrelerin değerlendirilmesine olanak tanırken, öneriler için toplu öğrenmeyi de destekler. TestGen-LLM iki amaca hizmet eder: Değerlendirme: Farklı LLM’lerin, istemlerin ve hiper-parametrelerin ölçülebilir kod iyileştirmeleri üzerindeki etkisini değerlendirir. Dağıtım: Mevcut davranışta gerileme olmadan, garantili iyileştirmelerle, ayrıntılı dokümantasyonla test sınıflarının otomasyonunu sağlar.

Bu yapı 2023 yılında Meta’da test-a-thon gibi faaliyetleri destekleyerek Instagram ve Facebook testlerini geliştirmede kullanılmıştır. Gözlemlenen temel katkılar şunlardır: Endüstriyel üretim sistemlerinde Garantili LLMSE’nin ilk örneğidir. Değerlendirme, üretilen testlerin %75'inin doğru şekilde inşa edildiğini, %57'sinin güvenilir bir şekilde geçtiğini ve %25'inin kapsamı artırdığını göstermiştir. Dağıtım sonuçları: Test sınıflarının %10'unu iyileştirilmiş ve değişikliklerin %73'ü geliştiriciler tarafından kabul edilmiştir.

TestGen LLM Sistemi

Şekil 1: TestGen-LLM’in üst düzey mimarisi (Assured Offline LLMSE örneği).

TestGen-LLM, dil modellerinden gelen aday çözümlere üç anlamsal filtre uygulayarak çıktılarının güvenilirliğini sağlar. İlk filtre, kodun başarıyla derlenip derlenmediğini kontrol eder; eğer derlenmezse bu çözüm elenir. İkinci filtre testleri çalıştırır ve ilk çalıştırmada başarısız olanları, yanlış iddiaları önlemek ve regresyon testleri için kullanılabilirliği sağlamak amacıyla eler. Üçüncü filtre ise “sıkıntılı” (flaky) testleri ortadan kaldırmak için bu testleri birden fazla kez yeniden çalıştırır ve yalnızca sürekli başarılı olanları korur. Son olarak, kapsam filtresi kapsama katkıda bulunmayan testleri kaldırarak yalnızca anlamlı ve gereksiz olmayan testlerin kalmasını sağlar.

Ana Avantajlar:

  • Ölçülebilir İyileşme: TestGen-LLM, özellikle sınır durumlar için test kapsamını artıran değişikliklerin kesin metriklerini sağlar.
  • Doğrulanabilir Regresyon Garantisi: Mevcut testleri değiştirmeden onları genişleterek hiçbir gerilemenin meydana gelmemesini sağlar.
  • Toplu Yaklaşım: Birden fazla LLM ve prompt’u birleştirerek sonuçları geliştirir ve farklı güçlü yanları kullanarak maksimum test senaryosu keşfi sağlar.
  • İnsanların yerine değil yanına konumlanır: İnsan uzmanlığını tamamlayarak var olan kod/testleri iyileştirir ve mühendisleri yerine geçmez, LLM’lere aşırı bağımlılık endişelerini giderir.
  • Sınırlı Token Pencerelerini Yönetir: Küçük token sınırlarında bile etkilidir çünkü genellikle test altındaki koddan daha küçük olan test sınıflarını genişletmeye odaklanır.

TestGen LLM Dağıtımı

Meta gibi büyük şirketlerde yeni teknolojiler, geliştirme sonrası hemen ölçekli olarak dağıtılamaz. Tam ölçekli dağıtım öncesinde deneyim kazanmak için kontrollü bir ortamda Minimal Kullanılabilir Ürün (MVP) ile başlangıçta dikkatli denemeler ve tedbirli dağıtım yapmak esastır. Küçük sorunlar ölçek büyüdüğünde büyütülebilir, bu nedenle kademeli ve artımlı dağıtım çok önemlidir. Süreç, küçük ölçekli sıkı kontrollü denemelerle başlar ve geri bildirimler ve yinelemelerle MVP’nin olgun bir araç haline gelmesi sağlanır. İlk Deneme TestGen-LLM’in ilk sürümü, sekiz fark (diff) oluşturularak ve bunları Meta’nın kod inceleme sistemine sunarak denenmiştir.

Ana dersler şunlardır:

  • Bireysel Test Garantileri: Mühendisler, test sınıfı başına değil, her bir test durumu başına garanti konusunda değer bulmuşlardır. MVP, her bir test durumunun kapsama benzersiz bir şekilde katkıda bulunmasını sağlayacak şekilde güncellenmiştir.
  • Detaylı Kapsama Bilgileri: Mühendisler her dosya için daha spesifik kapsam detayları talep etmişlerdir. TestGen-LLM, kapsamlı kapsam raporları sunacak şekilde güncellenmiştir.

Instagram Test-a-thon Kasım 2023

Tablo 1: Kasım 2023'te gerçekleştirilen İlk Instagram Test-a-thon’unun sonuçları. İnsan test yazarları, üzerinde çalıştıkları ürün bileşenine göre adlandırılır. TestGenLLM aracı, insan-rekabetçi katma değerini göstererek genel olarak altıncı sıraya yerleşmiştir.

Kasım 2023'te Meta, yazılım testi için ek test senaryoları oluşturmaya yönelik tasarlanmış bir araç olan TestGen-LLM’in etkinliğini değerlendirmek amacıyla Instagram’da bir ‘test-a-thon’ düzenlemiştir. Etkinlik, 15 Kasım’dan 20 Kasım’a kadar sürmüş ve 36 mühendis, yakın zamanda yeniden düzenlenmiş Instagram ürünleri için test yazmaya odaklanmışlardır.

İlk Kalibrasyon: Tam dağıtımdan önce, bir mühendis TestGen-LLM’i belirli bir bileşen üzerinde test etmiştir. Araç, üç fark (test sınıfı uzantısı) oluşturmuş ve bunların hepsi kabul edilebilir bulunmuştur. Bu başarılı deneme, aracın test-a-thon sırasında kullanılmasını sağlamıştır.

Test Sınıfı Hedefleme: Mühendisler, belirli dizinler için farklar göndermiş ve TestGen-LLM bu dizinlerdeki test sınıflarını otomatik olarak genişletmiştir; Böylece mevcut kodlama stilleri ve derleme kurallarıyla tutarlılık sağlanmıştır. Bu yaklaşım, mevcut testlerin ötesinde ek kapsama ölçmek için yardımcı olmuştur.

Fark-Zaman Dağıtımı: TestGen-LLM, ‘fark-zaman’ dağıtım moduna entegre edilmiştir; Burada mühendisler ilgili farkları gönderdikçe test önerileri yapılır hale gelmiştir. Bu yöntem, daha önceki önerilere göre daha etkili olmuştur çünkü mühendisler, testleri değerlendirmek için daha iyi bağlam sahibiptirler.

Sonuçlar:

Oluşturulan Farklar: TestGen-LLM 17 fark oluşturmuştur; bunların 16'sı kabul edilmiş ve bir tanesi eksik iddialar nedeniyle terk edilmiştir.

Kapsama İyileştirmeleri:

En büyük iyileşme: Daha önce kapsanmamış bir yöntem kapsanmış, 28 yeni dosya için kapsam eklenmiş, 13 dosyada kısmi kapsamı genişletti ve 3 A/B test kapısı bekçisi kapsamıştır.

En küçük iyileşme: Kısmen kapsanan bir dosyada tek bir satır daha kapsanmıştır.

Üretkenlik Karşılaştırması: TestGen-LLM, üretilen test sayısına göre 36 mühendis arasında altıncı sırada yer almıştır. Her test durumunu ayrı bir fark olarak göndermiş, bu da onu farklar açısından daha üretken göstermiştir ancak asıl inşa edilen test durumları açısından eşit kalmıştır.

Satır Kapsaması: Bir test durumu, çarpık sonuçlar doğurarak 1.326 satırı kapsamıştır. Ancak, medyan ek kapsanan satır sayısı test başına 2,5‘dur ve bu gerçekçi beklentileri yansıtmıştır.

Dil Modellerinin ve İpuçlarının Değerlendirilmesi

Kasım ayındaki Instagram test-a-thon’u, TestGen-LLM’in umut verici bir araç olduğunu göstermiştir; oluşturduğu testler geçerli sınır durumlarını eklemiştir, mühendisler tarafından iyi karşılanmış ve insan çabasına kıyasla iyi performans sergilemiştir. Ancak, daha geniş dağıtımdan önce kullanım kolaylığı için varsayılan hiperparametreler belirlenmesi gerekmiştir. Farklı dil modellerini (LLM1 ve LLM2), sıcaklıkları ve ipuçlarını Instagram’ın Reels ve Stories ürünlerinde değerlendirilmiştir; Bu süreçte 86 Kotlin test sınıfı kullanılmıştır.

Ana bulgular: Test sınıflarının %75'inde en az bir yeni test durumu doğru şekilde oluşturulmuştur. %57'sinde güvenilir şekilde derlenen ve geçen bir test durumu bulunmaktadır. Sadece %25'inde satır kapsamını artıran testler bulunmaktadır.

Dört farklı istem (prompt) test edilmiştir: extend_coverage (en etkili), corner_cases, extend_test ve statement_to_complete (en az etkili). LLM2, LLM1'i geride bırakmıştır; dosyaların %19'unda test bulurken LLM1 %15 oranında bulmuştur. En iyi sonuçlar sıfır sıcaklık (temperature) ayarından gelmiştir, ancak farklılıklar küçüktür.

Tablo 2: Aralık 2023 Instagram ve Facebook uygulama test maratonları için dağıtımda kullanılan dört temel istem.

Bu bulgulara dayanarak, TestGen-LLM LLM2, sıfır sıcaklık ve extend_coverage istemi varsayılanlarıyla dağıtılmıştır. Kullanıcılar yine de bu ayarları özelleştirebilir ve her iki modelden gelen sonuçları birleştirme seçeneğini kullanabilecek şekilde bir sistem hazırlanmıştır.

Şekil 2: Tablo 2'deki dört komut istemi stratejisi ve LLM1 ve LLM2 olmak üzere iki dil modeli kullanılarak Reels ve Hikayeler ürünleri için Instagram bileşenleri üzerindeki Deneysel Çalışmadan elde edilen filtreleme süreci sonuçlarını (tüm test vakalarının yüzdeleri olarak) gösteren Sankey diyagramı.

TestGen-LLM Yalnızca Instagram Test-a-thon Aralik 2023'te Dağıtımı

18–20 Aralık 2023 tarihleri arasında, geliştirilmiş TestGen-LLM aracı Kasım ayında yapılan bir test-a-thon sırasında güncellenen dizinler üzerinde kullanılmıştır. Bu dizinler, yakın zamanda insanlar tarafından yapılan geliştirmeler nedeniyle seçilmiştir ve önceki test çabalarını iyileştirme konusunda bir zorluk teşkil etmiştir. TestGen-LLM, insan müdahalesi olmadan otomatik olarak çalışmış ve inceleme için 42 fark (diff) üretmiştir: Bunların 36 tanesi kabul edilmiş, 4 tanesi reddedilmiş/terk edilmiştir ve 2 tanesi önemsiz dosyaları kapsadığı için geri çekilmiştir. Reddedilen öneriler, önemsiz yöntemleri test etmekten kaynaklanmıştır, ‘test başına tek sorumluluk’ ilkesini ihlal edilmiş ya da onaylamaları eksiktir. Aralık 2023’te Facebook’da daha geniş çaplı bir dağıtımda, TestGen-LLM, mühendislere herhangi bir ön eğitim veya bağlam vermeden otomatik olarak 280 fark gönderilmiştir. Sonuçlar göstermiştir ki tüm farkların yüzde 50'den fazlası kabul edilmiştir ve bu oran incelenenler arasında neredeyse yüzde 70'e yükselmiştir: 144 kabul edilme, 64 reddedilme/terk edilme, 61 incelemeye alınmama ve 11 tane geri çekilme mevcuttur. Bu durum, mühendislerin LLM tarafından oluşturulan testlere verdikleri yanıtlar hakkında gerçekçi bir değerlendirme sağlamıştır.

Dağıtımdan Elde Edilen Nicel Sonuçlar

Tablo 3: İki farklı platform için sonuçlar. Teknoloji başlangıçta Meta içindeki Instagram Ürün Performansı Organizasyonu tarafından geliştirilmiştir, dolayısıyla genel deneme sayısı daha fazladır. Facebook platformu için en yüksek başarı oranı sağlanmıştır, Instagram’a kıyasla Facebook için 10 kat daha fazla insan tarafından yazılmış test vakası örneği olmasından kaynaklanıyor olabilir.
Tablo 4: Farklı sıcaklık ayarları için sonuçlar. İlk deneylerden sonra, varsayılan olarak sıfır seçildi, dolayısıyla genel deneme sayısı çok daha fazladır.
Tablo 5: İki farklı LLM için sonuçlar. İlk yürütmeden sonra LLM2 varsayılan olarak seçildi, dolayısıyla genel deneme sayısı daha fazladır.
Tablo 6: İki farklı platform ve LLM’in sonuçları.

Bu bölüm, TestGen–LLM’nin Kasım ve Aralık 2023 tarihlerinde Facebook ve Instagram uygulama test-a-thon’larında dağıtılmasının sonuçlarını özetlemektedir. Üç iterasyon boyunca, araç 1.979 test sınıfına uygulanmış ve bunlardan 196'sını (%10 civarı) başarıyla geliştirmiştir. Geliştiriciler, bu iyileştirmelerin %73'ünü kabul etmişlerdir; bu da otomatik kod iyileştirme sistemi için umut verici bir sonuçtur.

Tablo 3, her iki platformda da test senaryosu oluşturma için benzer başarı oranlarını göstermektedir; ancak Facebook’un daha fazla eğitim verisi olduğundan dolayı biraz daha yüksek olduğu düşünülmektedir. Tablo 4, farklı dil modelleri ve sıcaklık ayarları arasındaki performansı karşılaştırmaktadır; sıcaklık değeri 0.4 iyi sonuçlar vermiştir, ancak örnek büyüklüğü farklılıkları ve artımlı dağıtım zorlukları yorumlamayı karmaşık hale getirmektedir. Kapsam artışı logaritmiktir, bu da dağıtım ilerledikçe daha fazla kazanım elde etmeyi zorlaştırmaktadır. Son olarak, Tablolar 5 ve 6, varsayılan model olan LLM2'nin genel olarak daha iyi performans gösterdiğini, özellikle de daha çok insan tarafından yazılan Kotlin testleri bulunan Facebook’da olduğunu ortaya koymaktadır.

Dağıtımdan Nitel Gözlemler

Bu bölüm, TestGen-LLM’yi geliştirmek için anahtar içgörüler ve gelecekteki yönler üzerinde durmakta, özellikle statik analizi dil modeli çıkarımıyla birleştirme noktasında odaklanmaktadır.

Dört ana alan belirlenmiştir:

  • LLM ‘Kendini Kopyalama’: LLM’ler, deterministik örnekleme nedeniyle (örneğin, sıfır sıcaklık) aynı istem için neredeyse özdeş testler üretme eğilimindedir. Çoğaltık testleri sözdizimsel eşitlik kontrolü ile kaldırmak için bir filtre eklendi ve anlamsal benzerlik tespiti bu özelliği daha da geliştirebilir.
  • Nüanslı Kapsam Raporlama: TestGen-LLM bazen sınanan sınıfların dışındaki kod parçaları için kapsamı artırabilir. Otomatik analiz, bunun değerli olup olmadığını veya yetersiz taklit nesnelerinden kaynaklanıp kaynaklanmadığını belirleyebilir. Gelecekteki adımlar, oluşturulan testlerin rolünü açıklığa kavuşturmak için bu durumları gözden geçirenlere işaret etmeyi içerir.
  • Test İhtiyacını Vurgulama: Bazı oluşturulan testler yer tutucular içerse de (örneğin, “TODO”), daha önce test edilmemiş işlevleri örtük bir orakül kullanarak kapsayarak değer sağlamışlardır (hiçbir istisna fırlatılmaması). Bu eksik testler, insan testçiler için şablon görevi görebilir ve sıfırdan test yazmaya kıyasla çabayı azaltabilir.
  • Yeniden İsteme: Yeni testler bir yöntemi kısmen kapsadığında, TestGen-LLM otomatik olarak tam kapsamı sağlamak için LLM’yi yeniden istemelidir. Başarısız olursa, kısmi testi başlangıç noktası olarak kullanan mühendislere uyarıda bulunmalıdır.

İlgili Çalışmalar

Bu makale, Büyük Dil Modellerinin (LLM’lerin) yazılım testlerini geliştirme konusunda kullanımını araştırmaktadır; özellikle varolan test senaryolarını genişletirken ölçülebilir kalite sağlama ve gerilemelere engel olmayı amaçlamaktadır. Önceki çalışmalar LLM tabanlı test oluşturma popülaritesini doğrulasa da, bu çalışma yeni bir uygulama olan Güvence Altında LLM Tabanlı Yazılım Mühendisliği (Assured LLMSE) tanıtmakta ve Meta’da Facebook ve Instagram için dağıtımını raporlamaktadır. Bu, Assured LLMSE’nin ilk endüstriyel kullanımıdır.

Mevcut araştırmalar, LLM tarafından üretilen test kapsamlarında büyük değişkenlik olduğunu göstermektedir; sistem boyutuna ve karmaşıklığına bağlı olarak %2 ila %80 arasında değişmektedir. Bulgularımız önceki sonuçlarla uyumludur: oluşturulan Kotlin testlerinin yaklaşık %57'si çalıştırılabilirken, %25'i kapsamı artırmıştır. Bu, ChatGPT veya TeCo gibi son dönem kıyaslamalarından daha iyidir. Önerilen araç, TestGen-LLM, LLM’leri aday testleri filtreleyip rafine eden hibrit bir yazılım mühendisliği sürecine entegre eder, böylece kötü çıktıları önlemiş olur. Geleneksel test yöntemlerini LLM destekli kod oluşturma ile birleştirir ve Genetik İyileştirme ve otomatik onarma tekniklerinden esinlenir. Daha önceki yaklaşımlar genetik programlamaya veya arama tabanlı yöntemlere dayansa da, TestGen-LLM, oluşturulan test iyileştirmelerini değerlendirmek için bir LLM topluluğu kullanır. Tasarım esnektir ve Meta’nın dahili modelleri ile LLaMA ve CodeLlama gibi halka açık modelleri destekler. Kodu “genetik malzeme” olarak ele alarak karıştırıp eşleştiren TestGen-LLM, geliştirilmiş testlerin sıkı anlamsal kriterleri karşıladığını garanti ederek AI destekli yazılım testlerindeki en son teknolojiyi ilerletir. Gelecekteki Çalışmalar ve Açık Sorunlar Assured LLMSE ile otomatik testlerin geliştirilmesinde birkaç açık sorun bulunmaktadır.

İşte gelecekte çalışılması gereken üç ana alan:

  • İyileştirmeyi ölçmenin daha iyi yolları: Şu anda, test iyileştirmeyi ölçmek için satır kapsamını basit bir şekilde kullanıyoruz, ancak bu mükemmel değil. Kriterleri yalnızca testlerin derlenmesini ve geçmesini gerektirecek şekilde gevşettiğimizde, başarı oranları %25'ten %57'ye yükselmiştir. Gelecekteki çalışmalar, daha etkili ancak hesaplama açısından pahalı olan mutasyon kapsamı gibi daha iyi metrikleri keşfedecektir.
  • Olasılık dağılımı çözünürlüğünü özelleştirme: Dil modelleri, genellikle “sıcaklık” parametresiyle kontrol edilen yaratıcılığı etkileyen olasılık dağılımlarına göre kod üretir. Mevcut çalışmalar çoğunlukla varsayılan ayarları kullanırken, bu modellerin kod üretme şeklini optimize etmek için uygulamaya özel yöntemlere ihtiyacımız var.
  • ‘Moda Takipçi’ davranışını yönetme: LLM’ler mevcut kodlama stillerini taklit eder, bu genellikle tutarlılık açısından faydalıdır (örneğin, isimlendirme kurallarını veya iddia stillerini takip etmek). Ancak, eski veya kullanımdan kaldırılmış uygulamaları da tekrarlayabilirler. Gelecekteki çalışmalar, modern kodlama standartlarının izlenmesini sağlamak için komut mühendisliği, linterler ve statik analiz kullanarak bu sorunu ele alacaktır.

Sonuç

Bu makale, Meta’da üretimde test senaryoları oluşturmak için kullanılan TestGen-LLM’i tanıtmıştır. Makale, TestGen-LLM’in kavram kanıtından, minimum kullanılabilir ürüne ve dağıtılmış test desteği aracına evrimini anlatmıştır. TestGen-LLM’in ilgi çekici birincil özelliği, mevcut kod tabanını iyileştirdiğini garanti ettiği test senaryolarını insan incelemesi için sunmasıdır; bu da LLM halüsinasyonlarına karşı koruma şeklidir. Buna göre, bu, Endüstride Ölçekli Güvence Altında Büyük Dil Modeli Yazılım Mühendisliğinin ilk raporu olarak kabul edilmektedir

Kaynak

Alshahwan, N., Chheda, J., Finegenova, A., Gokkaya, B., Harman, M., Harper, I., Marginean, A., Sengupta, S., & Wang, E. (2024, February 14). Automated unit test improvement using large language models. https://arxiv.org/abs/2402.09171

--

--

Cahit Barkin Ozer
Cahit Barkin Ozer

Written by Cahit Barkin Ozer

Üretken YZ başta olmak üzere teknoloji alanındaki yenilikleri öğrenip sizlerle paylaşıyorum. Youtube Kanalım: https://www.youtube.com/@cbarkinozer

No responses yet