Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Statik Analiz Nedir, Ne Bulur, Ne Bulamaz? Linter, Analyzer, Type Checker ve SAST Farkı
Statik analiz kodu çalıştırmadan bug pattern'lerini ve kural ihlallerini yakalar, ama kodda yazılı olmayan business rule'ları göremez. Bookstore'da bir fiyat içe aktarma PR'ında .NET 10'un varsayılan ayarları 2 sorun, Recommended mod 7 diagnostic buldu; build temizlendikten sonra bile eksi fiyat ve 329,90'ı 32990 okuyan bir hata veritabanına kadar gitti. Yazı araç spektrumunu, severity'yi, IDE'den dashboard'a katmanları ve legacy projede ratchet stratejisini anlatıyor.
.NET Analyzer'ları: AnalysisLevel, CA Kuralları, .globalconfig, WarningsAsErrors ve Legacy Projede Kademeli Açmak
AnalysisLevel'ı 10.0-recommended gibi bir sürüme sabitlemek, SDK yükseltmesinin kendiliğinden yeni kural açıp CI'ı kırmasını önler; Bookstore'da .NET 11 SDK'sı latest ile CA2028 hatası verdi, sabit seviyede temiz geçti. Yazı .globalconfig ile .editorconfig'in rolünü, Türkçe i ile kupon eşleşmeyen CA1309'u, SQL injection'ı gösteren CA2100'ü, hedefli WarningsAsErrors'ı, gerekçeli bastırmayı ve SARIF ile PR annotation'ını gerçek çıktılarla anlatıyor.
Third-Party Analyzer'lar ve Kendi Roslyn Analyzer'ını Yazmak: BannedApiAnalyzers, Popüler Paketler, DiagnosticAnalyzer ve CodeFix
Bir kural yalnız 'şu API'yi kullanma' diyorsa BannedApiAnalyzers yeter; code fix, ekibe özgü mantık ya da bağlama göre mesaj gerekiyorsa kendi Roslyn analyzer'ını yazarsın. Bookstore'da Meziantou, Roslynator ve SonarAnalyzer 87 uyarı ve 14 kat analiz süresi getirdi ama DateTime.UtcNow'ı varsayılan ayarlarla yakalamadı. Yazı TimeProvider kuralını operation callback'li bir analyzer, ayrı assembly'de code fix, Microsoft.CodeAnalysis.Testing testleri ve NuGet paketiyle yazıyor.
Angular ve TypeScript'te ESLint: Flat Config, typescript-eslint Type-Aware Kurallar ve angular-eslint Template Kuralları
Promise'leri await etmeyen kodu ancak tip bilgisi kullanan kurallar yakalar: Bookstore'un Angular istemcisinde ng add angular-eslint'in config'i bir PR'da 2 sorun buldu, strictTypeChecked ve projectService ile bu sayı 12'ye çıktı. Yazı ESLint 10'un flat config zorunluluğunu, no-floating-promises ve no-misused-promises bug'larını, accessibility template kurallarını, type-aware lint'in maliyetini, cache'in eski sonuç vermesini ve TypeScript 7 ile uyumsuzluğu gerçek çıktılarla anlatıyor.
SonarQube ile Quality Gate: Community Build mi Server mı, Quality Profile, Yeni Kod Odaklı Gate ve CI Entegrasyonu
SonarQube'un varsayılan gate'i yalnız yeni koda bakar: yeni issue sıfır, yeni kodda coverage en az %80. Bookstore'da build'i ve testleri temiz olan 'benzer kitaplar' endpoint'i gate'i %10,3 yeni kod coverage'ıyla kırdı, iki test sonrası geçti. Yazı Community Build'i Docker'da PostgreSQL ile kurmayı, SonarScanner for .NET'i, Sonar way core profilini, Roslyn ile çift raporlamayı, eski coverage raporu tuzağını ve Community Build'in PR analizi olmayışını gerçek çıktılarla anlatıyor.
Statik Analizde Neler Değişti: .NET 5–11 Analyzer'ları, TSLint'ten ESLint 10'a, TypeScript 7 ve Yeni Nesil Linter'lar
Analyzer'lar .NET 5'ten beri SDK'nın parçası ve her sürüm yeni kural getiriyor: aynı kod .NET 10 SDK'sıyla sıfır, .NET 11 SDK'sıyla dört uyarı verdi (CA2026, CA2027, CA1877, CA2028). Yazı .NET 6–11 kural tarihini, CA2028'in source-generated regex'i görmemesini, .eslintrc'den flat config'e otomatik taşımanın angular-eslint 22'de neden yetmediğini, TypeScript 7'nin typescript-eslint'i beklettiğini, Oxlint ve Biome'un Bookstore'daki sonuçlarını ve Sonar'ın yeni adlarını anlatıyor.