1 / 59

Statinės kodo analizės įrankiai

Statinės kodo analizės įrankiai. Julius Vitkauskas. Vilnius 2013. Planas. Trumpai apie statinę kodo analizę FxCop NDepend Nitriq StyleCop Išvados. Trumpai apie statinę kodo analizę. Statinė kodo analizė.

dana
Download Presentation

Statinės kodo analizės įrankiai

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Statinės kodo analizės įrankiai Julius Vitkauskas Vilnius 2013

  2. Planas • Trumpai apie statinę kodo analizę • FxCop • NDepend • Nitriq • StyleCop • Išvados

  3. Trumpai apie statinę kodo analizę

  4. Statinė kodo analizė • Statinė (priešingai, negu dinaminė) kodo analizė yra vykdoma nepaleidžiant pačios programos. Dažniausiai analizuojami išeities tekstai, tačiau statinei analizei tinka ir objektinis kodas. Automatinę analizę galima atlikti pasitelkiant įvairius tam skirtus įrankius, „rankinė“ tokio tipo analizė – bandymas suprasti programos išeities tekstus, kodo peržiūros.

  5. Įrankiai • Įrankius galima būtų suskirstyti į: • Kodo pažeidimų aptikimo įrankiai (angl. CodeviolationdetectionTools) • Kokybės metrikos įrankiai (angl. QualityMetricTools) • Stiliaus tikrinimo įrankiai (angl. Style CheckingTools)

  6. Kodo pažeidimų aptikimo įrankiai

  7. FxCop • Nemokamas įrankis, turintis virš 200 įmontuotų kodo patikrinimų. • Tikrinami sukompiliuoti .dll/.exe failai, o ne išeities tekstai. • Galima apsirašyti savo taisykles .dll faile pasinaudojus FxCop SDK. • Prieinama tiek grafinė, tiek komandinės eilutės sąsaja.

  8. FxCop • FxCop komandinės eilutės sąsaja gana gerai pritaikyta integracijai su kitais programinės įrangos procesą palaikančiais įrankiais: • Rezultatai gali būti išvedami XML formatu. • Rezultatams gali būti pritaikyta XSL transformacija. • Sėkmingos analizės metu gali būti sukurtas tai patvirtinantis failas.

  9. FxCop - aprašymas <?xmlversion="1.0"encoding="utf-8"?> <RulesFriendlyName="MyCustomRules"> <RuleTypeName="AllTypeNamesShouldEndInTest" Category="CustomRules.Naming"CheckId="CR1234"> <Name>Alltypenamesshouldendin'Test'</Name> <Description>Alltypesshouldendin 'Test'‚ sothat I knowthey'retests.</Description> <Url>http://example.com/TestingRules</Url> <Resolution>The name oftype {0} doesnotendwiththesuffix 'Test'. Addthesuffix to thetype name.</Resolution> <MessageLevelCertainty="100">Warning</MessageLevel> <FixCategories>Breaking</FixCategories> <Email/> <Owner/> </Rule> </Rules>

  10. FxCop - kodas publicoverrideProblemCollectionCheck(TypeNodetype) { if (!type.Name.Name.EndsWith("Test")) { varresolution = GetResolution(type.Name.Name); varproblem = newProblem(resolution, type) { Certainty = 100, FixCategory = FixCategories.Breaking, MessageLevel = MessageLevel.Warning }; Problems.Add(problem); } returnProblems; }

  11. Visual Studio Achievements • Linksmas Visual Studio papildinys. Leidžia „atrakinti“ pasiekimus padarius vieną ar kitą dalyką. • Naudoja FxCop, veikia programos kompiliavimo metu.

  12. Kokybės metrikos įrankiai

  13. Kas yra kodo kokybė? • Koks programos kodas yra kokybiškas? • Greitai veikiantis? • Kompaktiškas? • Lengvai plečiamas? • Lengvai palaikomas?

  14. Kas yra kodo kokybė? • kokýbė sf. (1) J, kokỹbė (2) [K], NdŽ; SD74 • 1. daikto ypatybė, savybė: Visa tai, kuo viena medžiaga skiriasi nuo kitos, kas apibrėžia ją kaip tam tikrą medžiagą, mes vadiname medžiagos kokybe rš. Taigi ne tik kiekybė pereina į kokybę, bet ir atvirkščiai – kokybė pereina į kiekybę rš. Būdvardis aptaro daikto kokybę, būdą A.Baran. • 2. tinkamumo laipsnis: Pagerėjo gydomojo ir profilaktinio gyventojų aptarnavimo kokybė sp.Šieno kokybė priklauso ir nuo tinkamo išdžiovinimo sp.

  15. Kas yra kodo kokybė? • Pažvelgę į kokybės apibrėžimą, galime padaryti išvadas, kad kodo kokybės vienareikšmiškai apibrėžti negalime ir matavimo įrankiai turi mums leisti apibrėžti ypatybes, pagal kurias galėsime vertinti kokybę (tinkamumo laipsnį).

  16. NDepend

  17. NDepend • NDependyra .NET programų statinės analizės įrankis. Šis įrankis palaiko didelį kodo metrikų skaičių, leidžia vizualizuotipriklausomybes. Įrankiu taip pat galima palyginti skirtingas kodo versijas. Naudotojai gali aprašyti taisyklesLINQ užklausomis. Kodo taisyklės gali būti tikrinamos programoje, Visual Studio aplinkoje ar tęstinės integracijos metu.

  18. NDepend Pagrindinės NDependgalimybės: • Priklausomybių vizualizacija (naudojant priklausomybių grafus ir priklausomybių matricas) • PĮ metrikos (NDependpalaiko 82 kodo metrikas: ciklomatinį sudėtingumą, sukibimo,rišlumo, kodo padengimo testais procentą ir t.t.) • Code Quality LINQ kalba išrinkti norimam kodui • Grafinis, komandinės eilutės ir Visual Studio interfeisai. • Kelių kodo versijų palyginimas

  19. Ndepend - Ataskaita

  20. Ndepend - Grafas Pagal eilučių skaičių Pagal ciklomatinį sudėtingumą

  21. NDepend – Priklausomybių matrica

  22. NDepend - Metrikos

  23. Ndepend – abstraktumas / nestabilumas

  24. Ndepend - CQLinq • Kurios klasės per sudėtingos? from t inJustMyCode.Typeswhere t.NbLinesOfCode > 500 || t.NbILInstructions > 3000 orderbyt.NbLinesOfCodedescending select new { t, t.NbLinesOfCode, t.NbILInstructions,t.Methods, t.Fields }

  25. Ndepend - CQLinq • Kuris metodas pasudėtingėjo? from m in JustMyCode.Methods.Where(m1 => !m1.WasAdded())letoldComplexity = m.OlderVersion().CyclomaticComplexityletnewComplexity = m.CyclomaticComplexitywhereoldComplexity > 8 && oldComplexity < newComplexityselect new { m, oldComplexity, newComplexity }

  26. Ndepend - CQLinq • Klasės be būsenos, kurias galima būtų paversti į statines? from t inJustMyCode.Typeswhere t.IsClass && !t.IsStatic && t.InstanceFields.Count() == 0 && t.NbInterfacesImplemented == 0 && t.NbChildren == 0 && t.DepthOfDeriveFrom("System.Object") == 1 select t

  27. Ndepend - CQLinq • Ar yra tokių interfeisų, kurie neprasideda “I” raide? from t inJustMyCode.Types where t.IsInterface && t.Name[0] != 'I' select t

  28. Ndepend - CQLinq • Kokiose klasėse yra blogas rišlumas? from t inJustMyCode.Typeswhere t.LCOMHS > 1 && t.NbFields > 10 && t.NbMethods >10 orderby t.LCOMHS descending select new { t,t.LCOMHS, t.NbMethods, t.NbFields }

  29. NDepend • NDepend komandinės eilutės sąsaja gerai pritaikyta integracijai su kitais programinės įrangos procesą palaikančiais įrankiais: • Rezultatai gali būti išvedami XML formatu. • Rezultatams gali būti pritaikyta XSL transformacija.

  30. Nitriq

  31. Nitriq • Nitriq yra nemokamas įrankis, kuris kai kuriais atžvilgiais yra panašus į NDepend, tačiau turi mažiau galimybių. • Panašumai: • Naudojama Linq sintakse paremta kalba kodui išrinkti. • Ištrinkta kodo dalis parodoma vizualiai lange. • Galima sugeneruoti kodo atitikimo taisyklėms ataskaitą. • Skirtumai: • Nepalaikomas ryšių tarp kodo nustatymas (t.y. ryšių grafai, matricos) • Neveikia su naujausiomis Windows versijomis (8 / 8.1 / 2012 / 2012 R2)

  32. Nitriq – Treemap komponentas

  33. Nitriq – LINQ • Kokius metodus reiktų pertvarkyti? from method in Methods where (method.Cyclomatic > 25 || method.PhysicalLineCount > 200 || method.TypesUsed.Count > 30) && method.Type.IsInCoreAssembly select new { method.MethodId, method.Name, method.Cyclomatic, method.PhysicalLineCount, OutTypes = method.TypesUsed.Count, method.ParameterCount };

  34. Nitriq – LINQ • Kur yra per didelis paveldėjimo skaičius? from type in Types wheretype.InheritanceDepth > 5 select new { type.TypeId, type.Name, type.InheritanceDepth };

  35. Nitriq – LINQ • Kurie laukai nėra niekada nustatomi? from field in Fields wherefield.SetByMethods.Count == 0 && field.IsPrivate && !field.IsConstant&& field.Type.IsInCoreAssembly select new { field.FieldId, field.Name, field.FullName };

  36. Nitriq • Nitriq turi komandinės eilutės sąsają, tačiau ji gana ribota: • Ar buvo rasta klaidų, galima sužinoti iš proceso išeities kodo. • Detalesni rezultatai išvedami tik HTML formatu.

  37. Stiliaus tikrinimo įrankiai

More Related