Xero.DataComparer ile iki milyon nesnelik listeyi regresyon testinde karşılaştırma
Xero.DataComparer, fiyatlama ve risk motorlarında regresyon testi için yazılmış küçük, bağımlılığı olmayan bir .NET kütüphanesi. Yalnızca eşit/eşit değil sonucu vermek yerine hangi satırların, hangi özelliklerde farklı olduğunu ve iki taraftan hangisinde eksik kaldığını raporluyor. Yazar, bir milyon nesnelik iki listeyi yaklaşık 0,7 saniyede karşılaştırdığını belirtiyor.
Kilit noktalar
- CompareListAsync, iki List<T> arasındaki satırları anahtar özelliklerle eşleştirir ve farklı özellikleri raporlar
- OnlyInReference, OnlyInTarget ve tekrarlayan anahtar listeleri hiçbir satırı sessizce kaybetmez
- CompareResult<T>, ITypedList uyguladığı için WinForms ve DevExpress gibi veri bağlı tablolarda ek kolon kurulumu gerekmez
- Yazarın ölçümü: 16 çekirdekte 1.000.000 nesne için yaklaşık 0,7 sn ve 53 MB
- File-based uygulamalarda ifade ağacı ölçümleri için #:property PublishAot=false ayarını kontrol edin
- Paket adı: dotnet add package Xero.DataComparer
Fiyatlama ve risk motorlarında her sürümde yeni build'in eski build ile aynı sonuçları üretip üretmediği sorulur. Xero.DataComparer bu soruya yalnızca "farklı" demek yerine, hangi satırların ve hangi özelliklerin farklı olduğunu, değerlerin ne olduğunu ve hangi satırların iki taraftan birinde bulunmadığını gösteriyor. Anahtar özellikleri ile eşleşen satırlar tanımlanıyor, değişken alanlar yok sayılıyor ve sonuç nesnesi tek taraflı kayıtları, tekrarlayan anahtarları ve satır bazlı farkları orijinal nesnelerle birlikte taşıyor.
Yazarın verdiği ölçümlere göre 16 mantıksal çekirdekli bir makinede iki milyon nesneye yakın veri yaklaşık 0,7 saniyede ve 53 MB bellek tahsisiyle işleniyor. Hızın kaynağı derlenmiş, tipli özellik erişimcileri, önceden boyutlandırılmış çift hash indeksi, paralel çalışan aşamalar ve küçük fark satırları. Aynı anahtara sahip kayıtlar sessizce atılmak yerine raporlanıyor. Dosya tabanlı uygulamalarda PublishAot varsayılanının ifade ağacı derlemesini yorumlamaya düşürebileceği de uyarı olarak belirtiliyor.
Gerçek dünyada kullanımı
- Fiyatlama motorunun yeni sürümünün eski sürümle milyonlarca satırlık çıktıda uyumunu doğrulamak
- Risk hesaplamalarında hangi pozisyonların, hangi metriklerde (ör. PnL, VaR) değiştiğini raporlamak
- Veri bağlı WinForms ekranında regresyon farklarını ek view model yazmadan incelemek
Neden önemli
Regresyon karşılaştırmasında "farklı" yanıtı yerine satır, özellik ve değer bazında fark almak, hataların kaynağını bulmayı hızlandırır. Tekrarlayan anahtarların raporlanması da veri kaybı kaynaklı sahte "aynı" sonuçlarını engeller.
Benzer haberler
- C# interface'lerinde collection dönüş tipleri: interface, view ve snapshot farkıNick Cosentino (Dev Leader)2 gün önce
- C# ile dinamik Gauss-Legendre sayısal integrasyonu: düğüm ve ağırlıkları taşma olmadan anında hesaplamakHabr C# (ru)2 gün önce
- .NET 8 ve 9 Destek Bitişi: Deployment Odaklı Geçiş Kontrol ListesiDEV Community: #dotnet2 gün önce