~~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