SlideShare a Scribd company logo
1 of 38
Download to read offline
TOOLS
JAVA
CODE INSPECTION
AND TESTING
JAVAONE 2017
CON2902
SAN FRANCISCO - 3 OCTOBER 2017
JORGE HIDALGO
ACCENTURE DELIVERY CENTER IN SPAIN
ACCENTURE GLOBAL JAVA CAPABILITY
Copyright 2017 Accenture. All rights reserved. 2
WHO I AM
Jorge Hidalgo @_deors
Coordinator – Málaga JUG
Global Java Lead – Accenture Technology
Java, Architecture & DevOps Lead – Accenture Delivery Center in Spain
Father of two children, husband, whistle player, video gamer, sci-fi ‘junkie’,
Star Wars ‘addict’, Lego brick ‘wielder’, Raspberry Pi fan… LLAP!
https://deors.wordpress.com
https://www.meetup.com/es-ES/MalagaJUG/
CODE INSPECTION
CODE COVERAGE
MUTATION TESTING
MOCKS, STUBS, DOUBLES
SECURITY TESTING
CODE INSPECTION AND TESTING TOOLS
Copyright 2017 Accenture. All rights reserved. 3
Copyright 2017 Accenture. All rights reserved. 4
MOTIVATION – WHY USE TOOLS?
QUALITY
Software craftmanship
No blaming
No last minute fixes
Client satisfaction
Boss satisfaction
Pay rise!
PRODUCTIVITY
No boring, repetitive tasks
Focus on the cool stuff
Do more in less time
Client satisfaction
Boss satisfaction
Pay rise!
PREDICTABILITY
Software development as
a precision work
Always on schedule
No surprises
Client satisfaction
Boss satisfaction
Pay rise!
Copyright 2017 Accenture. All rights reserved. 5
CODE INSPECTION
WHAT
WHY
Statically profile source code and configuration for adherence to
defined coding standards, architecture & design best practices,
and to highlight potential bugs.
Improve quality and productivity (less defects mean less fix effort).
By using tools to automate code inspection, reviews are
exhaustive and inclusive of all source files.
Let the core review effort focus on constructive conversations
about the creative aspects of the functionality and how it is
implemented.
Copyright 2017 Accenture. All rights reserved. 6
CODE INSPECTION TOOLS
ScapegoatScalastyle
Copyright 2017 Accenture. All rights reserved. 7
CODE INSPECTION TOOLS
Beware of
overlapping
(equivalent)
rules!
Copyright 2017 Accenture. All rights reserved. 8
CODE INSPECTION TOOLS
+ plug-ins
Get the best from
each of them
Combine outputs
into a single
report
Code reviews
Action plans
Copyright 2017 Accenture. All rights reserved. 9
CODE COVERAGE
WHAT
WHY
Measure what source code and branches are actually executed
after any suite of tests, both automated and manual.
Identify which lines and branches of application code have not
been executed by tests, and hence pinpoint which specific test
cases are missing and should be created.
Code coverage should be used as a ‘negative test’, never as a
‘positive test’.
It is not uncommon to see automated test cases that simply run
some code, without actually checking / asserting anything.
Copyright 2017 Accenture. All rights reserved. 10
CODE COVERAGE TOOLS
CoberturaJCov
isparta
Copyright 2017 Accenture. All rights reserved. 11
CODE COVERAGE TOOLS
Use it to gather coverage
from manual tests,
if you don’t have automated
Use EclEmma inside Eclipse
to ensure all key test cases
are covered by tests
Combine with SonarQube
listener to get metrics per
every single test executed
Copyright 2017 Accenture. All rights reserved. 12
CODE COVERAGE TOOLS
Copyright 2017 Accenture. All rights reserved. 13
CODE COVERAGE TOOLS
Copyright 2017 Accenture. All rights reserved. 14
CODE COVERAGE TOOLS
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<version>0.7.9</version>
<classifier>runtime</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.sonarsource.java</groupId>
<artifactId>sonar-jacoco-listeners</artifactId>
<version>4.11.0.10660</version>
<scope>test</scope>
</dependency>
To enable code coverage per test:
1. Add these dependencies to pom.xml
Copyright 2017 Accenture. All rights reserved. 15
CODE COVERAGE TOOLS
To enable code coverage per test:
2. Enable JaCoCo listener in Surefire
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<properties>
<property>
<name>listener</name>
<value>org.sonar.java.jacoco.JUnitListener</value>
</property>
</properties>
</configuration>
</plugin>
Copyright 2017 Accenture. All rights reserved. 16
MUTATION TESTING
WHAT
WHY
Identify uncovered test cases by executing unit tests after pieces
of code are mutated (specific, atomic changes).
Ensure that automated test code is covering all the relevant test
cases and conditions.
Code coverage is simply not enough.
Mutation testing pinpoints which tests are not asserting that
actual results are equal to expected results, as well as uncover
specific conditions that were not tested (possible even if code
coverage says 100% lines and branches are tested).
Copyright 2017 Accenture. All rights reserved. 17
MUTATION TESTING TOOLS
Copyright 2017 Accenture. All rights reserved. 18
MUTATION TESTING TOOLS
Mutation testing tools
introduce controlled changes
in application code, one at a time
Code base Code mutation
if (a >= 0) if (a < 0)
if (b == 1) if (a == -1)
someObject.someMethod(“hi”) someObject.someMethod(null)
someObject.someMethod(whatever) Method call is removed
Re-execute those tests executing the modified logic
If tests do not fail, then the test is wrong
➢ It is not asserting thoroughly enough
➢ It is not asserting anything!
Copyright 2017 Accenture. All rights reserved. 19
MUTATION TESTING TOOLS
Key facts for the really impatient:
It does not require changes in application code
It does not require changes in test code
It requires zero or little configuration
It mutates on bytecodes, so it is as efficient as possible
It re-executes only the relevant tests after a change
Yet… it takes time!
Run Pitest in the background in your IDE, or in CI builds
publishing results to SonarQube!
Copyright 2017 Accenture. All rights reserved. 20
MUTATION TESTING TOOLS
Results in Eclipse
Results in SonarQube
Copyright 2017 Accenture. All rights reserved. 21
MUTATION TESTING TOOLS
Configure exclusions wisely, Pitest can take very long
hours to execute with integration tests
Use XML output to pull data
into SonarQube
Copyright 2017 Accenture. All rights reserved. 22
MUTATION TESTING TOOLS
Example mutators:
 Conditionals Boundary Mutator
 Negate Conditionals Mutator
 Remove Conditionals Mutator
 Math Mutator
 Increments Mutator
 Invert Negatives Mutator
 Inline Constant Mutator
 Return Values Mutator
 Void Method Calls Mutator
 Non Void Method Calls Mutator
 Constructor Calls Mutator
