Koodin laadun hifistelyä – Maven, AntRun, SonarQube

Hetken SonarQubea käytettyäni olen suuri fani. Kun koodaustiimi saa jatkuvasti metriikkaa tekemisistään, on helpompi tehdä asiat alusta asti oikein ja välttää teknistä velkaa. Olen jo aiemmin ollut ihastunut staattisiin lähdekoodianalyysiohjelmistohin, mutta Sonar on – puutteistaankin huolimatta – paljon laajempi ja osittain helppokäyttöisempi paketti.

Tässä pari uutta havaintoa matkan varrelta:

Sonarista saa näppärästi web service rajapinnan kautta metriikkaa ulos siitä miten homma etenee – näistä voi vuorostaan jopa päräytellä näppäriä graafeja tai radiaattoreita.

Esim: http://munsonarserveri:9000/api/timemachine?resource=1&metrics=coverage

Pajauttaa aikakoneesta koodin kattavuusmetriikkaa tämännäköiseen json muotoon:

[{"cols":[{"metric":"coverage"}],"cells":[{"d":"2014-06-04T15:42:12+0300","v":[0.0]},{"d":"2014-06-05T09:21:24+0300","v":[11.9]},{"d":"2014-06-09T10:22:23+0300","v":[12.8]},{"d":"2014-06-10T08:03:49+0300","v":[12.8]},{"d":"2014-06-11T07:36:49+0300","v":[14.1]},{"d":"2014-06-11T13:59:50+0300","v":[18.3]}]}]

Tuossapa tietysti sampleja joissa aikaleima, ja testikattavuuden prosentuaalinen määrä – toivon mukaan nouseva trendi.

Samoin irtoaa esim. tech debt mittari, LOC mittari, jne, joilla pystyy seuraamaan mitä tapahtuu. Nämä vaikka Android kännykän näytölle pyörimään tai robotti motkottamaan jos ylityksiä tapahtuu.

Toinen huomio: Javascript projektissa ei alkuun code coverage mittailut toimineet, vaikka lcov kattavuustiedostoja generoimmekin. Keksin pari heikkoutta Maven projektihässäkässä Sonarin suhteen:

– Sonarista on jokin aika sitten poistettu käytöstä parametrit joilla voi kertoa mistä junit testiraportit löytyvät. Monet tutorialit viittaavat vielä niihin, mutta ne eivät siis toimi.

– Grunt rakentelee kyllä iloisesti lcov-standardin mukaisia raportteja Karma -testeistä. Mutta ne menevät ikävästi kansioon jonka nimessä on selain ja käyttöjärjestelmä – jotka voivat vaihdella, ja joissa on välilyöntejä. Toinen ongelma oli lcov tiedoston sisältö – siellä oli suhteellisia polkuja jotka eivät olleet suhteessa Maven projektiin, vaan testikonfiguraatioiden paikkaan.

Joten muutama korjaus joita tein:

Ensinksi AntRun plug-in kopsaamaan lcov tiedosto fiksumpaan ja vakioidumpaan paikkaan – ja regexp replace fiksaamaan nuo polut:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.7</version>
  <executions>
    <execution>
      <id>copy-lcov-file-to-target</id>
      <phase>test</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <skip>${skipTests}</skip>
       <target>
         <copy todir="target" flatten="true">
           <fileset dir="target">
             <include name="surefire/PhantomJS*/lcov.info" />
           </fileset>
         </copy>
         <replaceregexp byline="true"
 file="${basedir}/target/lcov.info"
 match="SF:./app/"
 replace="SF:src/main/frontend/app/" />
       </target>
      </configuration>
    </execution>
  </executions>
</plugin>

Sitten vain sonaria varten yksi property asetus Maven pom.xml tiedostoon:

<properties>
    <sonar.javascript.lcov.reportPath>target/lcov.info</sonar.javascript.lcov.reportPath>
</properties>

Ja näin alkaa tippumaan testikattavuudesta raportteja.

Protractor alkoi myös tiputtelemaan JUnit yhteensopivia raportteja kun lisäili sen konfiguraatiotiedostoon tällaista:

 onPrepare: function() {
   require('jasmine-reporters');
   jasmine.getEnv().addReporter(
     new jasmine.JUnitXmlReporter('../../../target/surefire', true, true,'e2e-TEST-'));
 },

Siinäpä nämä tällä kertaa. Sonarin aikakone – time machine – antaa mukavaa metriikkaa siitä miten tarkkailija muuntaa tarkkailtavaa – quality is in the eye of the beholder.

timemachine

 

 

 

Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s