Code Metrics nedir? ne işe yarar?

CodeMetrics Nedir?
CodeMetrics Visual Studio , Visual Studio Code için geliştirilmiş bir uzantıdır.
Roslyn API‘sini kullanarak kod metriğini hesaplar.Visual Studio CodeLens kullanarak kod değişikliklerinden metrikleri hesaplar.

Şu anda üç metrik desteklenmektedir

1. Kod Satırı Koddaki yaklaşık satır sayısını belirtir. Sayım, IL koduna dayanır ve bu nedenle kaynak kodu dosyasındaki tam satır sayısı değildir. Çok yüksek bir sayı, bir türün veya yöntemin çok fazla çalışmaya çalıştığını ve bölünmesi gerektiğini gösterebilir. Ayrıca, tür veya yöntemin sürdürülmesi zor olabileceğini gösterebilir.

2. Kod Karmaşıklığı kodun yapısal karmaşıklığını ölçer. Program akışındaki farklı kod yollarının sayısını hesaplayarak oluşturulur. Karmaşık kontrol akışı olan bir program, iyi bir kod kapsamı elde etmek için daha fazla teste ihtiyaç duyar ve sürekli bakıma mağruz kalacaktır. Kod karmaşıklığı temiz düzgün okunaklı kod yazmanıza yardımcı olur

3. Kodun Bakımı (Okunaklığı) Kodu korumanın göreli kolaylığını temsil eden 0 ile 100 arasında bir dizin değeri hesaplar. Yüksek bir değer daha iyi bakım yapılabilirliği anlamına gelir. Renk kodlu derecelendirme, kodunuzdaki sorun noktalarını hızla tespit etmek için kullanılabilir. Yeşil puan 20 ile 100 arasında olup kodun bakımı iyi olduğunu gösterir. Sarı değerlendirme 10 ile 19 arasında olup kodun orta düzeyde sürdürülebilir olduğunu gösterir. Kırmızı bir derece, 0 ile 9 arasında derecelendirilir ve bakım yapılabilirliği düşük olduğunu gösterir.

Nasıl Yüklenir ?

Visual studio Code’u açtıktan sonra sol kısımda yer alan menülerden Extensions(Marketplace) Uzantılar menüsüne tıklayın ve arama kısmına CodeMetrics yazın 1 tane uzantı çıkıcaktır uzantıyı seçin ve sağ tarafta açılan sayfada Install tuşuna tıklayın sonra Visual Studio Code’u kapatıp açmanız istencektir. Bi kere kapatıp açın ve CodeMetrics artık aktif duruma gelcektir kod yazarken dikkat ederseniz eğer fonksiyon ve sınıfların hemen başlarında kırmızı, yeşil, sarı durumları ve açıklamaları yazıcaktır . Kod karmaşıklığını ne kadar aza indirirseniz o kadar iyi kod yazmış olursunuz . Açıklamalar karmaşıklıklar ve çözümler ingilizcedir.

Eğer Türkçe olmasını istiyorsanız yapmanız gereken ler ise

Mac için Code -> Preferences -> Settings menüsüne tıklayın ve açılan sayfada sağ kısımda Workspace Settings tabına tıklayın ve çalışma alanı ayarları olarak aşağıdaki jsonı açıp içindekileri kopyalayıp yapıştırın artık CodeMetrics’i türkçe kullanabilirsiniz.