Copyright 2017 Accenture. All rights reserved. 23
MOCKS, STUBS, DOUBLES
WHAT
WHY
Isolate automated tests from external dependencies, that may or
may not be available at the time of the test execution.
Automated tests should be repeatable, and as independent from
the execution environment and moment as possible.
By isolating external dependencies, tests are less subject to
interference, are more robust, and focused on one verification
each time. Error and exceptions can be simulated.
Using mocks, stubs and test doubles, the behavior of external
dependencies is simulated by applying different strategies.
Critical for unit tests!
Copyright 2017 Accenture. All rights reserved. 24
MOCKING FRAMEWORKS
Spock
SINON.JS
ScalaMock
Copyright 2017 Accenture. All rights reserved. 25
MOCKING FRAMEWORKS
EasyMock provides common mocking patterns
PowerMock is capable of instrumenting code and
make testable code that isn’t:
• static blocks
• constructors
• object instantiation
• private members
JMockit provides all capabilities above combined,
with a more modern and expressive API
Copyright 2017 Accenture. All rights reserved. 26
MOCKING FRAMEWORKS
public class DirectoryManager {
public DirectoryManager(String directoryHost, int directoryPort)
throws DirectoryException {
super();
if (directoryHost == null || directoryHost.length() == 0 || directoryPort <= 0) {
throw new IllegalArgumentException("ERR_OPEN_CONN_ARG");
}
try {
connection = new LDAPConnection();
connection.connect(directoryHost, directoryPort);
} catch (LDAPException ldape) {
throw new DirectoryException("ERR_OPEN_CONN", ldape);
}
connected = true;
}
…
}
Constructor that opens an LDAP connection
Copyright 2017 Accenture. All rights reserved. 27
MOCKING FRAMEWORKS
Making it testable with EasyMock + PowerMock
@RunWith(PowerMockRunner.class)
@PrepareForTest(DirectoryManager.class)
public class DirectoryManagerPowerMockTestCase {
@Test(expected = DirectoryException.class)
public void testConstructorError() throws Exception {
LDAPConnection lc = PowerMock.createMock(LDAPConnection.class);
PowerMock.expectNew(LDAPConnection.class).andReturn(lc);
lc.connect("localhost", 2000);
EasyMock.expectLastCall().andThrow(new LDAPException("error", 1, "error"));
PowerMock.replay(lc, LDAPConnection.class);
new DirectoryManager("localhost", 2000);
}
…
}
Copyright 2017 Accenture. All rights reserved. 28
MOCKING FRAMEWORKS
Making it testable with JMockit
@RunWith(JMockit.class)
public class DirectoryManagerJMockitTestCase {
@Mocked(stubOutClassInitialization = true)
LDAPConnection connection = new LDAPConnection();
@Test(expected = DirectoryException.class)
public void testConstructorError() throws Exception {
new Expectations() {{
connection.connect("localhost", 2000);
result = new LDAPException("error", 1, "error");
}};
new DirectoryManager("localhost", 2000);
}
Copyright 2017 Accenture. All rights reserved. 29
SECURITY TESTING
WHAT
WHY
Analyze code, both statically and dynamically, to identify potential
security issues: vulnerabilities, defensive programming patterns,
etc.
As applications grow in complexity, and as more and more
services are directly exposed to end consumers over the Internet,
and as we speed up the release processes thanks to DevOps, it is
adamant to have automated security tests along the life-cycle.
Prevent impersonation, personal and sensible information leaks
(passwords, social security numbers, credit card data), business
confidential information, secret reports, etc.
Scans look at both source code and external dependencies!
Copyright 2017 Accenture. All rights reserved. 30
SECURITY TESTING TOOLS
ZAP Dependency Check
ZAP Dependency Check
ZAP Dependency Check
ZAP Dependency Check
Copyright 2017 Accenture. All rights reserved. 31
SECURITY TESTING TOOLS
ZAP
Dynamic profiler – Two modes:
Passive Scan
Works as an HTTP proxy
Analyzes HTTP requests and responses (for example, during test
execution, ideally automated in a CI/CD pipeline)
Looks for known vulnerabilities like:
 SQL injection
 Cross site request forgery (CSRF)
 Cross site scripting (XSS)
 Cookie handling
Copyright 2017 Accenture. All rights reserved. 32
SECURITY TESTING TOOLS
ZAP
Dynamic profiler – Two modes:
Active Scan
Launch coordinated attacks on the target application
It should be executed only in applications you are authorized to
Never in production, it can break things, and lead to data loss
It may take a long, long time to complete a full scan, even in a
simple application
Copyright 2017 Accenture. All rights reserved. 33
SECURITY TESTING TOOLS
ZAP
Dependency Check
Copyright 2017 Accenture. All rights reserved. 34
SECURITY TESTING TOOLS
Scan dependencies for a given project/module,
looking for known vulnerabilities in those
dependencies (version-wise)
Uses NIST National Vulnerability Database (NVD)
Can be run from command-line, Ant, Maven, Gradle,
sbt or Jenkins
Dependency Check
Copyright 2017 Accenture. All rights reserved. 35
SECURITY TESTING TOOLS
Copyright 2017 Accenture. All rights reserved. 36
SUMMARY
PROFILE YOUR CODE
Pick a static code
profiler to automate
review of coding
standards and common
best practices
MEASURE COVERAGE
Understand which
parts of your code are
not being tested by
mixing code coverage
and mutation testing
SECURITY FIRST
Put security first by
combining defensive
programming patterns
with checks from static
and dynamic profilers
MOCKS ARE GOOD
They help to make tests
repeatable and
independent from the
environment, and make
testable, code that isn’t
Copyright 2017 Accenture. All rights reserved. 37
REFERENCES
SonarQube – https://www.sonarqube.org
ESLint – https://eslint.org
EclEmma & JaCoCo – http://www.eclemma.org
Pitest – http://pitest.org
JMockit – http://jmockit.org
FindSecBugs – https://find-sec-bugs.github.io
OWASP ZAP – https://www.owasp.org/index.php/ZAP
OWASP Dependency Check –
https://www.owasp.org/index.php/OWASP_Dependency_Check
Copyright 2017 Accenture. All rights reserved. 38
MORE TALKS AT JAVAONE 2017
CON3282 – Code Generation with Annotation Processors
Wed 4th, 9.30, Moscone West 2018
CON3276 – Selenium Testing Patterns Reloaded
Wed 4th, 2.45, Moscone West 2007
CON4258 – Continuous Code Quality with SonarQube and SonarLint
Tue 3rd, 8.30, Moscone West 2009
CON2361 – Web Application Security for Developers: Tooling and Best Practices
Wed 4th, 10.45, Moscone West 2009
CON1694 – Intro to Mutation Testing in Java
Thu 5th, 12.45, Marriott Marquis Nob Hill C/D
ALWAYS CHECK THE CONFERENCE AGENDA/APP FOR LAST-MINUTE CHANGES!

More Related Content

What's hot

.Net Hijacking to Defend PowerShell BSidesSF2017
.Net Hijacking to Defend PowerShell BSidesSF2017 .Net Hijacking to Defend PowerShell BSidesSF2017
.Net Hijacking to Defend PowerShell BSidesSF2017 Amanda Rousseau
 
A Journey to Improve Infrastructure Compliance With InSpec
A Journey to Improve Infrastructure Compliance With InSpecA Journey to Improve Infrastructure Compliance With InSpec
A Journey to Improve Infrastructure Compliance With InSpecCliffano Subagio
 
Reverse engineering and instrumentation of android apps
Reverse engineering and instrumentation of android appsReverse engineering and instrumentation of android apps
Reverse engineering and instrumentation of android appsGaurav Lochan
 
From zero to hero with React Native!
From zero to hero with React Native!From zero to hero with React Native!
From zero to hero with React Native!Commit University
 
Building Rich Applications with Appcelerator
Building Rich Applications with AppceleratorBuilding Rich Applications with Appcelerator
Building Rich Applications with AppceleratorMatt Raible
 
Gwt and JSR 269's Pluggable Annotation Processing API
Gwt and JSR 269's Pluggable Annotation Processing APIGwt and JSR 269's Pluggable Annotation Processing API
Gwt and JSR 269's Pluggable Annotation Processing APIArnaud Tournier
 
Developing modern java web applications with java ee 7 and angular js
Developing modern java web applications with java ee 7 and angular jsDeveloping modern java web applications with java ee 7 and angular js
Developing modern java web applications with java ee 7 and angular jsShekhar Gulati
 
Lean Engineering. Applying Lean Principles to Building Experiences
Lean Engineering. Applying Lean Principles to Building ExperiencesLean Engineering. Applying Lean Principles to Building Experiences
Lean Engineering. Applying Lean Principles to Building ExperiencesBill Scott
 
Using Go in DevOps
Using Go in DevOpsUsing Go in DevOps
Using Go in DevOpsEficode
 
.NET Online TechTalk “Azure Cloud for DEV”
.NET Online TechTalk “Azure Cloud for DEV”.NET Online TechTalk “Azure Cloud for DEV”
.NET Online TechTalk “Azure Cloud for DEV”GlobalLogic Ukraine
 
Working effectively with OpenShift
Working effectively with OpenShiftWorking effectively with OpenShift
Working effectively with OpenShiftShekhar Gulati
 
DBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse EngineeringDBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse EngineeringSahil Dhar
 
Iterative Development with Swagger on the JDK
Iterative Development with Swagger on the JDKIterative Development with Swagger on the JDK
Iterative Development with Swagger on the JDKSwagger API
 
Gabriele Provinciali/Gabriele Folchi/Luca Postacchini - Sviluppo con piattafo...
Gabriele Provinciali/Gabriele Folchi/Luca Postacchini - Sviluppo con piattafo...Gabriele Provinciali/Gabriele Folchi/Luca Postacchini - Sviluppo con piattafo...
Gabriele Provinciali/Gabriele Folchi/Luca Postacchini - Sviluppo con piattafo...Codemotion
 
Test Engineering on Mobage
Test Engineering on MobageTest Engineering on Mobage
Test Engineering on MobageMasaki Nakagawa
 
Android talks #08 dagger2
Android talks #08   dagger2Android talks #08   dagger2
Android talks #08 dagger2Infinum
 
Create Disposable Test Environments with Vagrant and Puppet
Create Disposable Test Environments with Vagrant and PuppetCreate Disposable Test Environments with Vagrant and Puppet
Create Disposable Test Environments with Vagrant and PuppetGene Gotimer
 

What's hot (20)

.Net Hijacking to Defend PowerShell BSidesSF2017
.Net Hijacking to Defend PowerShell BSidesSF2017 .Net Hijacking to Defend PowerShell BSidesSF2017
.Net Hijacking to Defend PowerShell BSidesSF2017
 
Cloud Collaboration with Eclipse Che
Cloud Collaboration with Eclipse CheCloud Collaboration with Eclipse Che
Cloud Collaboration with Eclipse Che
 
A Journey to Improve Infrastructure Compliance With InSpec
A Journey to Improve Infrastructure Compliance With InSpecA Journey to Improve Infrastructure Compliance With InSpec
A Journey to Improve Infrastructure Compliance With InSpec
 
Reverse engineering and instrumentation of android apps
Reverse engineering and instrumentation of android appsReverse engineering and instrumentation of android apps
Reverse engineering and instrumentation of android apps
 
From zero to hero with React Native!
From zero to hero with React Native!From zero to hero with React Native!
From zero to hero with React Native!
 
PDE builds or Maven
PDE builds or MavenPDE builds or Maven
PDE builds or Maven
 
Building Rich Applications with Appcelerator
Building Rich Applications with AppceleratorBuilding Rich Applications with Appcelerator
Building Rich Applications with Appcelerator
 
Gwt and JSR 269's Pluggable Annotation Processing API
Gwt and JSR 269's Pluggable Annotation Processing APIGwt and JSR 269's Pluggable Annotation Processing API
Gwt and JSR 269's Pluggable Annotation Processing API
 
Developing modern java web applications with java ee 7 and angular js
Developing modern java web applications with java ee 7 and angular jsDeveloping modern java web applications with java ee 7 and angular js
Developing modern java web applications with java ee 7 and angular js
 
Lean Engineering. Applying Lean Principles to Building Experiences
Lean Engineering. Applying Lean Principles to Building ExperiencesLean Engineering. Applying Lean Principles to Building Experiences
Lean Engineering. Applying Lean Principles to Building Experiences
 
Using Go in DevOps
Using Go in DevOpsUsing Go in DevOps
Using Go in DevOps
 
.NET Online TechTalk “Azure Cloud for DEV”
.NET Online TechTalk “Azure Cloud for DEV”.NET Online TechTalk “Azure Cloud for DEV”
.NET Online TechTalk “Azure Cloud for DEV”
 
Working effectively with OpenShift
Working effectively with OpenShiftWorking effectively with OpenShift
Working effectively with OpenShift
 
DBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse EngineeringDBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse Engineering
 
Iterative Development with Swagger on the JDK
Iterative Development with Swagger on the JDKIterative Development with Swagger on the JDK
Iterative Development with Swagger on the JDK
 
CDI In Real Life
CDI In Real LifeCDI In Real Life
CDI In Real Life
 
Gabriele Provinciali/Gabriele Folchi/Luca Postacchini - Sviluppo con piattafo...
Gabriele Provinciali/Gabriele Folchi/Luca Postacchini - Sviluppo con piattafo...Gabriele Provinciali/Gabriele Folchi/Luca Postacchini - Sviluppo con piattafo...
Gabriele Provinciali/Gabriele Folchi/Luca Postacchini - Sviluppo con piattafo...
 
Test Engineering on Mobage
Test Engineering on MobageTest Engineering on Mobage
Test Engineering on Mobage
 
Android talks #08 dagger2
Android talks #08   dagger2Android talks #08   dagger2
Android talks #08 dagger2
 
Create Disposable Test Environments with Vagrant and Puppet
Create Disposable Test Environments with Vagrant and PuppetCreate Disposable Test Environments with Vagrant and Puppet
Create Disposable Test Environments with Vagrant and Puppet
 

Similar to Java code inspection and testing tools

Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Jorge Hidalgo
 
Making Security Agile
Making Security AgileMaking Security Agile
Making Security AgileOleg Gryb
 
What is the best approach to tdd
What is the best approach to tddWhat is the best approach to tdd
What is the best approach to tddLuca Mattia Ferrari
 
Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build PipelineSamuel Brown
 
Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...
Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...
Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...mCloud
 
Test-Driven Design Insights@DevoxxBE 2023.pptx
Test-Driven Design Insights@DevoxxBE 2023.pptxTest-Driven Design Insights@DevoxxBE 2023.pptx
Test-Driven Design Insights@DevoxxBE 2023.pptxVictor Rentea
 
We continue checking Microsoft projects: analysis of PowerShell
We continue checking Microsoft projects: analysis of PowerShellWe continue checking Microsoft projects: analysis of PowerShell
We continue checking Microsoft projects: analysis of PowerShellPVS-Studio
 
Scale security for a dollar or less
Scale security for a dollar or lessScale security for a dollar or less
Scale security for a dollar or lessMohammed A. Imran
 
Test Driven iOS Development (TDD)
Test Driven iOS Development (TDD)Test Driven iOS Development (TDD)
Test Driven iOS Development (TDD)Babul Mirdha
 
Strengthen and Scale Security for a dollar or less
Strengthen and Scale Security for a dollar or lessStrengthen and Scale Security for a dollar or less
Strengthen and Scale Security for a dollar or lessMohammed A. Imran
 
ATAGTR2017 Protractor Cucumber BDD Approach
ATAGTR2017 Protractor Cucumber BDD ApproachATAGTR2017 Protractor Cucumber BDD Approach
ATAGTR2017 Protractor Cucumber BDD ApproachAgile Testing Alliance
 
Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Fwdays
 
Perfomatix - NodeJS Coding Standards
Perfomatix - NodeJS Coding StandardsPerfomatix - NodeJS Coding Standards
Perfomatix - NodeJS Coding StandardsPerfomatix Solutions
 
Unit testing of spark applications
Unit testing of spark applicationsUnit testing of spark applications
Unit testing of spark applicationsKnoldus Inc.
 
Strengthen and Scale Security Using DevSecOps - OWASP Indonesia
Strengthen and Scale Security Using DevSecOps - OWASP IndonesiaStrengthen and Scale Security Using DevSecOps - OWASP Indonesia
Strengthen and Scale Security Using DevSecOps - OWASP IndonesiaMohammed A. Imran
 
DevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesDevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesFab L
 
Hands on iOS developments with Jenkins
Hands on iOS developments with JenkinsHands on iOS developments with Jenkins
Hands on iOS developments with JenkinseXo Platform
 

Similar to Java code inspection and testing tools (20)

Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02
 
Making Security Agile
Making Security AgileMaking Security Agile
Making Security Agile
 
What is the best approach to tdd
What is the best approach to tddWhat is the best approach to tdd
What is the best approach to tdd
 
Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build Pipeline
 
Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...
Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...
Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...
 
Test-Driven Design Insights@DevoxxBE 2023.pptx
Test-Driven Design Insights@DevoxxBE 2023.pptxTest-Driven Design Insights@DevoxxBE 2023.pptx
Test-Driven Design Insights@DevoxxBE 2023.pptx
 
Azure HDInsight
Azure HDInsightAzure HDInsight
Azure HDInsight
 
TDD Workshop UTN 2012
TDD Workshop UTN 2012TDD Workshop UTN 2012
TDD Workshop UTN 2012
 
We continue checking Microsoft projects: analysis of PowerShell
We continue checking Microsoft projects: analysis of PowerShellWe continue checking Microsoft projects: analysis of PowerShell
We continue checking Microsoft projects: analysis of PowerShell
 
Scale security for a dollar or less
Scale security for a dollar or lessScale security for a dollar or less
Scale security for a dollar or less
 
Test Driven iOS Development (TDD)
Test Driven iOS Development (TDD)Test Driven iOS Development (TDD)
Test Driven iOS Development (TDD)
 
Strengthen and Scale Security for a dollar or less
Strengthen and Scale Security for a dollar or lessStrengthen and Scale Security for a dollar or less
Strengthen and Scale Security for a dollar or less
 
Python and test
Python and testPython and test
Python and test
 
ATAGTR2017 Protractor Cucumber BDD Approach
ATAGTR2017 Protractor Cucumber BDD ApproachATAGTR2017 Protractor Cucumber BDD Approach
ATAGTR2017 Protractor Cucumber BDD Approach
 
Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"
 
Perfomatix - NodeJS Coding Standards
Perfomatix - NodeJS Coding StandardsPerfomatix - NodeJS Coding Standards
Perfomatix - NodeJS Coding Standards
 
Unit testing of spark applications
Unit testing of spark applicationsUnit testing of spark applications
Unit testing of spark applications
 
Strengthen and Scale Security Using DevSecOps - OWASP Indonesia
Strengthen and Scale Security Using DevSecOps - OWASP IndonesiaStrengthen and Scale Security Using DevSecOps - OWASP Indonesia
Strengthen and Scale Security Using DevSecOps - OWASP Indonesia
 
DevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesDevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation Slides
 
Hands on iOS developments with Jenkins
Hands on iOS developments with JenkinsHands on iOS developments with Jenkins
Hands on iOS developments with Jenkins
 

More from Jorge Hidalgo

GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22Jorge Hidalgo
 
GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18Jorge Hidalgo
 
Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Jorge Hidalgo
 
GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28Jorge Hidalgo
 
GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29Jorge Hidalgo
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Jorge Hidalgo
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Jorge Hidalgo
 
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Jorge Hidalgo
 
DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03Jorge Hidalgo
 
All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06Jorge Hidalgo
 
Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Jorge Hidalgo
 
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Jorge Hidalgo
 
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17Jorge Hidalgo
 
OpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesOpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesJorge Hidalgo
 
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJorge Hidalgo
 
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07Jorge Hidalgo
 
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost ComputersJavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost ComputersJorge Hidalgo
 
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...Jorge Hidalgo
 
Next-gen IDE v2 - OpenSlava 2013-10-11
Next-gen IDE v2 - OpenSlava 2013-10-11Next-gen IDE v2 - OpenSlava 2013-10-11
Next-gen IDE v2 - OpenSlava 2013-10-11Jorge Hidalgo
 
The Usual Suspects - Red Hat Developer Day 2012-11-01
The Usual Suspects - Red Hat Developer Day 2012-11-01The Usual Suspects - Red Hat Developer Day 2012-11-01
The Usual Suspects - Red Hat Developer Day 2012-11-01Jorge Hidalgo
 

More from Jorge Hidalgo (20)

GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22
 
GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18
 
Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01
 
GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28
 
GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
 
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
 
DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03
 
All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06
 
Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017
 
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
 
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
 
OpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesOpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java Architectures
 
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
 
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
 
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost ComputersJavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
 
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
 
Next-gen IDE v2 - OpenSlava 2013-10-11
Next-gen IDE v2 - OpenSlava 2013-10-11Next-gen IDE v2 - OpenSlava 2013-10-11
Next-gen IDE v2 - OpenSlava 2013-10-11
 
The Usual Suspects - Red Hat Developer Day 2012-11-01
The Usual Suspects - Red Hat Developer Day 2012-11-01The Usual Suspects - Red Hat Developer Day 2012-11-01
The Usual Suspects - Red Hat Developer Day 2012-11-01
 

Recently uploaded

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 

Java code inspection and testing tools

