~~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)
* wtyczka [[.:resharper|Resharper]] również przeprowadza analizę kodu automatycznie w trakcie edycji programu (ponad 1400 reguł!)
===== 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]]
* np. [[https://msdn.microsoft.com/en-us/library/ms182310.aspx|CA2100: Review SQL queries for security vulnerabilities]]
===== FxCop w VS =====
* **Build -> Run Code Analysis**
{{ :zajecia:znd_2014_1:fxcop_window.png?350 |}}
===== 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ć wybrane grupy reguł
* Enable Code Analysis on Build - można wymusić też analizę przy każdej kompilacji lokalnie lub na serwerze buildów (TFS)
* Tworzenie zadań z wykrytych błedó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
===== 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