{"id":592,"date":"2009-06-21T13:39:37","date_gmt":"2009-06-21T12:39:37","guid":{"rendered":"http:\/\/minibrain.wordpress.com\/2009\/06\/21\/clone-detective-fr-visual-studio\/"},"modified":"2009-06-21T13:39:37","modified_gmt":"2009-06-21T12:39:37","slug":"clone-detective-fr-visual-studio","status":"publish","type":"post","link":"https:\/\/abramowitsch.de\/blog\/?p=592","title":{"rendered":"Clone Detective f\u00fcr Visual Studio"},"content":{"rendered":"<p>Heute bin ich auf ein cooles Add-On f\u00fcr Visual Studio aufmerksam geworden: Der <a href=\"http:\/\/clonedetectivevs.codeplex.com\/\" target=\"_blank\">Clone Detective<\/a> f\u00fcr Visual Studio.<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;border-width:0;\" title=\"image\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image_thumb.png\" width=\"244\" height=\"161\" \/><\/a>&#160;<\/p>\n<p>Als Engine hinter Clone Detective kommt ConQAT von der TU M\u00fcnchen zum Einsatz: <a href=\"http:\/\/conqat.cs.tum.edu\/index.php\/Download\" target=\"_blank\">http:\/\/conqat.cs.tum.edu\/index.php\/Download<\/a><\/p>\n<p>Nach der Installation gibt es in der \u201cAnsicht\u201d \u2013&gt; \u201cWeitere Fenster\u201d neue Eintr\u00e4ge<a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image1.png\">:<\/a><\/p>\n<ul>\n<li>Clone Explorer <\/li>\n<li>Clone Intersections <\/li>\n<li>Clone Results <\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;border-width:0;\" title=\"image\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image_thumb1.png\" width=\"244\" height=\"131\" \/> <\/p>\n<p>Zur Demonstration der einzelnen Fenster habe ich mir mal die Freiheit genommen, den Quellcode von iTextSharp auf Code-Duplikate zu untersuchen. <\/p>\n<h2>Clone Explorer<\/h2>\n<p>Die Clone Explorer startet die Analyse des Quellcodes und zeigt in einer \u00dcbersicht das Resultat:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;border-width:0;\" title=\"image\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image_thumb2.png\" width=\"244\" height=\"242\" \/><\/a> <\/p>\n<p>Die Resultate lassen sich nun noch speziell gruppieren (hier: nach duplizierten Codezeilen):<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;border-width:0;\" title=\"image\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image_thumb3.png\" width=\"244\" height=\"242\" \/><\/a> <\/p>\n<p>Ebenfalls unterst\u00fctzt wird das Importieren und Exportieren des Clone-Berichts. Selbstverst\u00e4ndlich lassen sich die Such-Optionen noch konfigurieren:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;border-width:0;\" title=\"image\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image_thumb4.png\" width=\"244\" height=\"184\" \/><\/a> <\/p>\n<p>F\u00fcr meinen Geschmack war das allerdings schon gut genug \ud83d\ude42<\/p>\n<h2>Code Intersections<\/h2>\n<p>Code Intersections stellen \u2013 wie der Name schon sagt- \u00dcberschneidungen im Code dar. Im folgenden Beispiel enth\u00e4lt die Datei BarcodeInter25.cs 15 Code\u00fcberschneidungen mit der Dtei BarcodePostnet.cs:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image5.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;border-width:0;\" title=\"image\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image_thumb5.png\" width=\"236\" height=\"244\" \/><\/a> <\/p>\n<p>Das Diagramm zeigt das Vorkommen der \u00dcberschneidung in der Datei. Mit der rechten Maustaste kann nun noch in den Ergebnissen gesucht werden und die betreffende Stelle \u00fcber einen Doppelklick im Editor ge\u00f6ffnet werden.<\/p>\n<p>Im Editor wird an der linken Seite eine lila Markierung dargestellt:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image6.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;border-width:0;\" title=\"image\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image_thumb6.png\" width=\"244\" height=\"144\" \/><\/a> <\/p>\n<p>Diese zeigt die Stelle der Codeduplikate im Code an.<\/p>\n<h2><\/h2>\n<h2>Clone Result<\/h2>\n<p>Das Fenster Clone Result zeigt das Code-Duplikat aus dem Editor nochmal an:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image7.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display:inline;border-width:0;\" title=\"image\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2009\/06\/image_thumb7.png\" width=\"236\" height=\"244\" \/><\/a> <\/p>\n<h2>Fazit<\/h2>\n<p>Nicht jedes Duplikat ist auch wirklich ein Duplikat. Viele Fundstellen hingegen haben mir pers\u00f6nlich weitergeholfen, Redundanzen zu verringern und nochmals kritisch \u00fcber meinen Code zu sehen.<\/p>\n<h2>Download<\/h2>\n<p>Das Programm kann auf CodePlex kostenlos (inkl. Source Code) heruntergeladen werden:<\/p>\n<p><a href=\"http:\/\/clonedetectivevs.codeplex.com\/\">http:\/\/clonedetectivevs.codeplex.com\/<\/a><\/p>\n<\/p>\n<\/p>\n<\/p>\n<\/p>\n<p>Das Installer-Paket ist ca. 14MB gro\u00df.<\/p>\n<p>Also Systemvoraussetzungen werden folgende genannt:<\/p>\n<ul>\n<li>Visual Studio 2008 Standard oder besser      <br \/>(sorry, Visual Studio 2008 Express Editions unterst\u00fctzen keine AddIns) <\/li>\n<li>Java 1.5.0_01 oder neuer      <br \/>(ConQAT l\u00e4uft unter Java) <\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Heute bin ich auf ein cooles Add-On f\u00fcr Visual Studio aufmerksam geworden: Der Clone Detective f\u00fcr Visual Studio. &#160; Als Engine hinter Clone Detective kommt ConQAT von der TU M\u00fcnchen zum Einsatz: http:\/\/conqat.cs.tum.edu\/index.php\/Download Nach der Installation gibt es in der \u201cAnsicht\u201d \u2013&gt; \u201cWeitere Fenster\u201d neue Eintr\u00e4ge: Clone Explorer Clone Intersections Clone Results Zur Demonstration der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[16,20],"tags":[29,84,92],"class_list":["post-592","post","type-post","status-publish","format-standard","hentry","category-software","category-visual-studio-net","tag-addins","tag-tools","tag-visual-studio"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Ug90-9y","_links":{"self":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=592"}],"version-history":[{"count":0,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/592\/revisions"}],"wp:attachment":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}