  • 1. TOOLS JAVA CODE INSPECTION AND TESTING JAVAONE 2017 CON2902 SAN FRANCISCO - 3 OCTOBER 2017 JORGE HIDALGO ACCENTURE DELIVERY CENTER IN SPAIN ACCENTURE GLOBAL JAVA CAPABILITY
  • 2. Copyright 2017 Accenture. All rights reserved. 2 WHO I AM Jorge Hidalgo @_deors Coordinator – Málaga JUG Global Java Lead – Accenture Technology Java, Architecture & DevOps Lead – Accenture Delivery Center in Spain Father of two children, husband, whistle player, video gamer, sci-fi ‘junkie’, Star Wars ‘addict’, Lego brick ‘wielder’, Raspberry Pi fan… LLAP! https://deors.wordpress.com https://www.meetup.com/es-ES/MalagaJUG/
  • 3. CODE INSPECTION CODE COVERAGE MUTATION TESTING MOCKS, STUBS, DOUBLES SECURITY TESTING CODE INSPECTION AND TESTING TOOLS Copyright 2017 Accenture. All rights reserved. 3
  • 4. Copyright 2017 Accenture. All rights reserved. 4 MOTIVATION – WHY USE TOOLS? QUALITY Software craftmanship No blaming No last minute fixes Client satisfaction Boss satisfaction Pay rise! PRODUCTIVITY No boring, repetitive tasks Focus on the cool stuff Do more in less time Client satisfaction Boss satisfaction Pay rise! PREDICTABILITY Software development as a precision work Always on schedule No surprises Client satisfaction Boss satisfaction Pay rise!
  • 5. Copyright 2017 Accenture. All rights reserved. 5 CODE INSPECTION WHAT WHY Statically profile source code and configuration for adherence to defined coding standards, architecture & design best practices, and to highlight potential bugs. Improve quality and productivity (less defects mean less fix effort). By using tools to automate code inspection, reviews are exhaustive and inclusive of all source files. Let the core review effort focus on constructive conversations about the creative aspects of the functionality and how it is implemented.
  • 6. Copyright 2017 Accenture. All rights reserved. 6 CODE INSPECTION TOOLS ScapegoatScalastyle
  • 7. Copyright 2017 Accenture. All rights reserved. 7 CODE INSPECTION TOOLS Beware of overlapping (equivalent) rules!
  • 8. Copyright 2017 Accenture. All rights reserved. 8 CODE INSPECTION TOOLS + plug-ins Get the best from each of them Combine outputs into a single report Code reviews Action plans
  • 9. Copyright 2017 Accenture. All rights reserved. 9 CODE COVERAGE WHAT WHY Measure what source code and branches are actually executed after any suite of tests, both automated and manual. Identify which lines and branches of application code have not been executed by tests, and hence pinpoint which specific test cases are missing and should be created. Code coverage should be used as a ‘negative test’, never as a ‘positive test’. It is not uncommon to see automated test cases that simply run some code, without actually checking / asserting anything.
  • 10. Copyright 2017 Accenture. All rights reserved. 10 CODE COVERAGE TOOLS CoberturaJCov isparta
  • 11. Copyright 2017 Accenture. All rights reserved. 11 CODE COVERAGE TOOLS Use it to gather coverage from manual tests, if you don’t have automated Use EclEmma inside Eclipse to ensure all key test cases are covered by tests Combine with SonarQube listener to get metrics per every single test executed
  • 12. Copyright 2017 Accenture. All rights reserved. 12 CODE COVERAGE TOOLS
  • 13. Copyright 2017 Accenture. All rights reserved. 13 CODE COVERAGE TOOLS
  • 14. Copyright 2017 Accenture. All rights reserved. 14 CODE COVERAGE TOOLS <dependency> <groupId>org.jacoco</groupId> <artifactId>org.jacoco.agent</artifactId> <version>0.7.9</version> <classifier>runtime</classifier> <scope>test</scope> </dependency> <dependency> <groupId>org.sonarsource.java</groupId> <artifactId>sonar-jacoco-listeners</artifactId> <version>4.11.0.10660</version> <scope>test</scope> </dependency> To enable code coverage per test: 1. Add these dependencies to pom.xml
  • 15. Copyright 2017 Accenture. All rights reserved. 15 CODE COVERAGE TOOLS To enable code coverage per test: 2. Enable JaCoCo listener in Surefire <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20.1</version> <configuration> <properties> <property> <name>listener</name> <value>org.sonar.java.jacoco.JUnitListener</value> </property> </properties> </configuration> </plugin>
  • 16. Copyright 2017 Accenture. All rights reserved. 16 MUTATION TESTING WHAT WHY Identify uncovered test cases by executing unit tests after pieces of code are mutated (specific, atomic changes). Ensure that automated test code is covering all the relevant test cases and conditions. Code coverage is simply not enough. Mutation testing pinpoints which tests are not asserting that actual results are equal to expected results, as well as uncover specific conditions that were not tested (possible even if code coverage says 100% lines and branches are tested).
  • 17. Copyright 2017 Accenture. All rights reserved. 17 MUTATION TESTING TOOLS
  • 18. Copyright 2017 Accenture. All rights reserved. 18 MUTATION TESTING TOOLS Mutation testing tools introduce controlled changes in application code, one at a time Code base Code mutation if (a >= 0) if (a < 0) if (b == 1) if (a == -1) someObject.someMethod(“hi”) someObject.someMethod(null) someObject.someMethod(whatever) Method call is removed Re-execute those tests executing the modified logic If tests do not fail, then the test is wrong ➢ It is not asserting thoroughly enough ➢ It is not asserting anything!
  • 19. Copyright 2017 Accenture. All rights reserved. 19 MUTATION TESTING TOOLS Key facts for the really impatient: It does not require changes in application code It does not require changes in test code It requires zero or little configuration It mutates on bytecodes, so it is as efficient as possible It re-executes only the relevant tests after a change Yet… it takes time! Run Pitest in the background in your IDE, or in CI builds publishing results to SonarQube!
  • 20. Copyright 2017 Accenture. All rights reserved. 20 MUTATION TESTING TOOLS Results in Eclipse Results in SonarQube
  • 21. Copyright 2017 Accenture. All rights reserved. 21 MUTATION TESTING TOOLS Configure exclusions wisely, Pitest can take very long hours to execute with integration tests Use XML output to pull data into SonarQube
  • 22. Copyright 2017 Accenture. All rights reserved. 22 MUTATION TESTING TOOLS Example mutators:  Conditionals Boundary Mutator  Negate Conditionals Mutator  Remove Conditionals Mutator  Math Mutator  Increments Mutator  Invert Negatives Mutator  Inline Constant Mutator  Return Values Mutator  Void Method Calls Mutator  Non Void Method Calls Mutator  Constructor Calls Mutator
  • 23. Copyright 2017 Accenture. All rights reserved. 23 MOCKS, STUBS, DOUBLES WHAT WHY Isolate automated tests from external dependencies, that may or may not be available at the time of the test execution. Automated tests should be repeatable, and as independent from the execution environment and moment as possible. By isolating external dependencies, tests are less subject to interference, are more robust, and focused on one verification each time. Error and exceptions can be simulated. Using mocks, stubs and test doubles, the behavior of external dependencies is simulated by applying different strategies. Critical for unit tests!
  • 24. Copyright 2017 Accenture. All rights reserved. 24 MOCKING FRAMEWORKS Spock SINON.JS ScalaMock
  • 25. Copyright 2017 Accenture. All rights reserved. 25 MOCKING FRAMEWORKS EasyMock provides common mocking patterns PowerMock is capable of instrumenting code and make testable code that isn’t: • static blocks • constructors • object instantiation • private members JMockit provides all capabilities above combined, with a more modern and expressive API
  • 26. Copyright 2017 Accenture. All rights reserved. 26 MOCKING FRAMEWORKS public class DirectoryManager { public DirectoryManager(String directoryHost, int directoryPort) throws DirectoryException { super(); if (directoryHost == null || directoryHost.length() == 0 || directoryPort <= 0) { throw new IllegalArgumentException("ERR_OPEN_CONN_ARG"); } try { connection = new LDAPConnection(); connection.connect(directoryHost, directoryPort); } catch (LDAPException ldape) { throw new DirectoryException("ERR_OPEN_CONN", ldape); } connected = true; } … } Constructor that opens an LDAP connection
  • 27. Copyright 2017 Accenture. All rights reserved. 27 MOCKING FRAMEWORKS Making it testable with EasyMock + PowerMock @RunWith(PowerMockRunner.class) @PrepareForTest(DirectoryManager.class) public class DirectoryManagerPowerMockTestCase { @Test(expected = DirectoryException.class) public void testConstructorError() throws Exception { LDAPConnection lc = PowerMock.createMock(LDAPConnection.class); PowerMock.expectNew(LDAPConnection.class).andReturn(lc); lc.connect("localhost", 2000); EasyMock.expectLastCall().andThrow(new LDAPException("error", 1, "error")); PowerMock.replay(lc, LDAPConnection.class); new DirectoryManager("localhost", 2000); } … }
  • 28. Copyright 2017 Accenture. All rights reserved. 28 MOCKING FRAMEWORKS Making it testable with JMockit @RunWith(JMockit.class) public class DirectoryManagerJMockitTestCase { @Mocked(stubOutClassInitialization = true) LDAPConnection connection = new LDAPConnection(); @Test(expected = DirectoryException.class) public void testConstructorError() throws Exception { new Expectations() {{ connection.connect("localhost", 2000); result = new LDAPException("error", 1, "error"); }}; new DirectoryManager("localhost", 2000); }
  • 29. Copyright 2017 Accenture. All rights reserved. 29 SECURITY TESTING WHAT WHY Analyze code, both statically and dynamically, to identify potential security issues: vulnerabilities, defensive programming patterns, etc. As applications grow in complexity, and as more and more services are directly exposed to end consumers over the Internet, and as we speed up the release processes thanks to DevOps, it is adamant to have automated security tests along the life-cycle. Prevent impersonation, personal and sensible information leaks (passwords, social security numbers, credit card data), business confidential information, secret reports, etc. Scans look at both source code and external dependencies!
  • 30. Copyright 2017 Accenture. All rights reserved. 30 SECURITY TESTING TOOLS ZAP Dependency Check ZAP Dependency Check ZAP Dependency Check ZAP Dependency Check
  • 31. Copyright 2017 Accenture. All rights reserved. 31 SECURITY TESTING TOOLS ZAP Dynamic profiler – Two modes: Passive Scan Works as an HTTP proxy Analyzes HTTP requests and responses (for example, during test execution, ideally automated in a CI/CD pipeline) Looks for known vulnerabilities like:  SQL injection  Cross site request forgery (CSRF)  Cross site scripting (XSS)  Cookie handling
  • 32. Copyright 2017 Accenture. All rights reserved. 32 SECURITY TESTING TOOLS ZAP Dynamic profiler – Two modes: Active Scan Launch coordinated attacks on the target application It should be executed only in applications you are authorized to Never in production, it can break things, and lead to data loss It may take a long, long time to complete a full scan, even in a simple application
  • 33. Copyright 2017 Accenture. All rights reserved. 33 SECURITY TESTING TOOLS ZAP
  • 34. Dependency Check Copyright 2017 Accenture. All rights reserved. 34 SECURITY TESTING TOOLS Scan dependencies for a given project/module, looking for known vulnerabilities in those dependencies (version-wise) Uses NIST National Vulnerability Database (NVD) Can be run from command-line, Ant, Maven, Gradle, sbt or Jenkins
  • 35. Dependency Check Copyright 2017 Accenture. All rights reserved. 35 SECURITY TESTING TOOLS
  • 36. Copyright 2017 Accenture. All rights reserved. 36 SUMMARY PROFILE YOUR CODE Pick a static code profiler to automate review of coding standards and common best practices MEASURE COVERAGE Understand which parts of your code are not being tested by mixing code coverage and mutation testing SECURITY FIRST Put security first by combining defensive programming patterns with checks from static and dynamic profilers MOCKS ARE GOOD They help to make tests repeatable and independent from the environment, and make testable, code that isn’t
  • 37. Copyright 2017 Accenture. All rights reserved. 37 REFERENCES SonarQube – https://www.sonarqube.org ESLint – https://eslint.org EclEmma & JaCoCo – http://www.eclemma.org Pitest – http://pitest.org JMockit – http://jmockit.org FindSecBugs – https://find-sec-bugs.github.io OWASP ZAP – https://www.owasp.org/index.php/ZAP OWASP Dependency Check – https://www.owasp.org/index.php/OWASP_Dependency_Check
  • 38. Copyright 2017 Accenture. All rights reserved. 38 MORE TALKS AT JAVAONE 2017 CON3282 – Code Generation with Annotation Processors Wed 4th, 9.30, Moscone West 2018 CON3276 – Selenium Testing Patterns Reloaded Wed 4th, 2.45, Moscone West 2007 CON4258 – Continuous Code Quality with SonarQube and SonarLint Tue 3rd, 8.30, Moscone West 2009 CON2361 – Web Application Security for Developers: Tooling and Best Practices Wed 4th, 10.45, Moscone West 2009 CON1694 – Intro to Mutation Testing in Java Thu 5th, 12.45, Marriott Marquis Nob Hill C/D ALWAYS CHECK THE CONFERENCE AGENDA/APP FOR LAST-MINUTE CHANGES!