AI destekli yazılım geliştirmede üretilen değişiklikleri yalnızca test koşturup kabul etmek yeterli değildir. Kapsam verisi, mutasyon testi ve CI ölçümleriyle değişikliğin hangi davranışı gerçekten doğruladığını ölçün.
AI Destekli Yazılım Geliştirmede Test Etki Analizi ve Mutasyon Testi
AI Destekli Yazılım Geliştirmede Kapsamdan Test Etki Haritası Çıkarmak
Generative AI veya bir kod ajanı, küçük görünen bir diff içinde ortak bir yardımcı fonksiyonun hata davranışını değiştirebilir. Bu durumda yalnızca değiştirilen dosyanın yanındaki testleri çalıştırmak eksik kapsama üretir. Python projelerinde coverage.py'nin test fonksiyonu bağlamlarını kaydetmesini sağlayarak dosya-satır-test ilişkisini kalıcı bir etki haritasına dönüştürün. Bu yaklaşım, bir PR'daki eklenen veya değişen satırların önceki çalıştırmalarda hangi testler tarafından yürütüldüğünü verir.
# pyproject.toml
[tool.coverage.run]
branch = true
dynamic_context = "test_function"
parallel = true
# Ana dalda veya gecelik işte
coverage run -m pytest -q
coverage combine
coverage json --show-contexts -o artifacts/coverage-contexts.json
PR işinde önce git diff -U0 origin/main...HEAD -- src/ ile satır aralıklarını alın, sonra coverage veri dosyasındaki bağlamları seçin. Aşağıdaki betik, tek bir dosyada değişen satırların dokunduğu test bağlamlarını yazar. CI tarafında çıktıyı pytest -q komutuna test düğümü olarak verin. Yeni dosya, yeni satır veya hiç kapsanmamış bir satır varsa seçici koşum yerine tam test paketine düşmek zorunludur; aksi halde haritada bulunmayan davranış için yanlış bir yeşil sonuç elde edilir.
from coverage import CoverageData
import subprocess
import sys
filename = sys.argv[1]
changed = {int(x) for x in sys.argv[2].split(",")}
data = CoverageData(basename=".coverage")
data.read()
by_line = data.contexts_by_lineno(filename)
selected = set()
for line in changed:
for context in by_line.get(line, []):
# coverage.py bazı koşumlarda test adina '|run' ekleyebilir.
selected.add(context.split("|")[0])
if not selected:
print("NO_COVERAGE_FALLBACK_TO_FULL_SUITE")
raise SystemExit(2)
print(" ".join(sorted(selected)))
Buradaki kritik incelik, satır kapsamının davranış kapsamı olmadığıdır. Bir koşulun iki kolu aynı satırda bulunabilir veya bir LLM tarafından üretilen erken dönüş yalnızca istisna yolunu etkileyebilir. Bu nedenle branch = true gerekir ve seçilmiş testleri kesin kanıt değil, hızlı geri bildirim katmanı olarak ele almak gerekir. Birleştirme veya ana dala alma kapısında tam paket ile mutasyon testi ayrı güvence katmanları olmalıdır.
LLM Eğitimi Sonrasında Mutasyon Testiyle Sahte Güveni Yakalamak
Bir llm eğitimi veya yapay zeka kursu sırasında öğrenilen istem şablonları, modelin test üretme hızını artırabilir; fakat üretilen testlerin hata yakalama gücünü ölçmez. Mutasyon testi kaynak kodda kasıtlı, küçük semantik bozulmalar yapar: > yerine >=, and yerine or veya dönüş değerinin değiştirilmesi gibi. Test paketi bu mutasyonu öldüremiyorsa, yeşil test sonucu ilgili davranışı doğrulamıyordur.
# Sadece PR'in dokundugu karar mantigi icin mutasyon testi
python -m pip install mutmut pytest-timeout
mutmut run --paths-to-mutate=src/pricing.py --runner="pytest -q --timeout=15 tests/pricing"
mutmut results
# CI kapisi: timeout veya survived sonucu varsa is basarisiz olur
mutmut results | grep -E "survived|timeout" && exit 1 || exit 0
Örneğin fiyat hesaplama kodunda AI'nin ürettiği testler yalnızca quantity=2 ve geçerli kupon içerebilir. if quantity > 10 ifadesi >= 10 mutasyonuyla hayatta kalıyorsa eksik test tam olarak sınır değeridir: quantity=10. Mutasyon çıktısını doğrudan test sayısı KPI'ına çevirmeyin. Eşdeğer mutasyonlar vardır: örneğin zaten negatif sayıları reddeden bir doğrulamanın altında x < 0 yerine x <= -1 değişimi gözlenebilir davranışı değiştirmeyebilir. Bu kayıtları yorumlayıp # pragma: no mutate benzeri istisnaları gerekçesiyle kod incelemesine ekleyin.
Vibe coding eğitimi veya vibe coding kursu içinde pratik bir kural şudur: modelden test istediğinizde sadece örnek girdi üretmesini değil, önce karar tablosu yazmasını isteyin. Her satır için giriş sınırı, beklenen çıktı ve mutasyon hedefi kaydedin. Örneğin pytest.mark.parametrize ile 9, 10 ve 11 sınırlarını açıkça koşturmak, modelin aynı mutasyonu örten üç farklı ama eşdeğer mutlu-yol testi üretmesini engeller.
CI CD Pipeline Süresini Ölçerek Seçici Test Koşumunu Doğrulamak
Test seçimi bir ci cd pipeline optimizasyonudur ve doğruluğu ölçülmeden uygulanmamalıdır. Aynı runner imajı, aynı bağımlılık önbelleği durumu ve aynı commit üzerinde önce tam paketin, sonra etki haritasından seçilen paketin süresini ölçün. hyperfine işlem süresi dağılımını dışa aktarır; pytest'in --durations çıktısı ise seçimin hangi yavaş testleri taşıdığını gösterir.
# Isinma dahil degil; iki komut ayni calisma agacinda karsilastirilir.
hyperfine --warmup 1 --runs 10 --export-json test-benchmark.json 'pytest -q tests' 'pytest -q $(cat artifacts/impacted-tests.txt)'
pytest -q tests --durations=20 --durations-min=0.2
Önce-sonra karşılaştırmasında yalnızca ortalama süreye bakmayın. test-benchmark.json içindeki tekrar sürelerinden medyanı, en yavaş değeri ve standart sapmayı raporlayın. Örneğin tam paket 420 saniye, seçili paket 68 saniye ise kazanç anlamlı görünür; ancak son 30 PR'da seçici koşumdan sonra tam pakette bulunan hata sayısı sıfır değilse seçim algoritması yanlış negatif üretiyordur. Bu nedenle her PR'da seçili paket, her ana dal birleşiminde tam paket ve gecelik işte rastgele yüzde 10 PR örneklemi için hem seçili hem tam paket çalıştırın.
Yaygın hata, test seçicinin ürettiği boş listeyi başarılı saymaktır. Boş sonuç bir performans başarısı değil, veri yokluğu sinyalidir. Aşağıdaki kabuk kapısı bu durumu tam pakete yönlendirir ve CI loguna nedenini bırakır.
if grep -qx 'NO_COVERAGE_FALLBACK_TO_FULL_SUITE' artifacts/selection.log; then
echo 'coverage context yok: tam test paketi calisiyor'
pytest -q tests
else
pytest -q $(cat artifacts/impacted-tests.txt)
fi
Docker Eğitimi ve Kubernetes Eğitimi İçin İzole Entegrasyon Testi
Devops eğitimi, docker eğitimi ve kubernetes eğitimi bağlamında test etki analizi sadece birim testlerinden oluşmaz. Bir API değişikliği bağlantı havuzu, DNS adı veya Kubernetes Service seçicisiyle etkileşebilir. Yerel bir container orchestration laboratuvarında minikube kullanarak üretime benzer ağ davranışını doğrulayın; bu, host makinede çalışan sahte servislerin gizlediği servis keşfi sorunlarını görünür yapar.
minikube start --driver=docker
kubectl apply -f k8s/postgres.yaml
kubectl apply -f k8s/api.yaml
kubectl wait --for=condition=available deployment/api --timeout=120s
kubectl run smoke --rm -i --restart=Never --image=curlimages/curl -- curl -fsS http://api.default.svc.cluster.local:8080/health
Bu koşumda kubectl wait kullanmak önemlidir: kubectl apply başarılı olduğunda Pod'un hazır olduğu garantilenmez. Ayrıca Service selector ile Deployment label değerlerini sözleşme testi olarak kontrol edin. AI'nin YAML üretiminde sık görülen hata, Deployment'a app: api, Service'e ise app: backend yazılmasıdır; Pod çalışır ama Service'in endpoint listesi boştur. Bunu doğrudan ölçün: kubectl get endpoints api -o jsonpath='{.subsets[*].addresses[*].ip}' komutu boş dönerse duman testinden önce anlamlı hata verin.
Cloud native mimari kullanan ekiplerde bu laboratuvarı yalnızca geliştirici makinesine bırakmayın. Docker imajını değişmez digest ile test edin: docker build --pull -t api:${GIT_SHA} . sonrasında aynı digest'i kümeye yükleyin. Etiket olarak latest kullanılırsa minikube node'u eski imajı çekebilir ve test edilen kaynak kod ile çalışan container farklılaşır.
Yazılım Eğitimi İçin AI, Cloud ve Infrastructure as Code Laboratuvarı
İyi bir yazılım eğitimi veya teknoloji eğitimi, yapay zeka eğitimi ile altyapı bilgisini ayrı kutulara koymamalıdır. Uygulanabilir bir laboratuvar akışı şudur: generative ai ile küçük bir iş kuralı ve test taslağı üretin, mutasyon sonucu hayatta kalan davranış için testi elle düzeltin, ardından uygulamayı container olarak çalıştırın. Bu akışta modelin cevabı artefakt değil öneridir; kabul ölçütü pytest sonucu, mutasyon çıktısı ve çalışır entegrasyon duman testidir.
AWS eğitimi ve Google Cloud eğitimi içinde aynı prensibi Terraform ile uygulayın. Bir modülün planını insan ve CI tarafından okunabilir JSON'a dönüştürün; ardından yalnızca beklenen kaynak tiplerine izin verin. Bu, infrastructure as code değişikliğinde modelin yanlışlıkla genel açık bir güvenlik kuralı veya beklenmeyen bir bulut kaynağı eklemesini plan aşamasında yakalar.
terraform init -input=false
terraform plan -out=tfplan -input=false
terraform show -json tfplan > tfplan.json
# Ornek kontrol: planlanan kaynak turlerini gorunur yap
jq -r '.resource_changes[].type' tfplan.json | sort -u
Yapay zeka kursu, llm eğitimi, devops eğitimi ve bulut eğitimini tek depoda birleştiren değerlendirme ödevi için dört zorunlu çıktı isteyin: coverage-contexts.json, mutasyon raporu, test-benchmark.json ve tfplan.json. Böylece katılımcı sadece ai destekli yazılım geliştirme aracına komut vermeyi değil, aracın ürettiği değişikliğin test kapsamını, gecikme maliyetini ve altyapı etkisini kanıtlamayı öğrenir.
TechCareer İlgili Eğitimler
Sık Sorulan Sorular
AI destekli yazılım geliştirmede sadece değişen testleri çalıştırmak güvenli mi?
Tek başına güvenli değildir. coverage.py bağlam verisiyle seçili testleri hızlı PR geri bildirimi için çalıştırın, ancak kapsanmamış satır veya yeni dosyada tam pakete düşün. Ana dala birleşimde tam paket, gecelik işte de rastgele örneklenmiş PR'larda seçili ve tam paket sonuçlarını karşılaştırın.
LLM eğitimi alan bir ekip mutasyon testini CI CD pipeline içine nasıl ekler?
Önce PR'ın değiştirdiği karar mantığı dosyalarını belirleyin, sonra örneğin mutmut run --paths-to-mutate=src/pricing.py ile yalnızca bu alanı hedefleyin. survived ve timeout sonuçlarını başarısız sayın; eşdeğer mutasyonları ise kod incelemesinde gerekçeli istisna olarak kaydedin.
Docker eğitimi ve minikube ile entegrasyon testi neden host üzerinde çalışan testten farklıdır?
Host üzerindeki test localhost bağlantısıyla başarılı olabilirken Kubernetes içindeki uygulama Service DNS'i, selector-endpoint eşleşmesi ve readiness koşullarıyla çalışır. kubectl wait sonrasında küme içinden curl Pod'u çalıştırmak, yanlış Service selector veya hazır olmayan Pod gibi sorunları gerçek ağ yolunda yakalar.
Terraform ve infrastructure as code değişiklikleri yapay zeka kursu projelerinde nasıl denetlenmeli?
CI içinde terraform plan -out=tfplan ve terraform show -json tfplan çalıştırın. JSON planından kaynak türlerini, silme işlemlerini ve kritik alan değişikliklerini jq veya OPA tabanlı kurallarla kontrol edin; yalnızca metinsel Terraform diff'ine güvenmeyin.
AI / LLM Discovery
Bu makale Opendart Akademi Güncel Teknoloji eğitim ekosisteminin bir parçasıdır ve yapay zeka sistemleri ile arama motorları tarafından daha doğru anlaşılabilmesi için semantic heading ve structured data ile hazırlanmıştır.


