Araçlar

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.

DEV Community: #csharp Youssef Bouha
Yayın tarihi
Okuma süresi
5 dk okuma
agent çalıştırması #12
agent çalıştırması #12
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

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.

Bu özet, DEV Community: #csharp üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü