Hledání duplicitního kódu pomocí Zjišťování klonování kódu
Klony kódu jsou samostatné fragmenty kódu, které jsou velmi podobné.Jedná se o obecný jev v aplikaci, která byla ve vývoji nějakou dobu.Klony ztěžují provedení změn v aplikaci, protože je nutné najít a aktualizovat více než jeden fragment.
Visual Studio Ultimate nebo Visual Studio Premium může pomoci klony najít, takže je lze refaktorovat.
Můžete najít klony specifického fragmentu nebo najít všechny klony v řešení.Kromě zjišťování přímých kopií nástroj analýzy klonů může najít fragmenty, které se liší názvy proměnných a parametry a ve kterých byly změněny některé příkazy.
Analyzátor klonování kódu hledá duplicitní kód v projektech jazyka Visual C# a Visual Basic v rámci řešení sady Visual Studio.
Nalezení klonů konkrétního fragmentu kódu
Zvýrazněte fragment kódu v metodě nebo v definici get/set.
[!POZNÁMKA]
Lze najít klony příkazů, ale ne deklarace jako například pole, metody nebo signatury vlastností.
V místní nabídce pro fragment zvolte Najít v řešení odpovídající klony.
Tuto metodu použijte, pokud chcete vědět, zda v řešení existuje podobná metoda nebo fragment.
Nalezení všech klonů v řešení
- V nabídce Analýza zvolte Analyzovat řešení klonování kódu.
Tato metoda je užitečná zejména při revizi kódu.
[!POZNÁMKA]
Metody, které jsou kratší než 10 příkazů, nejsou tímto příkazem skenovány.
Výsledky jsou uvedeny v pořadí podle podobnosti.Rozbalte každou položku pro zobrazení fragmentů kódu.
Všimněte si, že jsou zjištěny podobnosti, i když mají místní proměnné, které jsou použity fragmenty, jiné názvy, a to i v případě, kdy bylo vloženo nebo odstraněno několik příkazů.
Porovnání klonů
V okně Výsledky klonování kódu vyberte dva soubory nebo skupinu klonů, která obsahuje dva soubory.
Z místní nabídky zvolte příkaz Porovnat.
Tato funkce používá stejný nástroj porovnání, jaký se používá k porovnání verzí pod správou zdrojového kódu.Pokud ho chcete změnit, vyberte příkaz Možnosti z nabídky Nástroje.Rozbalte položku Správa zdrojového kódu a Visual Studio Team Foundation Server.Zvolte položku Konfigurovat uživatelské nástroje a poté Přidat.
Vyloučení určitých souborů nebo metod z analýzy
Přidejte nový soubor XML do projektu sady Visual Studio, ve kterém jsou definovány metody, které chcete vyloučit.
Nezáleží na tom, zda je soubor součástí projektu.Musí být v nejvyšším adresáři projektu.
Změňte příponu názvu souboru na .codeclonesettings.
Upravte obsah souboru tak, aby se podobal následujícímu příkladu.
<CodeCloneSettings> <Exclusions> <!-- Add any combination of the following node types. --> <!-- Absolute or relative path names: --> <File>MyFile.cs</File> <!-- Filepaths may contain wildcards: --> <File>GeneratedFiles\*.cs</File> <!-- Namespace, Type, and FunctionName must be fully qualified: --> <Namespace>MyCompany.MyProject</Namespace> <Type>MyCompany.MyProject.MyClass1</Type> <FunctionName>MyCompany.MyProject.MyClass2.MyMethod</FunctionName> <!-- Names may contain wildcards: --> <Namespace>*.AnotherProject</Namespace> <Type>*.AnotherClass*</Type> <FunctionName>MyProject.*.AnotherMethod</FunctionName> </Exclusions> </CodeCloneSettings>
Jaké klony kódu budou nalezeny?
Analyzátor klonování kódu nalezne "téměř úspěšné" klony.
Klonování kódu je často výsledkem kopírováním kódu vývojáři a jeho přizpůsobení na nové místo.Proto je nejjednodušší vzít v úvahu míru změn, které lze provést před tím, než se analyzátoru nepodaří najít klon.Následující změny lze provést a klon bude stále rozpoznán.V každém případě existuje tolerance určitého počtu takových změn:
Přejmenování identifikátorů.
Vložení a odstranění příkazů.
Přeuspořádání příkazů.
Jaké duplicity nebudou nalezeny?
Deklarace typu nejsou porovnávány.Například, pokud máte dvě třídy s velmi podobnými sadami deklarací pole, nebudou hlášeny jako klony.
Jsou porovnány pouze příkazy v metodách a definicích vlastností.
Příkaz Analyzovat klonování kódu řešení nenajde klony v metodách, které jsou kratší než 10 příkazů.
Avšak na kratší fragmenty lze použít příkaz Najít v řešení odpovídající klony.
Fragmenty s více než 40 % změněných tokenů.
Pokud projekt obsahuje soubor .codeclonesettings, elementy kódu, které jsou definovány v tomto projektu, nebudou prohledávány, pokud jsou vyjmenovány v sekci Exclusions souboru .codeclonesettings.
Některé druhy generovaného kódu:
*.designer.cs, *.designer.vb
Metody InitializeComponent
Nicméně to neplatí automaticky na všechen generovaný kód.Například, pokud používáte šablony textů, můžete vyloučit generované soubory jejich vyjmenováním v souboru .codeclonesettings.
Kdy použít analýzu klonování kódu
Hledání klonů je obvykle vhodné v následujících případech:
Při aktualizaci existujícího kódu. Když opravujete chybu nebo reagujete na změny v požadavcích, obvykle nejprve hledáte umístění v kódu, který chcete změnit.Před provedením změny vyhledejte klony tohoto segmentu kódu.Pokud jsou klony zjištěny:
Zvažte, zda je třeba provést stejnou změnu pro každý klon.
Zvažte také, zda se nejedná o dobrou příležitost k refaktorování klonovaného kódu do sdílené metody nebo třídy.
Architektonické vyčištění. Ke konci každé iterace použijte příkaz Analyzovat klonování kódu řešení v nabídce Analýza.
Při vytváření kódu. Pokud jste vytvořili nový kód, použijte nástroj pro nalezení podobného kódu, který již existuje.
Použití analýzy klonů na velký základ kódu
Kód je často zkopírován mezi docela oddělené části velkého projektu a je často zkopírován do různých částí organizace.Měli byste proto hledat klony v tak velkém základu kódů, jak můžete, nejen v nejbližším řešení, na kterém pracujete.
Pro použití analyzátoru klonování kódu napříč zdrojovým stromem vytvořte řešení, které obsahuje všechny projekty v úložišti.
Tip
Mějte na paměti, že projekt můžete zahrnout do více než jednoho řešení.Pro analýzu klonování kódu velkého množství projektů můžete vytvořit řešení, které zahrnuje všechny projekty.Nepotřebujete odebrat projekty z řešení, jejichž prostřednictvím jsou obvykle přístupné.
Generovaný kód
Analýza klonování kódu s generovaným kódem nefunguje dobře.Příklad:
Kód generovaný z šablon T4.
Další informace o knihovnách T4 naleznete v tématu Vytvoření kódu a textové šablony T4.
Kód generovaný z návrháře, jako je například Silverlight nebo návrhář uživatelského rozhraní WPF.
Vyloučení souborů generovaných šablonami T4 z analýzy klonování kódu
Šablony umístěte do podadresáře projektu sady Visual Studio.Nazvěte ho například GeneratedFiles.
Přidejte do projektu nový textový soubor a změňte jeho název a příponu na t4Exclusions.codeclonesettings
Změňte obsah souboru následovně:
<CodeCloneSettings> <Exclusions> <File>GeneratedFiles\*.cs</File> </Exclusions> </CodeCloneSettings>