Bu sayfada
- Kısaca: Bir kez bağlan, tarifi çıkar, sonra çevrimdışı üret
- 1. Bir kez bağlan ve profil çıkar
- 2. Bağlantıyı kes
- 3. İstediğin kadar, istediğin yerde üret
- Yapay zekâ nerede devreye giriyor?
- CTO’ların sorduğu sorular
- “Üretim verisi ağımızdan çıkıyor mu?”
- “Peki profil dosyasının kendisi veri sızdırabilir mi?”
- “Veri gerçekten hata yakalayacak kadar gerçekçi mi?”
- “Belirli bir iş senaryosunu nasıl test ederiz?”
- “Yükleme sırasında yabancı anahtar hataları alır mıyız?”
- “CI hattımızda kullanabilir miyiz?”
- “Hangi veritabanlarını destekliyor?”
- “Yapay zekâ yanlış karar verirse?”
- “Altyapı gereksinimi nedir? GPU şart mı?”
- “Şema değişince ne olacak?”
- “KVKK / GDPR açısından bu ne anlama geliyor?”
- “Satın almadan önce nasıl değerlendiririz?”
- Özet
Bir test ortamı için gerçekçi veri gerektiğinde çoğu ekip iki yoldan birini seçer: üretimin bir kopyasını alıp maskelemek ya da elle birkaç yüz satırlık örnek veri yazmak. İlki hassas veriyi alt ortamlara taşır ve her yenilemede yeni bir risk yaratır. İkincisi güvenlidir ama gerçek hayattaki dağılımları, ilişkileri ve uç durumları yakalamaz; testler yeşil yanar, hata üretimde çıkar.
Lyrebird üçüncü bir yol sunar: üretimdeki satırları kopyalamadan, üretime benzeyen veri üretmek. Bu yazıda bunu nasıl yaptığını ağır teknik detaya girmeden anlatıyor ve teknik liderlerin değerlendirme sırasında sorduğu soruları tek tek yanıtlıyoruz.
Kısaca: Bir kez bağlan, tarifi çıkar, sonra çevrimdışı üret
Lyrebird’ün çalışma modeli üç adımdan oluşur.
1. Bir kez bağlan ve profil çıkar
Lyrebird kaynak veritabanına salt okunur bağlanır ve veritabanını tanır:
- Şema: tablolar, kolonlar, tipler, anahtarlar, kısıtlar, indeksler.
- İlişkiler: hangi tablo hangisine bağlı, bir müşterinin ortalama kaç siparişi var, bazı müşterilerin neden yüzlerce siparişi var.
- Dağılımlar: tutarlar hangi aralıkta yoğunlaşıyor, tarihler hangi yıllara yayılıyor, hangi durum değerleri ne sıklıkta görülüyor.
- Kolonlar arası kurallar: teslim tarihi sipariş tarihinden sonra gelir, iki alan hep birlikte boş kalır, bir kodun başı başka bir kolondan türetilir.
- Biçimler: telefon numarasının yapısı, belge numarasının deseni, metin uzunlukları.
Bunların hepsi profil dediğimiz kompakt bir dosyaya yazılır. Profil bir veri kopyası değil, verinin istatistiksel tarifidir.
2. Bağlantıyı kes
Profil çıktıktan sonra Lyrebird’ün kaynak veritabanına bir daha ihtiyacı olmaz. Bağlantı bilgileri yalnızca bellekte tutulur, diske yazılmaz. Bundan sonraki her şey profil dosyasıyla yürür.
3. İstediğin kadar, istediğin yerde üret
Profili yükler, hedef boyutu seçersiniz: üretimin %1’i kadar küçük bir geliştirici veritabanı ya da 100 katı büyüklüğünde bir yük testi veri seti. Lyrebird masaüstü uygulamasından veya CI hattından, tamamen çevrimdışı olarak SQL dosyaları, native bulk-loader dosyaları ya da doğrudan Docker’a yüklenmiş bir veritabanı üretir.
# Bir kez, salt okunur
lyrebird profile --output app.lyre
# Paylaşmadan önce profilde ne olduğunu denetle
lyrebird audit-profile --input app.lyre
# İstediğin zaman, çevrimdışı
lyrebird generate --profile app.lyre --scale 0.1 --out ./testdb --docker
Yapay zekâ nerede devreye giriyor?
Burada çok sık karşılaştığımız bir yanlış anlamayı düzeltmek gerekiyor: Lyrebird satırları bir dil modeline yazdırmaz.
Yapay zekâ yalnızca profil çıkarma aşamasında, cihazınızda çalışan yerel bir model olarak devreye girer. Görevi her kolon için iki soruyu yanıtlamaktır:
- Bu kolon ne anlama geliyor? E-posta mı, IBAN mı, il mi, para birimi mi, sipariş durumu mu, serbest metin mi?
- Kişisel veri mi?
Bu önemli, çünkü kolon adları yanıltıcıdır. ref adlı bir alan e-posta tutabilir, kod adlı bir alan T.C. kimlik numarası olabilir. Model, kolon adına ek olarak tipine, komşu kolonlara ve değerlerin genel yapısına bakarak karar verir. Kişisel olduğuna karar verilen kolonların değerleri profile girmez; üretimde bunların yerine biçimi doğru ama tamamen sentetik değerler yazılır.
Üretim aşamasında ise model yoktur. Üretim, profildeki tarifi uygulayan deterministik bir motordur. Bunun iki pratik sonucu var:
- Halüsinasyon yoktur. Motor bir yabancı anahtarı “uyduramaz” ya da şemada olmayan bir kolonu icat edemez.
- Tekrarlanabilirdir. Aynı profil, aynı ayarlar ve aynı seed her seferinde birebir aynı veriyi üretir.
Yerel modelin neden bulutta çalışmadığını merak ediyorsanız: Model Nerede Çalışmalı?
CTO’ların sorduğu sorular
“Üretim verisi ağımızdan çıkıyor mu?”
Hayır. Profil çıkarma da üretim de kendi makinenizde, CI runner’ınızda veya özel sunucularınızda çalışır. Hiçbir bulut servisi veya harici API kullanılmaz. Lisans doğrulaması da çevrimdışıdır; (air-gapped) ortamlarda çalışabilir.
“Peki profil dosyasının kendisi veri sızdırabilir mi?”
Bu doğru soru, çünkü profil ağ içinde dolaşacak bir dosyadır. Üç katmanda yanıt veriyoruz:
- Varsayılan davranış: Kişisel olarak işaretlenen kolonların değerleri profile hiç girmez. Kişisel olmayan, tekrar eden sözlükler (ör. sipariş durumları, para birimleri, il listeleri) gerçekçilik için saklanabilir.
- Denetim:
audit-profilekomutu profilde neyin düz metin olarak durduğunu listeler ve dosyayı kişisel veri ile kimlik bilgisi (credential) kalıntılarına karşı tarar. Profil ekibinizden çıkmadan önce bunu bir güvenlik incelemesine koyabilirsiniz. - Katı mod: Daha sıkı bir politika gerekiyorsa profil, kaynak satırlardan hiçbir metin tutmayacak şekilde çıkarılabilir. Bu modda yalnızca şema, sayısal ve zamansal dağılımlar, biçim desenleri ve ISO ülke/para birimi gibi açık kataloglar kalır. Profil yazılmadan önce bağımsız bir kontrol bu sözü doğrular; tek bir ihlal bulunursa dosya yazılmaz.
Katı modun bir bedeli var ve bunu açıkça söylüyoruz: iş sözlüğüne dayanan alanlarda (ör. özel kategori adları) gerçekçilik bir miktar düşer. Hangi dengenin doğru olduğuna kurumunuzun risk iştahı karar verir.
Ek olarak profiller kurumunuzun anahtarıyla şifrelenir ve yalnızca kurumunuzun etkinleştirilmiş cihazlarında açılır.
“Veri gerçekten hata yakalayacak kadar gerçekçi mi?”
Testlerin anlamlı olması için verinin iki şeyi koruması gerekir: şekil ve ilişki.
- Şekil: Sayısal ve tarihsel dağılımlar, sık görülen değerler, boş değer oranları, metin uzunlukları ve biçimler korunur. Telefon numaraları gerçek numaralandırma planlarına, kimlik ve kart numaraları geçerlilik kurallarına uyar; böylece uygulamanızdaki validasyonlar sentetik veriyi reddetmez.
- İlişki: Bir müşterinin sipariş sayısındaki çarpıklık, kolonlar arası kurallar ve tablolar arası oranlar korunur. “Bazı müşterilerin binlerce siparişi var” gibi gerçek hayattaki uç dağılımlar kaybolmaz; performans sorunları çoğu zaman tam da buradan çıkar.
Lyrebird’ün hedefi “örnek veri” değil, test edilebilir kalitede veri üretmektir. Uygulamanızın validasyonlarından geçen, sorgularınızı üretimdekine benzer veri hacmi ve dağılımıyla çalıştıran, raporlarınızda anlamlı sonuçlar veren bir veritabanı. Üretilen kayıtlar kaynaktaki kayıtların kopyası değildir; bu bir eksiklik değil, tasarımın kendisidir. Test etmek istediğiniz şey tek tek müşteriler değil, sisteminizin bu verinin şekli ve ilişkileri karşısındaki davranışıdır.
Veri setinin boyutu ihtiyaca göre ayarlanır: tüm şemayı bir çarpanla küçültüp büyütebilir, toplam satır hedefi verebilir ya da tek bir tabloyu yük testi için ayrıca büyütebilirsiniz. Tablolar arası oranlar ve ilişki yoğunlukları korunur. Böylece geliştirme, entegrasyon ve regresyon testleri, demo ortamları, yük testleri ve verinin hiç paylaşılamadığı dış ekipler aynı profilden beslenir.
“Belirli bir iş senaryosunu nasıl test ederiz?”
Lyrebird verisi statüleri, tarih sıralarını ve tablolar arası tutarlılığı korur. Bu yüzden “iptal edilmiş siparişler” ya da “vadesi geçmiş faturalar” gibi senaryoların çoğu üretilen veride zaten vardır; testleriniz onları sorgulayarak bulur.
Testin kesin olarak bilmesi gereken kayıtlar için, örneğin hesaplanmış bir toplamı, belirli bir durum geçişini ya da kaynakta çok nadir görülen bir uç durumu doğrulamak istediğinizde, senaryoyu bir SQL dosyası olarak verirsiniz. Lyrebird çıktısı yüklendikten sonra bu dosya çalışır ve testlerinizin beklediği birkaç kaydı gerçekçi verinin üstüne ekler:
-- scenarios/overdue-invoice.sql
INSERT INTO invoices (customer_id, status, due_date, total)
SELECT id, 'OVERDUE', CURRENT_DATE - 45, 1250.00
FROM customers
WHERE segment = 'CORPORATE'
LIMIT 1;
Kimlikleri veritabanına bırakıp mevcut kayıtlara bağlanmak, senaryoyu Lyrebird’ün ürettiği veriyle çakışmadan birleştirir. Senaryo dosyalarını şema migration’larınızdan ayrı tutun; bunlar yalnızca test ortamında çalışmalıdır.
Lyrebird hacmi ve gerçekçiliği verir, senaryo dosyası da testlerin kontrol ettiği kayıtları garanti eder.
“Yükleme sırasında yabancı anahtar hataları alır mıyız?”
Hayır. Lyrebird şemanın bağımlılık grafiğini çıkarır, üst tabloları önce üretir ve her alt satırı geçerli bir üst kayda bağlar. Bileşik anahtarlar ve kısıtlar tüm şema boyunca korunur; sahipsiz kayıt kalmaz. Docker’a yükleme yapıldığında satır sayıları ayrıca doğrulanır.
“CI hattımızda kullanabilir miyiz?”
Evet. Enterprise sürümündeki CLI Linux, macOS ve Windows’ta (headless) çalışır. Aynı profil ve seed aynı veriyi ürettiği için “dün geçen test bugün neden kırıldı?” sorusunun cevabı veri değişikliği olmaz. Satır sayıları ve seed komut satırından, senaryoya göre verilebilir.
“Hangi veritabanlarını destekliyor?”
PostgreSQL, MySQL, SQL Server ve Oracle. Bir motordan profil çıkarıp başka bir motora üretmek de mümkün; örneğin Oracle’daki bir sistemin profilinden PostgreSQL test veritabanı üretmek. Bu, motor geçişlerini test eden ekipler için ayrıca kullanışlıdır.
“Yapay zekâ yanlış karar verirse?”
Verebilir; hiçbir sınıflandırıcı kusursuz değildir. Bu yüzden Lyrebird modeli son karar verici olarak değil, asistan olarak konumlar. Profil hazırlama yetkisi olan kullanıcılar kolon kararlarını inceleyip düzeltebilir, profili ancak bundan sonra yayınlar. Denetim adımı da bu insan incelemesini destekler. Üretim yetkisi olan kullanıcılar ise yalnızca kurumun yayınlanmış profillerinden üretir.
“Altyapı gereksinimi nedir? GPU şart mı?”
Hayır. Lyrebird bir geliştirici dizüstü bilgisayarında, bir CI runner’ında veya özel bir sunucuda çalışır. Varsa NVIDIA (CUDA) veya Apple Silicon (Metal) hızlandırıcısını kullanır, yoksa otomatik olarak CPU’ya döner. Model yalnızca profil çıkarma sırasında belleğe yüklenir ve iş bitince bırakılır; üretim aşaması model gerektirmez.
“Şema değişince ne olacak?”
Profili yenilersiniz. Profil çıkarma tek bir komuttur ve sonucu sürümlenebilir bir dosyadır; şema migration’larınızla birlikte profilinizi de güncel tutabilirsiniz. Her yenilemede canlı veritabanına yeniden dokunmanız gerekmez, yalnızca tarifi tazelersiniz.
“KVKK / GDPR açısından bu ne anlama geliyor?”
Hukuki değerlendirme veri koruma sorumlunuzun işidir; ancak mimari, bu değerlendirmeyi kolaylaştıran net cevaplar verir: alt ortamlara üretim satırı kopyalanmaz, veri ağdan çıkmaz, profilde ne bulunduğu denetlenebilir ve bunu kanıtlayan bir rapor alınabilir. Test ortamlarını kişisel veri işleme kapsamından çıkarmak, çoğu kurum için uyum yükünü ciddi biçimde azaltır.
“Satın almadan önce nasıl değerlendiririz?”
Community sürümü ücretsizdir. Kendi veritabanınızdan profil çıkarabilir, profili inceleyebilir ve masaüstü uygulamasından tablo başına 5.000 satıra kadar üretim yapabilirsiniz. Böylece gerçekçiliği ve ilişkisel tutarlılığı kendi şemanız üzerinde, kendi makinenizde görürsünüz. Enterprise, bu sınırı kaldırır ve CLI otomasyonunu ekler.
Özet
Lyrebird’ün yaklaşımı tek bir fikre dayanır: test ortamının ihtiyacı üretim verisinin kendisi değil, onun tarifidir.
- Kaynak veritabanına bir kez, salt okunur bağlanılır.
- Yerel bir model kolonların anlamını ve kişisel olup olmadığını belirler; kişisel değerler profile girmez.
- Profil denetlenebilir, gerekirse satır metni içermeyecek şekilde sıkılaştırılabilir.
- Üretim deterministik, çevrimdışı ve tekrarlanabilirdir; ilişkiler ve dağılımlar korunur.
Kendi şemanızda denemek için: