Codelens er en av de virkelig nyttige nyvinningene i Visual Studio 2013.  For de som ikke kjenner til Codelens, så er det hva de kaller en Heads-up display feature i Visual Studio Ultimate som gir deg live informasjon i koden av forskjellig art.  De forskjellige tingene som vises kalles “indikatorer”, og det finnes en hel serie av disse – flere vil helt sikkert komme fremover også.

Den fungerer utmerket stand-alone, men om du er koplet til en “on-premise” TFS 2013 server får du ytterligere indikatorer.

 

For en klasse kan et sett med  Codelens indikatorer se slik ut:

SNAGHTML9ac63e

Codelens legger seg på linjen over klassedeklarasjonen som en slags ekstra linje – men den inngår ikke i filen (linjeantallet øker ikke) – det er en ren visuell Indikator, som dog er aktiv !  Om man klikker på en av indikatorene får man opp mer detaljer som vist her for Author/endringer indikatoren. Da listes alle endringene opp som er gjort med denne klassen, med hvem som har gjort endringen og når den er gjort, sammen med kommentaren til checkin.  Her ser man også at det er ganske lurt å ha med kommentarer på sine checkins :-)

Og, om du også anvender workitems – du gjør vel det – så kommer de også frem, under de changesettene som de hører til.

image

Og ja – om du dobbelklikker workitemene, så kommer du rett inn i workitem formen!  Man ser altså fra koden hvilke workitems som den koden har vært involvert i.  Et godt eksempel her er å se hvor mange bugs som denne koden er involvert i.  Dette er nyttig informasjon !

 

Merk også den blå indikatoren for Local Version.  Her ser du direkte om du jobber med den siste koden eller ikke, og eventuelt hvor langt bak du er. 

 

Richard Banks har også en utmerket MSDN blog post om Code Lens.

Referanser

Referanselisten vises for både klasser og metoder, og uttrykker inngående kopling.  (Et annet uttrykk for dette er Afferent Coupling.)  Merk at Coupling i Metrics analysen viser det motsatte (Efferent Coupling), dvs hvor mange andre klasser den aktuelle metoden/klassen er avhengig av. 

Om vi klikker indikatoren for referanser for en constructor får vi opp en pen liste over metodene som refererer denne klassen, og de filene som de tilhører:

image

Vi kan også klikke “Show on Code Map” og da genereres den aktive avhengighetsgrafen til høyre.  Code Map er aktiv – det vil si at om du undrer over en av nodene, trykk den, og gå direkte til koden!  Høyreklikk noden og få opp en serie med mulige operasjoner, f.eks. finn og vis omkringliggende klasse.

 

Forbedret metrics analyse

For en metode ser listen over indikatorer litt annerledes ut enn for en klasse, spesielt interessant er Maintainability indikatoren, eller Code Health indikatoren som den mer korrekt heter..

image 

 

Denne indikatoren er litt spesiell og fortjener en del omtale. 

For det første så er det den aller første extension indikatoren !  Codelens er konstruert for å være utviderbar, og Microsoft har sluppet denne, både som et eksempel på hvordan nye indikatorer kan se ut og for å vise hvordan man kan tenke seg en ny metrics analyse.   Du kan laste ned denne extension fra Visual Studio gallery her.  En av hovedarkitektene bak Codelens er David Starr, og du kan lese mer på hans blog om denne indikatoren.

For det andre har denne indikatoren fått grensene satt riktig (Se min 5 år -gamle blogpost  om dette).  Maintainability går fra 0-100, hvor 100 er best.  Grønt område er nå fra 60-100, gult område fra 40-60 og rødt under 40.  Perfekt !

Det tredje som er suverent med denne er at den beregner Cykomatisk compleksitet korrekt.  Cyklomatisk kompleksitet er et mål på hvor mange forgreninger metoden har, og kan f.eks. si noe om hvor mange variasjoner du trenger i dine unit tester.   Det som er blitt korrekt er at den beregner korrekt for lamda uttrykk.  Ta følgende kode som eksempel:

image

Kjører vi Metrics på denne får vi:

image

Cyklomatisk kompleksitet er 5 !  Men, denne koden har ikke 5 forgreninger.  Dette resultatet gir ingen mening. 

Om vi nå ser på hva Codelens og Code Health indikatoren sier:

image

For det første er Cyklomatisk kompleksitet tilbake på der vi skulle forventet,  1 !

For det andre ser vi at maintainability også er høyere, 86 i stedet for 74, som virker fornuftig i og med at CC er redusert.

 

Det fjerde som er bra med denne indikatoren er at den går fra koden til metrics!  Den vanlige metrics analysen viser resultatene, og du kan sortere, lete opp og sammenligne mellom metoder/klasser.  Du kan gå fra metrics analysen til koden, ved å klikke ønsket linje, og da hoppe rett til koden. Men, når du er tilbake i koden, så er du like klok.   Health indikatoren viser deg derimot metrics informasjonen når du er i koden.  Du får et kodefokus som er meget bra !  Og, utviklere flest – de befinner seg i koden!

Det femte som er bra – litt snedig også – legg merke til at vi har ikke kompilert koden ennå (!!!) – og metrics vises!  For vanlig metrics analyse må man kompilere først.  Code Health indikatoren benytter Roslyn i bakgrunnen – den nye compiler teknologien – og det gjør at koden analyseres uten at man behøver å kompilere!  Det betyr også at du bare gjør endringer, og metrics endrer seg umiddelbart.  Veldig coolt !

Det sjette som er bra – den viser også forandringene fra forrige gang du gjorde noe.  Refaktorering skal jo være positiv, dvs at metrics skal forbedres når du refaktorer.  Med Code Health indikatoren så ser du endringene i parantes bak de absolutte verdiene.  Dette er utrolig nyttig når du arbeider med nettopp refaktorering. 

 

Unit Testing

Kompilere koden ja……..  det er vel neste steg, og da får vi se enda en indikator i arbeid, i to forskjellige varianter.

Først for produksjonskoden vi jobber med, etter kompileringen

image

Indikatoren viser om testene har passert eller ikke rød/grønn indikasjon og eventuelt oransje warning om testen er “skipped”.  Klikker man på indikatoren får man opp listen over alle testene og kan se på resultatene individuelt.   Man også starte en test kjøring for den aktuelle metoden direkte fra denne indikatoren og da kjøres enten de man selekterer i listen over, med Run, eller samtlige med Run All.   Dette er tilsvarende som for metrics, Test Explorer viser koden sett fra testenes synsvinkel, men sier lite om hvilke metoder som da testes.  Test indikatoren går andre veien og ser testene fra kodens synsvinkel, noe som igjen er veldig utvikler sentrisk.

Dersom vi ser på hvordan dette ser ut fra test kodens side, får vi følgende bilde:

image

Man ser direkte om den aktuelle testen feilet eller var ok.  Om den feilet, som vist ovenfor, så får man opp meldingen fra testen.  Videre kan man da kjøre den aktuelle testen,, eventuelt debugge den, direkte fra indikatoren.

Indikatoren kan også være – blå – kun oppdaget, eller dimmed – ikke kjørt, et test filter er i bruk som stopper den aktuelle testen.

NUnit og XUnit

Ja, dette fungerer uansett testframework!

Se f.eks. denne lille runddansen med kode, test kode med NUnit, sterkt typede Categoryattributter, Text Explorer og Codelens i pent samspill!

image

 

Visual Studio Ultimate

Codelens er en Visual Studio Ultimate feature, og det er kanskje ikke alle som har denne versjonen.  Men, nå er det jo straks jul !  Ta en prat med sjefen din – vis han denne artikkelen – forklar han hvor mye mer effektiv du kommer til å bli med dette - og si at i år ønsker du deg virkelig Ultimate til Jul!  

 

God Jul og Godt Nytt År!

 

Terje Sandstrom picture Terje Sandsstrøm arbeider som Chief Software Architect i Inmeta Consulting AS
Han er også en Microsoft ALM MVP.
Du kan lese mer på hans blog,
eller følge han på Twitter @OsirisTerje