~~REVEAL~~ ====== Statyczna analiza kodu - FXCop ====== ===== FxCop ===== * darmowe narzędzie firmy Microsoft do statycznej analizy kodu .Net. * wbudowane w VS Premium/Ultimate, dostępne w Windows SDK * analizuje kod pośredni, a nie kod źródłowy * wykrywa ponad 200 różnych defektów * możliwość definiowania własnych reguł * narzędzie konsolowe oraz GUI (w starszych wersjach) ===== Wykrywane wady ===== * wytyczne [[http://msdn.microsoft.com/en-us/library/ms229042%28v=vs.110%29.aspx|.NET Framework Design Guidelines]] * konwencja nazewnicza * zwalnianie zasobów * konstrukcja bibliotek * lokalizacja (GlobalizationRules) * wydajność * bezpieczeństwo, np. SQL Injection * DataFlow (przepływ danych) * MSDN [[https://msdn.microsoft.com/en-us/library/ee1hzekz.aspx|Lista ostrzeżeń]] \\ np.:[[http://msdn.microsoft.com/en-us/library/ms182296.aspx|Security Warnings]], [[https://msdn.microsoft.com/en-us/library/ms182310.aspx|CA2100: Review SQL queries for security vulnerabilities]] ===== FxCop w VS 2013 ===== {{ :zajecia:znd_2014_1:fxcop_window.png?400|}} **Build -> Run Code Analysis** \\ **Analyze -> Run Code Analysis** W VS 2015 wyniki wyświetlane \\ w oknie Error list ===== Wybór reguł ===== Wybór zestawu reguł: \\ **Project -> Propoerties -> Common Properties -> Code Analysis Settings** {{ :zajecia:znd_2014_1:fxcop_config.png?500 |}} ===== Wyłączanie ostrzeżeń ===== * Wyłączanie ostrzeżeń danego typu **Actions -> Suppress Message -> In Source / In Project Suppression File** * w pliku (In Source) * dla całego projektu (In Project Suppression File) * Atrybut ''SuppressMessage'' [SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")] public class MyClass { } [module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")] ===== TFS i analiza kodu ===== * Check-in Policies * Wymuszenie analizy przed zatwierdzeniem zmian: **Team Project Settings -> Source Control -> Check-in Policy -> Add** {{https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/88/99/metablogapi/4188.clip_image002_666E2E8B.jpg?600}} ===== ===== * Check-in Policies * Enforce check-in to only contain files that are part of current solution. * Enforce C/C++ Code Analysis (/analyze) * Enforce Code Analysis for Managed Code * Można wybrać grupy reguł * Enable Code Analysis on Build - wymuszenie analizy przy każdej kompilacji lokalnie lub na serwerze buildów (TFS) * Tworzenie zadań z wykrytych błędów * **Code Analysis -> Actions -> Create Work Item** * **Error List -> Create Work Item** ===== Aplikacja konsolowa ===== ''C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\'' * silniki wyszukiwania: ''FxCop\Engines'' * reguły: ''FxCop\Rules'' * ''Rule Sets'' pliki XML z regułami dla projektów * [[http://msdn.microsoft.com/en-us/library/bb429449%28v=vs.80%29.aspx|Opcje aplikacji konsolowej]] * [[http://fxcopaspnetsecurity.codeplex.com/|Fxcop ASP.NET security rules]] dodatek do FxCop 10 z regułami ASP.NET ===== Metryki kodu ===== **Analyse -> Calculate Code Metrics** * **Maintainability Index** - utrzymywalność, wyznaczana za pomocą reguły [[https://msdn.microsoft.com/en-us/library/bb386043.aspx|CA1505: Avoid unmaintainable code]] \\ 20-100 good, 10-19 moderately, 0-9 low * **Cyclomatic Complexity** - złożoność struktury kodu, ilość różnych ścieżek. Program z dużą liczbą ścieżek wymaga wielu testów do pokrycia kodu * **Depth of Inheritance** - głębokość dziedziczenia * **Class Coupling** - uwikładnie klas, ilość unikatowych obiektów od których zależy badany fragment kodu * **Lines of Code** ===== Więcej informacji ===== * [[http://sekurak.pl/statyczna-analiza-bezpieczenstwa-kodu-aplikacji-czesc-3-fxcop/|Statyczna analiza bezpieczeństwa kodu aplikacji — FxCop]] by Adrian “Vizzdoom” Michalczyk * [[http://www.codeproject.com/Articles/78599/How-to-Use-FxCop|How to use FxCop]] by Anil_Saran * [[http://msdn.microsoft.com/en-us/library/bb429476%28v=vs.80%29.aspx|FxCop MSDN]] * [[http://www.microsoft.com/en-us/download/details.aspx?id=6544|FxCop 10.0 download]] * [[wp>FxCop]] Wikipedia