SlideShare a Scribd company logo
1 of 32
Download to read offline
Make use of Sonar on your
mobile developments

- It’s easy and useful!

October 26th, 2013

© OCTO 2013

Avenue du Théâtre 7
1005 Lausanne - SUISSE

Tél : +41 (0) 21 312 94 15
Fax : +41 (0) 21 312 94 16
www.octo.ch

1
Who We Are
Romain Felden: Java / Android developer
Cyril Picat: C++, iOS, Groovy/Grails
developer
OCTO Technology

Jenkins Quality
Dashboard
iOS

Android
Maven
Plugin

Sonar
Android
Lint Plugin

Quality Analysis
Tools for
Android

Sonar
Objective-C
Plugin

2
Agenda
1

QUALITY TOOLS ON MOBILE

2

SONAR PLUGINS PRESENTATION

3

HOW-TO & DEMO IOS

4

HOW-TO & DEMO ANDROID

5

CONCLUSION

3
Sonar For the Uninitiated
Manage quality of your software
Across languages/platforms (> 20)
Across projects
Across time
Across multiple axis/depths

A web app for (re)viewing, a back-end for analysis

4
Agenda

1

QUALITY TOOLS
ON MOBILE

5
Quality Tools on Mobile
s
s
in
kin
k
)
n
Je
en
od
V
e5
J
c
L
d
n
(X
2)
4) e (L for )
s o (Xco
c
i
e
e
g
o
ge
t
od
C
od erag gin lan alys
/cl
ra
e
Bo bjXc
Xc ov
lu (C an
nt
v
(
(
/
p
u
o
O
t
it
nit e c de Lint ality
nit ar
g Uni M
co
e c Un
U
c
U
d
d
n
o
an C
GT Co
XC So
slo
O
GH
OC Co Xc OC Qu
Cl
)
e3

19xx

2007

2009

2011

M)

2012

2013

2008
First iOS
SDK

TESTS

QUALITY
Quality Tools on Mobile

Sonar
Objective-C
Plugin

sic
a
- Bics
1
.0. etr
v0 m

n
sa
t
t
L
es
es ge
C
u
T
eq
- O .1 - era
r
ull
0.2 v0.3 cov
v
P
int

7

2012/06

2013/07

2013/10

d
Quality Tools on Mobile

d
n
oi ugi
r
gin
)
nd t-pl
u
ase )
pl )
r A lin
le e
e
d
fo
t r leas
oi mma
t ol s oi d
s e
r
n
(fir t r
nd EclE
Li To ndr
a
a
le
s
a
id
y
n- Co (
tur a (la
sty
r
e o
ro alit ark
e
c
n
av aC
n d Qu
ob Emm
he
m
C
A
J
so
C

2001

2004 2005

2009

2008
First Android SDK

2011 2012 2013
Agenda

2

SONAR PLUGINS
PRESENTATION

9
Sonar Plugins Features
Android
Complexity
Design
Documentation
Duplications
Issues
Size
Tests

√
√
√
√
√ (140)
√
√

iOS

X (*)
X
√
√
√ (58)
√ (*)
√

(*) integrated
as issues

(*) only LOC
and files

10
Sonar Plugin Architecture

Sonar
Sonar ObjC
Platform

Quality
management

Sonar Core

gcovr

oclint

xcodebuild / xctool

sonar-runner

OCLint
sensor

xctool

run-sonar.sh

Build

Cobertura
sensor

Measures/
Issues
computation

Surefire
sensor

Measures/
Issues
integration

Squid plugin

Sonar Objective-C plugin

11
Sonar Plugin Architecture

Sonar
Android Plugin
Platform

Quality
management

Measures/
Issues
computation
ant

maven

Sonar Android plugin

PMD
plugin

JaCoCo
plugin

Checkstyle
plugin

Findbugs
plugin

Surefire
plugin

Squid plugin

Measures/
Issues
integration

Sonar Core

gradle

Build

12
Testing / Quality Tools Integration

Kiwi

UI
Automation

KIF

Frank /
UISpec

UI Testing

GTM

BDD

GHUnit

√

Unit Testing

...

√ X

X

X

X

X

X

X

OCUnit /
XCUnit

OCLint

Quality

*

*

* *

= in roadmap

13
Testing / Quality Tools Integration

Robolectric

UIAutomator

PMD

Checkstyle

Findbugs

Lint

Quality checks

Robotium

UI

JUnit

Unit and Integration
Testing

√

√

√

√

√

√

√

√

14
Agenda

3

HOW-TO & DEMO

15
How-to

Install Sonar, Sonar Runner and Sonar
Objective-C plugin
Install prerequisites (xctool, gcovr, oclint)
Configure your project
Run analysis

16
Configure your project

Copy run-sonar.sh in your Xcode project
root folder and make it executable
Copy sonar-project.properties in your Xcode
project root folder
Edit the sonar-project.properties file to
match your Xcode iOS/MacOS project

17
Demo

https://github.com/dennisreimann/ioctocat

(*) https://github.com/cyrilpicat/ioctocat
18
sonar-project.properties

#	
  Project	
  description
sonar.projectKey=my-­‐project
sonar.projectName=My	
  project
sonar.projectVersion=1.0
sonar.projectDescription=Fake	
  description
	
  
#	
  Path	
  to	
  source	
  directories	
  
sonar.sources=srcDir1,srcDir2
	
  
#	
  Xcode	
  project	
  configuration	
  (.xcodeproj	
  
or	
  .xcworkspace)
sonar.objectivec.project=myApplication.xcodeproj	
  
sonar.objectivec.appScheme=myApplication
sonar.objectivec.testScheme=myApplicationTests

X
Run it!

>	
  ./run-­‐sonar.sh

X
Jenkins Quality Dashboard

Almost feature
complete
No code checks
Timeconsuming,
error prone and
intrusive
Weak reporting
and
configuration

19
How-to using maven

Install Sonar and Sonar Android plugin
Add maven profile(s) to your module(s)
Connect ADB in root mode
Run analysis

20
Maven structure

Parent module
Application module
Library module
Integration testing module

21
Demo

Morse Flash
https://github.com/jayway/maven-android-plugin-samples

22
Maven profiles
parent module
<profile>
	 	 	 	 <id>sonar</id>
	 	 	 	 <modules>
	 	 	 	 	 	 	 	 <module>morse-lib</module>
	 	 	 	 	 	 	 	 <module>morseflash-app</module>
	 	 	 	 	 	 	 	 <module>morseflash-instrumentation</module>
	 	 	 	 </modules>
	 	 	 	 <properties>
	 	 	 	 	 	 	 	 <sonar.profile>Android	 Lint</sonar.profile>
	 	 	 	 	 	 	 	 <sonar.jacoco.excludes>*test*</sonar.jacoco.excludes>
	 	 	 	 	 	 	 	 <sonar.jacoco.itReportPath>target/jacoco-it.exec</sonar.jacoco.itReportPath>
	 	 	 	 	 	 	 	 <sonar.jacoco.reportPath>jacoco.exec</sonar.jacoco.reportPath>
	 	 	 	 	 	 	 	 <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
	 	 	 	 	 	 	 	 <sonar.skippedModules>morseflash-instrumentation</sonar.skippedModules>
	 	 	 	 	 	 	 	 <sonar.exclusions>**/org/jacoco/**</sonar.exclusions>
	 	 	 	 	 	 	 	 <jacoco.version>0.6.2.201302030002</jacoco.version>
	 	 	 	 </properties>
	 	 	 	 <dependencyManagement>
	 	 	 	 	 	 	 	 <dependencies>
	 	 	 	 	 	 	 	 	 	 	 	 <dependency>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <groupId>org.jacoco</groupId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <artifactId>org.jacoco.agent</artifactId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <version>${jacoco.version}</version>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <classifier>runtime</classifier>
	 	 	 	 	 	 	 	 	 	 	 	 </dependency>
	 	 	 	 	 	 	 	 </dependencies>
	 	 	 	 </dependencyManagement>
	 	 	 	 <build>
	 	 	 	 	 	 	 	 <pluginManagement>
	 	 	 	 	 	 	 	 	 	 	 	 <plugins>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <plugin>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <groupId>org.jacoco</groupId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <artifactId>jacoco-maven-plugin</artifactId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <version>${jacoco.version}</version>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </plugin>
	 	 	 	 	 	 	 	 	 	 	 	 </plugins>
	 	 	 	 	 	 	 	 </pluginManagement>
	 	 	 	 </build>
</profile>

X
Maven profiles
application module (includes unit testing)
<profile>
	 	 	 	 <id>sonar</id>
	 	 	 	 <dependencies>
	 	 	 	 	 	 	 	 <dependency>
	 	 	 	 	 	 	 	 	 	 	 	 <groupId>org.jacoco</groupId>
	 	 	 	 	 	 	 	 	 	 	 	 <artifactId>org.jacoco.agent</artifactId>
	 	 	 	 	 	 	 	 	 	 	 	 <classifier>runtime</classifier>
	 	 	 	 	 	 	 	 	 	 	 	 <scope>compile</scope>
	 	 	 	 	 	 	 	 </dependency>
	 	 	 	 </dependencies>
	 	 	 	 <build>
	 	 	 	 	 	 	 	 <plugins>
	 	 	 	 	 	 	 	 	 	 	 	 <plugin>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <groupId>org.jacoco</groupId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <artifactId>jacoco-maven-plugin</artifactId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <executions>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <execution>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <id>instrument-classes</id>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <goals>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <goal>instrument</goal>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </goals>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <configuration>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <excludes>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <exclude>*test*</exclude>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <exclude>*/test/*</exclude>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </excludes>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </configuration>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </execution>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <execution>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <id>restore-instrumented-classes</id>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <phase>package</phase>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <goals>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <goal>restore-instrumented-classes</goal>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </goals>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </execution>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </executions>
	 	 	 	 	 	 	 	 	 	 	 	 </plugin>
	 	 	 	 	 	 	 	 	 	 	 	 <plugin>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <groupId>com.jayway.maven.plugins.android.generation2</groupId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <artifactId>android-maven-plugin</artifactId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <configuration>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <test>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <coverage>true</coverage>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <createReport>true</createReport>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </test>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </configuration>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <extensions>true</extensions>
	 	 	 	 	 	 	 	 	 	 	 	 </plugin>
	 	 	 	 	 	 	 	 </plugins>
	 	 	 	 </build>
</profile>

X
Maven profiles
integration testing module
<profiles>
	 	 	 	 <profile>
	 	 	 	 	 	 	 	 <id>sonar</id>
	 	 	 	 	 	 	 	 <build>
	 	 	 	 	 	 	 	 	 	 	 	 <plugins>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <plugin>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <groupId>com.jayway.maven.plugins.android.generation2</groupId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <artifactId>android-maven-plugin</artifactId>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <configuration>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <dex>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <!--	 Required	 for	 EMMA	 -->
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <noLocals>true</noLocals>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </dex>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <test>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <coverage>true</coverage>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <createReport>true</createReport>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </test>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </configuration>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <executions>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <execution>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <id>pull-coverage</id>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <phase>post-integration-test</phase>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <goals>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <goal>pull</goal>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </goals>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <configuration>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <pullSource>/data/data/com.simpligility.android.morseflash/files/coverage.ec</pullSource>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 <pullDestination>${project.basedir}/../morseflash-app/target/jacoco-it.exec</pullDestination>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </configuration>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </execution>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </executions>
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 </plugin>
	 	 	 	 	 	 	 	 	 	 	 	 </plugins>
	 	 	 	 	 	 	 	 </build>
	 	 	 	 </profile>
</profiles>

X
Run it!

>	
  mvn	
  -­‐P	
  sonar	
  clean	
  install
>	
  mvn	
  -­‐P	
  sonar	
  sonar:sonar

X
Agenda

5

CONCLUSION

23
Why Use Sonar?

Mobile projects are small and short, is it
applicable?
Three typical uses cases:
Small and short projects
Assessments
Bigger projects (there are!)

24
Stay in touch!
Objective-C plugin: https://github.com/octotechnology/sonar-objective-c
Sonar Android Lint plugin: https://
github.com/SonarCommunity/sonar-android
Quality Analysis Tools for Android:
https://github.com/stephanenicolas/QualityTools-for-Android
http://fr.slideshare.net/jeromevdl/droidconparis-2013

25
Questions/Answers

© OCTO 2013

Avenue du Théâtre 7
1005 Lausanne - SUISSE

Tél : +41 (0) 21 312 94 15
Fax : +41 (0) 21 312 94 16
www.octo.ch

26

More Related Content

What's hot

Building an app with Google's new suites
Building an app with Google's new suitesBuilding an app with Google's new suites
Building an app with Google's new suitesToru Wonyoung Choi
 
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Applitools
 
The Screenplay Pattern: Better Interactions for Better Automation
The Screenplay Pattern: Better Interactions for Better AutomationThe Screenplay Pattern: Better Interactions for Better Automation
The Screenplay Pattern: Better Interactions for Better AutomationApplitools
 
What the heck went wrong?
What the heck went wrong?What the heck went wrong?
What the heck went wrong?Andy McKay
 
Android development with Scala and SBT
Android development with Scala and SBTAndroid development with Scala and SBT
Android development with Scala and SBTAnton Yalyshev
 
HotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushHotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushEvan Schultz
 
Ionic tabs template explained
Ionic tabs template explainedIonic tabs template explained
Ionic tabs template explainedRamesh BN
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM patternNAVER Engineering
 
Appium For Testing Android App
Appium For Testing Android AppAppium For Testing Android App
Appium For Testing Android AppRicha Shrivastava
 
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014John Hann
 
Android RuntimePermissionsExtended
Android RuntimePermissionsExtendedAndroid RuntimePermissionsExtended
Android RuntimePermissionsExtendedNebojša Vukšić
 
企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践Jacky Chi
 
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018Tobias Schneck
 

What's hot (20)

Building an app with Google's new suites
Building an app with Google's new suitesBuilding an app with Google's new suites
Building an app with Google's new suites
 
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
 
The Screenplay Pattern: Better Interactions for Better Automation
The Screenplay Pattern: Better Interactions for Better AutomationThe Screenplay Pattern: Better Interactions for Better Automation
The Screenplay Pattern: Better Interactions for Better Automation
 
What the heck went wrong?
What the heck went wrong?What the heck went wrong?
What the heck went wrong?
 
Devenv command line
Devenv command lineDevenv command line
Devenv command line
 
Android development with Scala and SBT
Android development with Scala and SBTAndroid development with Scala and SBT
Android development with Scala and SBT
 
React native by example by Vadim Ruban
React native by example by Vadim RubanReact native by example by Vadim Ruban
React native by example by Vadim Ruban
 
HotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushHotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePush
 
Extend sdk
Extend sdkExtend sdk
Extend sdk
 
Ionic tabs template explained
Ionic tabs template explainedIonic tabs template explained
Ionic tabs template explained
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
 
Appium For Testing Android App
Appium For Testing Android AppAppium For Testing Android App
Appium For Testing Android App
 
Android in practice
Android in practiceAndroid in practice
Android in practice
 
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
Zero-config JavaScript apps with RaveJS -- SVCC fall 2014
 
React Ecosystem
React EcosystemReact Ecosystem
React Ecosystem
 
Android RuntimePermissionsExtended
Android RuntimePermissionsExtendedAndroid RuntimePermissionsExtended
Android RuntimePermissionsExtended
 
Ant build tool2
Ant   build tool2Ant   build tool2
Ant build tool2
 
企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践
 
Angular js
Angular jsAngular js
Angular js
 
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
UI-Testing - Selenium? Rich-Clients? Containers? @APEX connect 2018
 

Viewers also liked

Qualité de code, sonar, la dette
Qualité de code, sonar, la detteQualité de code, sonar, la dette
Qualité de code, sonar, la detteNovencia Groupe
 
Introdução, instalação e configuração do SonarQube
Introdução, instalação e configuração do SonarQubeIntrodução, instalação e configuração do SonarQube
Introdução, instalação e configuração do SonarQubeDenis Santos
 
MADBike – Destapando la seguridad de BiciMAD (T3chFest 2017)
MADBike – Destapando la seguridad de BiciMAD (T3chFest 2017)MADBike – Destapando la seguridad de BiciMAD (T3chFest 2017)
MADBike – Destapando la seguridad de BiciMAD (T3chFest 2017)Alex Rupérez
 
Gigigo Keynote - Geofences & iBeacons
Gigigo Keynote - Geofences & iBeaconsGigigo Keynote - Geofences & iBeacons
Gigigo Keynote - Geofences & iBeaconsAlex Rupérez
 
NSCoder Keynote - Multipeer Connectivity Framework
NSCoder Keynote - Multipeer Connectivity FrameworkNSCoder Keynote - Multipeer Connectivity Framework
NSCoder Keynote - Multipeer Connectivity FrameworkAlex Rupérez
 
Sonarqube
SonarqubeSonarqube
SonarqubeCDS
 
Gigigo Workshop - Create an iOS Framework, document it and not die trying
Gigigo Workshop - Create an iOS Framework, document it and not die tryingGigigo Workshop - Create an iOS Framework, document it and not die trying
Gigigo Workshop - Create an iOS Framework, document it and not die tryingAlex Rupérez
 
Gigigo Workshop - iOS Extensions
Gigigo Workshop - iOS ExtensionsGigigo Workshop - iOS Extensions
Gigigo Workshop - iOS ExtensionsAlex Rupérez
 
Непрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQubeНепрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQubeVasilii Chernov
 
開発スピードの減速と再加速
開発スピードの減速と再加速開発スピードの減速と再加速
開発スピードの減速と再加速Ken-ichi Kudo
 
iOS Coding Best Practices
iOS Coding Best PracticesiOS Coding Best Practices
iOS Coding Best PracticesJean-Luc David
 
Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析政雄 金森
 
IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針Ken Morishita
 
Continuous Integration for iOS
Continuous Integration for iOSContinuous Integration for iOS
Continuous Integration for iOSCODETE
 
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12Puppet
 
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計Taketo Sano
 
Product Strategy and Product Success
Product Strategy and Product SuccessProduct Strategy and Product Success
Product Strategy and Product SuccessRoman Pichler
 
Startup Metrics for Pirates
Startup Metrics for PiratesStartup Metrics for Pirates
Startup Metrics for PiratesDave McClure
 
Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Conceptsthinkphp
 

Viewers also liked (20)

Qualité de code, sonar, la dette
Qualité de code, sonar, la detteQualité de code, sonar, la dette
Qualité de code, sonar, la dette
 
Introdução, instalação e configuração do SonarQube
Introdução, instalação e configuração do SonarQubeIntrodução, instalação e configuração do SonarQube
Introdução, instalação e configuração do SonarQube
 
MADBike – Destapando la seguridad de BiciMAD (T3chFest 2017)
MADBike – Destapando la seguridad de BiciMAD (T3chFest 2017)MADBike – Destapando la seguridad de BiciMAD (T3chFest 2017)
MADBike – Destapando la seguridad de BiciMAD (T3chFest 2017)
 
Gigigo Keynote - Geofences & iBeacons
Gigigo Keynote - Geofences & iBeaconsGigigo Keynote - Geofences & iBeacons
Gigigo Keynote - Geofences & iBeacons
 
NSCoder Keynote - Multipeer Connectivity Framework
NSCoder Keynote - Multipeer Connectivity FrameworkNSCoder Keynote - Multipeer Connectivity Framework
NSCoder Keynote - Multipeer Connectivity Framework
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
Gigigo Workshop - Create an iOS Framework, document it and not die trying
Gigigo Workshop - Create an iOS Framework, document it and not die tryingGigigo Workshop - Create an iOS Framework, document it and not die trying
Gigigo Workshop - Create an iOS Framework, document it and not die trying
 
Gigigo Workshop - iOS Extensions
Gigigo Workshop - iOS ExtensionsGigigo Workshop - iOS Extensions
Gigigo Workshop - iOS Extensions
 
Непрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQubeНепрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQube
 
開発スピードの減速と再加速
開発スピードの減速と再加速開発スピードの減速と再加速
開発スピードの減速と再加速
 
iOS Coding Best Practices
iOS Coding Best PracticesiOS Coding Best Practices
iOS Coding Best Practices
 
Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析Sonar qubeでちょっと楽しい静的解析
Sonar qubeでちょっと楽しい静的解析
 
IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針
 
Continuous Integration for iOS
Continuous Integration for iOSContinuous Integration for iOS
Continuous Integration for iOS
 
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
Continuous Development with Jenkins - Stephen Connolly at PuppetCamp Dublin '12
 
さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計さらに上を目指すための iOS アプリ設計
さらに上を目指すための iOS アプリ設計
 
Php 100k
Php 100kPhp 100k
Php 100k
 
Product Strategy and Product Success
Product Strategy and Product SuccessProduct Strategy and Product Success
Product Strategy and Product Success
 
Startup Metrics for Pirates
Startup Metrics for PiratesStartup Metrics for Pirates
Startup Metrics for Pirates
 
Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Concepts
 

Similar to Optimize mobile quality with Sonar

Pom configuration java xml
Pom configuration java xmlPom configuration java xml
Pom configuration java xmlakmini
 
Maven 3… so what?
Maven 3… so what?Maven 3… so what?
Maven 3… so what?Abel Muíño
 
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsSpring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsRaghavan Mohan
 
JSF, Facelets, Spring-JSF & Maven
JSF, Facelets, Spring-JSF & MavenJSF, Facelets, Spring-JSF & Maven
JSF, Facelets, Spring-JSF & MavenRaghavan Mohan
 
Automation Frame works Instruction Sheet
Automation Frame works Instruction SheetAutomation Frame works Instruction Sheet
Automation Frame works Instruction SheetvodQA
 
Develop and Deploy your JavaEE micro service in less than 5 minutes with Apac...
Develop and Deploy your JavaEE micro service in less than 5 minutes with Apac...Develop and Deploy your JavaEE micro service in less than 5 minutes with Apac...
Develop and Deploy your JavaEE micro service in less than 5 minutes with Apac...Alex Soto
 
Training in Android with Maven
Training in Android with MavenTraining in Android with Maven
Training in Android with MavenArcadian Learning
 
Using JIRA to build a culture of innovation - Atlassian Summit 2012
Using JIRA to build a culture of innovation - Atlassian Summit 2012Using JIRA to build a culture of innovation - Atlassian Summit 2012
Using JIRA to build a culture of innovation - Atlassian Summit 2012Atlassian
 
Using Maven to build Java & Android program
Using Maven to build Java & Android programUsing Maven to build Java & Android program
Using Maven to build Java & Android programMu Chun Wang
 
Implementing Quality on Java projects
Implementing Quality on Java projectsImplementing Quality on Java projects
Implementing Quality on Java projectsVincent Massol
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with MavenSid Anand
 

Similar to Optimize mobile quality with Sonar (20)

Pom configuration java xml
Pom configuration java xmlPom configuration java xml
Pom configuration java xml
 
Pom
PomPom
Pom
 
Maven 3… so what?
Maven 3… so what?Maven 3… so what?
Maven 3… so what?
 
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorialsSpring Web Service, Spring JMS, Eclipse & Maven tutorials
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
 
Apache Maven basics
Apache Maven basicsApache Maven basics
Apache Maven basics
 
Maven
MavenMaven
Maven
 
Maven
MavenMaven
Maven
 
JSF, Facelets, Spring-JSF & Maven
JSF, Facelets, Spring-JSF & MavenJSF, Facelets, Spring-JSF & Maven
JSF, Facelets, Spring-JSF & Maven
 
Automation Frame works Instruction Sheet
Automation Frame works Instruction SheetAutomation Frame works Instruction Sheet
Automation Frame works Instruction Sheet
 
Maven in Mule
Maven in MuleMaven in Mule
Maven in Mule
 
Develop and Deploy your JavaEE micro service in less than 5 minutes with Apac...
Develop and Deploy your JavaEE micro service in less than 5 minutes with Apac...Develop and Deploy your JavaEE micro service in less than 5 minutes with Apac...
Develop and Deploy your JavaEE micro service in less than 5 minutes with Apac...
 
Training in Android with Maven
Training in Android with MavenTraining in Android with Maven
Training in Android with Maven
 
Using JIRA to build a culture of innovation - Atlassian Summit 2012
Using JIRA to build a culture of innovation - Atlassian Summit 2012Using JIRA to build a culture of innovation - Atlassian Summit 2012
Using JIRA to build a culture of innovation - Atlassian Summit 2012
 
Using Maven2
Using Maven2Using Maven2
Using Maven2
 
Pom
PomPom
Pom
 
Using Maven to build Java & Android program
Using Maven to build Java & Android programUsing Maven to build Java & Android program
Using Maven to build Java & Android program
 
Implementing Quality on Java projects
Implementing Quality on Java projectsImplementing Quality on Java projects
Implementing Quality on Java projects
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with Maven
 
Maven
MavenMaven
Maven
 
Maven advanced
Maven advancedMaven advanced
Maven advanced
 

More from cyrilpicat

Afterwork OCTO Delivery - L'ADN d'un développement produit réussi
Afterwork OCTO Delivery - L'ADN d'un développement produit réussiAfterwork OCTO Delivery - L'ADN d'un développement produit réussi
Afterwork OCTO Delivery - L'ADN d'un développement produit réussicyrilpicat
 
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?cyrilpicat
 
SITB15 - Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
SITB15 - Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?SITB15 - Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
SITB15 - Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?cyrilpicat
 
JUGL 2009 - Introduction Groovy/Grails
JUGL 2009 - Introduction Groovy/GrailsJUGL 2009 - Introduction Groovy/Grails
JUGL 2009 - Introduction Groovy/Grailscyrilpicat
 
Petit-déjeuner Mobilité 2011 - strategie mobile
Petit-déjeuner Mobilité 2011 - strategie mobilePetit-déjeuner Mobilité 2011 - strategie mobile
Petit-déjeuner Mobilité 2011 - strategie mobilecyrilpicat
 
10 idées recues sur le Bring Your Own Device
10 idées recues sur le Bring Your Own Device10 idées recues sur le Bring Your Own Device
10 idées recues sur le Bring Your Own Devicecyrilpicat
 
February JUGL on Software Quality Analysis
February JUGL on Software Quality AnalysisFebruary JUGL on Software Quality Analysis
February JUGL on Software Quality Analysiscyrilpicat
 

More from cyrilpicat (7)

Afterwork OCTO Delivery - L'ADN d'un développement produit réussi
Afterwork OCTO Delivery - L'ADN d'un développement produit réussiAfterwork OCTO Delivery - L'ADN d'un développement produit réussi
Afterwork OCTO Delivery - L'ADN d'un développement produit réussi
 
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
Softshake 2015 - Comment tester et optimiser la performance d'un SI ?
 
SITB15 - Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
SITB15 - Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?SITB15 - Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
SITB15 - Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
 
JUGL 2009 - Introduction Groovy/Grails
JUGL 2009 - Introduction Groovy/GrailsJUGL 2009 - Introduction Groovy/Grails
JUGL 2009 - Introduction Groovy/Grails
 
Petit-déjeuner Mobilité 2011 - strategie mobile
Petit-déjeuner Mobilité 2011 - strategie mobilePetit-déjeuner Mobilité 2011 - strategie mobile
Petit-déjeuner Mobilité 2011 - strategie mobile
 
10 idées recues sur le Bring Your Own Device
10 idées recues sur le Bring Your Own Device10 idées recues sur le Bring Your Own Device
10 idées recues sur le Bring Your Own Device
 
February JUGL on Software Quality Analysis
February JUGL on Software Quality AnalysisFebruary JUGL on Software Quality Analysis
February JUGL on Software Quality Analysis
 

Recently uploaded

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 

Recently uploaded (20)

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 

Optimize mobile quality with Sonar

  • 1. Make use of Sonar on your mobile developments - It’s easy and useful! October 26th, 2013 © OCTO 2013 Avenue du Théâtre 7 1005 Lausanne - SUISSE Tél : +41 (0) 21 312 94 15 Fax : +41 (0) 21 312 94 16 www.octo.ch 1
  • 2. Who We Are Romain Felden: Java / Android developer Cyril Picat: C++, iOS, Groovy/Grails developer OCTO Technology Jenkins Quality Dashboard iOS Android Maven Plugin Sonar Android Lint Plugin Quality Analysis Tools for Android Sonar Objective-C Plugin 2
  • 3. Agenda 1 QUALITY TOOLS ON MOBILE 2 SONAR PLUGINS PRESENTATION 3 HOW-TO & DEMO IOS 4 HOW-TO & DEMO ANDROID 5 CONCLUSION 3
  • 4. Sonar For the Uninitiated Manage quality of your software Across languages/platforms (> 20) Across projects Across time Across multiple axis/depths A web app for (re)viewing, a back-end for analysis 4
  • 6. Quality Tools on Mobile s s in kin k ) n Je en od V e5 J c L d n (X 2) 4) e (L for ) s o (Xco c i e e g o ge t od C od erag gin lan alys /cl ra e Bo bjXc Xc ov lu (C an nt v ( ( / p u o O t it nit e c de Lint ality nit ar g Uni M co e c Un U c U d d n o an C GT Co XC So slo O GH OC Co Xc OC Qu Cl ) e3 19xx 2007 2009 2011 M) 2012 2013 2008 First iOS SDK TESTS QUALITY
  • 7. Quality Tools on Mobile Sonar Objective-C Plugin sic a - Bics 1 .0. etr v0 m n sa t t L es es ge C u T eq - O .1 - era r ull 0.2 v0.3 cov v P int 7 2012/06 2013/07 2013/10 d
  • 8. Quality Tools on Mobile d n oi ugi r gin ) nd t-pl u ase ) pl ) r A lin le e e d fo t r leas oi mma t ol s oi d s e r n (fir t r nd EclE Li To ndr a a le s a id y n- Co ( tur a (la sty r e o ro alit ark e c n av aC n d Qu ob Emm he m C A J so C 2001 2004 2005 2009 2008 First Android SDK 2011 2012 2013
  • 10. Sonar Plugins Features Android Complexity Design Documentation Duplications Issues Size Tests √ √ √ √ √ (140) √ √ iOS X (*) X √ √ √ (58) √ (*) √ (*) integrated as issues (*) only LOC and files 10
  • 11. Sonar Plugin Architecture Sonar Sonar ObjC Platform Quality management Sonar Core gcovr oclint xcodebuild / xctool sonar-runner OCLint sensor xctool run-sonar.sh Build Cobertura sensor Measures/ Issues computation Surefire sensor Measures/ Issues integration Squid plugin Sonar Objective-C plugin 11
  • 12. Sonar Plugin Architecture Sonar Android Plugin Platform Quality management Measures/ Issues computation ant maven Sonar Android plugin PMD plugin JaCoCo plugin Checkstyle plugin Findbugs plugin Surefire plugin Squid plugin Measures/ Issues integration Sonar Core gradle Build 12
  • 13. Testing / Quality Tools Integration Kiwi UI Automation KIF Frank / UISpec UI Testing GTM BDD GHUnit √ Unit Testing ... √ X X X X X X X OCUnit / XCUnit OCLint Quality * * * * = in roadmap 13
  • 14. Testing / Quality Tools Integration Robolectric UIAutomator PMD Checkstyle Findbugs Lint Quality checks Robotium UI JUnit Unit and Integration Testing √ √ √ √ √ √ √ √ 14
  • 16. How-to Install Sonar, Sonar Runner and Sonar Objective-C plugin Install prerequisites (xctool, gcovr, oclint) Configure your project Run analysis 16
  • 17. Configure your project Copy run-sonar.sh in your Xcode project root folder and make it executable Copy sonar-project.properties in your Xcode project root folder Edit the sonar-project.properties file to match your Xcode iOS/MacOS project 17
  • 19. sonar-project.properties #  Project  description sonar.projectKey=my-­‐project sonar.projectName=My  project sonar.projectVersion=1.0 sonar.projectDescription=Fake  description   #  Path  to  source  directories   sonar.sources=srcDir1,srcDir2   #  Xcode  project  configuration  (.xcodeproj   or  .xcworkspace) sonar.objectivec.project=myApplication.xcodeproj   sonar.objectivec.appScheme=myApplication sonar.objectivec.testScheme=myApplicationTests X
  • 21. Jenkins Quality Dashboard Almost feature complete No code checks Timeconsuming, error prone and intrusive Weak reporting and configuration 19
  • 22. How-to using maven Install Sonar and Sonar Android plugin Add maven profile(s) to your module(s) Connect ADB in root mode Run analysis 20
  • 23. Maven structure Parent module Application module Library module Integration testing module 21
  • 25. Maven profiles parent module <profile> <id>sonar</id> <modules> <module>morse-lib</module> <module>morseflash-app</module> <module>morseflash-instrumentation</module> </modules> <properties> <sonar.profile>Android Lint</sonar.profile> <sonar.jacoco.excludes>*test*</sonar.jacoco.excludes> <sonar.jacoco.itReportPath>target/jacoco-it.exec</sonar.jacoco.itReportPath> <sonar.jacoco.reportPath>jacoco.exec</sonar.jacoco.reportPath> <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin> <sonar.skippedModules>morseflash-instrumentation</sonar.skippedModules> <sonar.exclusions>**/org/jacoco/**</sonar.exclusions> <jacoco.version>0.6.2.201302030002</jacoco.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.jacoco</groupId> <artifactId>org.jacoco.agent</artifactId> <version>${jacoco.version}</version> <classifier>runtime</classifier> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> </plugin> </plugins> </pluginManagement> </build> </profile> X
  • 26. Maven profiles application module (includes unit testing) <profile> <id>sonar</id> <dependencies> <dependency> <groupId>org.jacoco</groupId> <artifactId>org.jacoco.agent</artifactId> <classifier>runtime</classifier> <scope>compile</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <executions> <execution> <id>instrument-classes</id> <goals> <goal>instrument</goal> </goals> <configuration> <excludes> <exclude>*test*</exclude> <exclude>*/test/*</exclude> </excludes> </configuration> </execution> <execution> <id>restore-instrumented-classes</id> <phase>package</phase> <goals> <goal>restore-instrumented-classes</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <test> <coverage>true</coverage> <createReport>true</createReport> </test> </configuration> <extensions>true</extensions> </plugin> </plugins> </build> </profile> X
  • 27. Maven profiles integration testing module <profiles> <profile> <id>sonar</id> <build> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <dex> <!-- Required for EMMA --> <noLocals>true</noLocals> </dex> <test> <coverage>true</coverage> <createReport>true</createReport> </test> </configuration> <executions> <execution> <id>pull-coverage</id> <phase>post-integration-test</phase> <goals> <goal>pull</goal> </goals> <configuration> <pullSource>/data/data/com.simpligility.android.morseflash/files/coverage.ec</pullSource> <pullDestination>${project.basedir}/../morseflash-app/target/jacoco-it.exec</pullDestination> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> X
  • 28. Run it! >  mvn  -­‐P  sonar  clean  install >  mvn  -­‐P  sonar  sonar:sonar X
  • 30. Why Use Sonar? Mobile projects are small and short, is it applicable? Three typical uses cases: Small and short projects Assessments Bigger projects (there are!) 24
  • 31. Stay in touch! Objective-C plugin: https://github.com/octotechnology/sonar-objective-c Sonar Android Lint plugin: https:// github.com/SonarCommunity/sonar-android Quality Analysis Tools for Android: https://github.com/stephanenicolas/QualityTools-for-Android http://fr.slideshare.net/jeromevdl/droidconparis-2013 25
  • 32. Questions/Answers © OCTO 2013 Avenue du Théâtre 7 1005 Lausanne - SUISSE Tél : +41 (0) 21 312 94 15 Fax : +41 (0) 21 312 94 16 www.octo.ch 26