{
"codemetrics.basics.ComplexityLevelExtremeDescription": "Lanet cehennem ...",
"codemetrics.basics.ComplexityLevelHighDescription": "Dalga geçiyor olmalısın",
"codemetrics.basics.ComplexityLevelNormalDescription": "Bir şey yapmanın zamanı geldi ...",
"codemetrics.basics.ComplexityLevelLowDescription": "Her şey yolunda!",
"codemetrics.basics.ComplexityTemplate": "Karmaşıklık {0} {1}",
"codemetrics.nodeconfiguration.AnyKeywordDescription": "Herhangi Kelime",
"codemetrics.nodeconfiguration.ArrayBindingPatternDescription": "Dizi bağlama deseni",
"codemetrics.nodeconfiguration.ArrayLiteralExpressionDescription": "Dize ifade ifadesi",
"codemetrics.nodeconfiguration.ArrowFunctionDescription": "Ok işlevi",
"codemetrics.nodeconfiguration.BinaryExpressionDescription": "İkili ifade",
"codemetrics.nodeconfiguration.BindingElementDescription": "Bağlayıcı unsur",
"codemetrics.nodeconfiguration.BlockDescription": "Blok",
"codemetrics.nodeconfiguration.BreakStatementDescription": "(break) Kırma ifadesi",
"codemetrics.nodeconfiguration.CallExpressionDescription": "Çağrı ifadesi",
"codemetrics.nodeconfiguration.CallSignatureDescription": "Çağrı imzası",
"codemetrics.nodeconfiguration.CaseClauseDescription": "(Case) Durum şartı",
"codemetrics.nodeconfiguration.ClassDeclarationDescription": "Sınıf beyanı",
"codemetrics.nodeconfiguration.CatchClauseDescription": "(Catch) Yakalama şartı",
"codemetrics.nodeconfiguration.ConditionalExpressionDescription": "Koşullu ifade",
"codemetrics.nodeconfiguration.ConstructorDescription": "(Constructor) Oluşturucu",
"codemetrics.nodeconfiguration.ConstructorTypeDescription": "Oluşturucu Türü",
"codemetrics.nodeconfiguration.ContinueStatementDescription": "Devam et ifadesi",
"codemetrics.nodeconfiguration.DebuggerStatementDescription": "Hata ayıklayıcı ifadesi",
"codemetrics.nodeconfiguration.DefaultClauseDescription": "Varsayılan şart",
"codemetrics.nodeconfiguration.DoStatementDescription": "(Do) Yap ifadesi",
"codemetrics.nodeconfiguration.ElementAccessExpressionDescription": "(Element) Nesne erişim ifadesi",
"codemetrics.nodeconfiguration.EnumDeclarationDescription": "(Enum) Sayım tanımı",
"codemetrics.nodeconfiguration.ExportAssignmentDescription": "(Export) Dışa aktar ataması",
"codemetrics.nodeconfiguration.ExpressionStatementDescription": "(Expression) ifade tanımı",
"codemetrics.nodeconfiguration.ForStatementDescription": "(For) Döngü tanımı",
"codemetrics.nodeconfiguration.ForInStatementDescription": "(Forin) Döngü içinde tanımı",
"codemetrics.nodeconfiguration.ForOfStatementDescription": "(Forof) Döngü nesnesi tanımı",
"codemetrics.nodeconfiguration.FunctionDeclarationDescription": "Fonksiyon tanımı",
"codemetrics.nodeconfiguration.FunctionExpressionDescription": "Fonksiyon ifadesi",
"codemetrics.nodeconfiguration.FunctionTypeDescription": "Fonksiyon türü",
"codemetrics.nodeconfiguration.GetAccessorDescription": "Erişimci Al",
"codemetrics.nodeconfiguration.IdentifierDescription": "Kimlik tanıtıcı",
"codemetrics.nodeconfiguration.IfWithElseStatementDescription": "Eğer değilseli koşul",
"codemetrics.nodeconfiguration.IfStatementDescription": "Eğer koşulu",
"codemetrics.nodeconfiguration.ImportDeclarationDescription": "Tanım içe aktar",
"codemetrics.nodeconfiguration.ImportEqualsDeclarationDescription": "Eşittir tanımı içe aktar",
"codemetrics.nodeconfiguration.IndexSignatureDescription": "Index işareti",
"codemetrics.nodeconfiguration.InterfaceDeclarationDescription": "(Interface) Arayüz tanımı",
"codemetrics.nodeconfiguration.JsxElementDescription": "Jsx element",
"codemetrics.nodeconfiguration.JsxSelfClosingElementDescription": "Jsx self closingElement",
"codemetrics.nodeconfiguration.LabeledStatementDescription": "Etiketli tanımlama",
"codemetrics.nodeconfiguration.MethodDeclarationDescription": "Metot tanımlama",
"codemetrics.nodeconfiguration.MethodSignatureDescription": "Metot işareti",
"codemetrics.nodeconfiguration.ModuleDeclarationDescription": "Modül tanımlama",
"codemetrics.nodeconfiguration.NamedImportsDescription": "Adlandırılmış içe aktarmalar",
"codemetrics.nodeconfiguration.NamespaceImportDescription": "(Namespace)Ad alanı içe aktarma",
"codemetrics.nodeconfiguration.NewExpressionDescription": "Yeni ifade",
"codemetrics.nodeconfiguration.ObjectBindingPatternDescription": "",
"codemetrics.nodeconfiguration.ObjectLiteralExpressionDescription": "Tam nesne ifadesi",
"codemetrics.nodeconfiguration.ParameterDescription": "Parametre",
"codemetrics.nodeconfiguration.PostfixUnaryExpressionDescription": "Postfix tekli ifade",
"codemetrics.nodeconfiguration.PrefixUnaryExpressionDescription": "Prefix tekli ifade",
"codemetrics.nodeconfiguration.PropertyAccessExpressionDescription": "Özellik Erişim ifadesi",
"codemetrics.nodeconfiguration.PropertyAssignmentDescription": "(Property) Özellik tanımı",
"codemetrics.nodeconfiguration.PropertyDeclarationDescription": "(Property) Özellik tanımlaması",
"codemetrics.nodeconfiguration.PropertySignatureDescription": "(Property) Özellik işareti",
"codemetrics.nodeconfiguration.RegularExpressionLiteralDescription": "Düzenli ifade gerçek",
"codemetrics.nodeconfiguration.ReturnStatementDescription": "Dönüş tanımı",
"codemetrics.nodeconfiguration.SetAccessorDescription": "Erişimi ayarla",
"codemetrics.nodeconfiguration.SourceFileDescription": "Kaynak dosya",
"codemetrics.nodeconfiguration.StringLiteralDescription": "Metin literal",
"codemetrics.nodeconfiguration.SwitchStatementDescription": "Anahtar statement",
"codemetrics.nodeconfiguration.TemplateExpressionDescription": "Template expression",
"codemetrics.nodeconfiguration.ThrowStatementDescription": "Throw statement",
"codemetrics.nodeconfiguration.TryStatementDescription": "Try statement",
"codemetrics.nodeconfiguration.TypeAssertionExpressionDescription": "Type assertion expression",
"codemetrics.nodeconfiguration.TypeLiteralDescription": "Type literal",
"codemetrics.nodeconfiguration.TypeReferenceDescription": "Type reference",
"codemetrics.nodeconfiguration.VariableDeclarationDescription": "Variable declaration",
"codemetrics.nodeconfiguration.VariableStatementDescription": "Variable statement",
"codemetrics.nodeconfiguration.WhileStatementDescription": "While statement",
"codemetrics.nodeconfiguration.WithStatementDescription": "With statement"
}