Software infrastructure for Java development projects



Similar documents
Java Software Quality Tools and techniques

Java Power Tools. John Ferguson Smart. ULB Darmstadt 1 PI. O'REILLY 4 Beijing Cambridge Farnham Koln Paris Sebastopol Taipei Tokyo

Upping the game. Improving your software development process

Build management & Continuous integration. with Maven & Hudson

Continuous Integration Multi-Stage Builds for Quality Assurance

Software Construction

Jenkins Continuous Build System. Jesse Bowes CSCI-5828 Spring 2012

Practicing Continuous Delivery using Hudson. Winston Prakash Oracle Corporation

SA4 Software Developer Survey Survey Specification v2.2

Jenkins: The Definitive Guide

Maven or how to automate java builds, tests and version management with open source tools

Continuous Delivery. Alejandro Ruiz

Content. Development Tools 2(63)

Delivering Quality Software with Continuous Integration

Continuous Integration: A case study

SMZ. SocialMedia. Z olutions

Improving Software Quality with the Continuous Integration Server Hudson. Dr. Ullrich Hafner Avaloq Evolution AG 8911

Introduction to Programming Tools. Anjana & Shankar September,2010

SOA-14: Continuous Integration in SOA Projects Andreas Gies

TeamCity A Professional Solution for Delivering Quality Software, on Time

Automated performance testing using Maven & JMeter. George Barnett, Atlassian Software

SOFTWARE DEVELOPMENT BASICS SED

Beginning POJOs. From Novice to Professional. Brian Sam-Bodden

Beginners guide to continuous integration. Gilles QUERRET Riverside Software

Nexus Professional Whitepaper. Repository Management: Stages of Adoption

Software Continuous Integration & Delivery

Continuous Integration

Software project management. and. Maven

Continuous Integration

GECKO Software. Introducing FACTORY SCHEMES. Adaptable software factory Patterns

Jenkins User Conference Herzelia, July #jenkinsconf. Testing a Large Support Matrix Using Jenkins. Amir Kibbar HP

Continuous Integration

Agile ALM. Lightweight tools and Agile strategies MANNING MICHAEL HUTTERMANN. Shelter Island

Coding in Industry. David Berry Director of Engineering Qualcomm Cambridge Ltd

Continuous Integration: Put it at the heart of your development

Meister Going Beyond Maven

Paul Barham Program Manager - Java. David Staheli (dastahel@microsoft.com) Software Development Manager - Java

<Insert Picture Here> Introducing Hudson. Winston Prakash. Click to edit Master subtitle style

CONTINUOUS INTEGRATION

Continuous Integration For Fusion Middleware

WHITE PAPER. Getting started with Continuous Integration in software development. - Amruta Kumbhar, Madhavi Shailaja & Ravi Shankar Anupindi

Software configuration management

Open Source Tools. The Magazine for Professional Testers. December 2010

Continuous Integration and Delivery at NSIDC

Software project management. and. Maven

Software Development In the Cloud Cloud management and ALM

How the Open Source tools and spirit enable better projects July 09 th 2009

Modulo II Qualidade de Software com Maven

SOA Solutions & Middleware Testing: White Paper

Continuous Integration and Bamboo. Ryan Cutter CSCI Spring Semester

SUCCESFUL TESTING THE CONTINUOUS DELIVERY PROCESS

Developing Applications Using Continuous Integration 12c (12.2.1)

E-vote 2011 Version: 1.0 Testing and Approval Date: 26/10/2009. E-vote SSA-U Appendix 5 Testing and Approval Project: E-vote 2011

Software Quality Exercise 2

JavaScript Applications for the Enterprise: From Empty Folders to Managed Deployments. George Bochenek Randy Jones

Effektiver Tool-Einsatz

Accelerate Software Delivery

Maven2 Reference. Invoking Maven General Syntax: Prints help debugging output, very useful to diagnose. Creating a new Project (jar) Example:

HP SAP. Where Development, Test and Operations meet. Application Lifecycle Management

How To Use An Orgsync With Anorgfusion Middleware

We ( have extensive experience in enterprise and system architectures, system engineering, project management, and

Development Testing for Agile Environments

Nick Ashley TOOLS. The following table lists some additional and possibly more unusual tools used in this paper.

How To Write Unit Tests In A Continuous Integration

CPSC 491. Today: Source code control. Source Code (Version) Control. Exercise: g., no git, subversion, cvs, etc.)

Testing Tools Content (Manual with Selenium) Levels of Testing

Leveraging Rational Team Concert's build capabilities for Continuous Integration

Hudson Continous Integration Server. Stefan Saasen,

Software Development Kit

Version Control Tools

Continuous Integration: Improving Software Quality and Reducing Risk. Preetam Palwe Aftek Limited

Continuous integration with Jenkins CI

Continuous Integration with Jenkins. Coaching of Programming Teams (EDA270) J. Hembrink and P-G. Stenberg [dt08jh8

Expert PHP 5 Tools. Proven enterprise development tools and best practices for designing, coding, testing, and deploying PHP applications.

SUCCESFUL TESTING THE CONTINUOUS DELIVERY PROCESS

"Build and Test in the Cloud "

Sonatype CLM for Maven. Sonatype CLM for Maven

Beginner s guide to continuous integration. Gilles QUERRET Riverside Software

Jenkins on Windows with StreamBase

WHITEPAPER. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Principle #1, Agile Manifesto

Using Git with Rational Team Concert and Rational ClearCase in enterprise environments

a new generation software test automation framework - CIVIM

Enabling Continuous Delivery by Leveraging the Deployment Pipeline

The Deployment Production Line

Escaping the Works-On-My-Machine badge Continuous Integration with PDE Build and Git

Continuous Integration in Kieker

}w!"#$%&'()+,-./012345<ya

CI:IRL. By Beth Tucker Long

Case Study: Using Jenkins to Build WebSphere Portal Applications for the Enterprise. #jenkinsconf. Jenkins User Conference Boston #jenkinsconf

WHITEPAPER. Solving database deployments with Database Lifecycle Management

Transcription:

Tools that can optimize your development process Software infrastructure for Java development projects

Presentation plan Software Development Lifecycle Tools What tools exist? Where can tools help? Practical Applications How are these tools used in the real world? Work of the O2C2 group at Inland Revenue to improve the Inland Revenue Java development process

The Java Power Tools Book

The Java Power Tools Book Tools to optimize the Java SDLC Main author: John Smart Supported by Equinox Published by O'Reilly Contributions from lots of authors Website: http://www.javapowertools.com

Inland Revenue and O2C2 Inland Revenue Carries out a large number of internal and external Java-based developments O2C2: The Object Oriented Competency Centre Provide coaching and technical expertise in Java development Optimize development practices and the SDLC infrastructure

Types of tools Many tools exist Different tools are useful for different tasks What tools exist? Where can tools help? When are different tools appropriate?

Types of tools Let's define some categories: Build Process tools Version Control tools Continuous Integration tools Quality Metrics and code audit tools Unit Testing and Test Coverage tools Integration, Functional, Load and Performance Testing tools Technical Documentation tools

Types of tools Let's define some categories: Build Process tools Version Control tools Continuous Integration tools Quality Metrics and code audit tools Unit Testing and Test Coverage tools Integration, Functional, Load and Performance Testing tools Technical Documentation tools

Build Tools The cornerstone of the SDLC process: Make your builds reproducible Make your builds portable Allows you to automate your build process Two main Java tools: Ant and Maven 2

Ant A procedural build scripting tool Well-known and widely-used Powerful and flexible Lots of plugins Needs lots of low-level plumbing code Large scripts can become difficult to maintain

Maven 2 A declarative build scripting framework Higher level scripting Strong use of standards and conventions Convention over Configuration Lots of plugins Good reporting features More rigid than Ant

A Standard Directory Structure A standard project directory structure

Standard lifecycle A standard development lifecycle compile test-compile test integration-test package install deploy

Standard Build Commands Maven 2 - standard build commands $ $ $ $ mvn mvn mvn mvn... compile test package deploy compile test-compile test integration-test package install deploy

Dependency Management Declarative Dependency Management Important feature of Maven 2 A major step towards a simpler build process

Traditional Dependency Management Traditional approach JAR files stored in CVS Each project has its own set of JAR files Unnecessary duplication Hard to keep track of versions Errors due to incompatible JARs Overloads the source code repository

Traditional Dependency Management I need these JARs for my project Which versions? Internet I need some too CVS Individual Project websites

Declarative Dependency Management Declarative dependency management Versioned JARs stored on a central server Each projects declares what libraries it needs Secondary dependencies are automatically downloaded

Declarative Dependency Management I need Hibernate 3.2.4 2.0.1 1.0 1.2.16 3.2.4 Internet I need Spring 2.0.6 Public repositories 1.4 cache 2.0.6 Enterprise Maven Repository 2.4 1.8

The Enterprise Maven Repository An Enterprise Maven Repository Acts as a proxy/cache for downloaded dependencies Faster and more reliable than always going to the internet Store third-party and internal libraries as well

Maven 2 Reporting Maven 2 - reporting Powerful and easy-to-use reporting features

Types of tools Categories of tools Build Process tools Version Control tools Continuous Integration tools Quality Metrics and code audit tools Unit Testing and Test Coverage tools Integration, Functional, Load and Performance Testing tools Technical Documentation tools

Version Control Tools Version control tools provide: A central storage for source code Backups and change history Identify versions and releases 1.0 1.1 1.2 1.1.1 Two main Open Source tools: CVS and Subversion

CVS A venerable open source version control tool Starting to show its age: No atomic commits Poor support for non-binary files Difficult to rename or move directories Slow tagging and logging

Subversion Designed to replace CVS Better adapted to Java development: Atomic commits Good support for binary files Fast tagging and branching

Subversion Has some nice advanced features: HTTP / WebDAV support Windows integration (TortoiseSVN) Web interface (Trac)

Types of tools Categories of tools Build Process tools Version Control tools Continuous Integration tools Quality Metrics and code audit tools Unit Testing and Test Coverage tools Integration, Functional, Load and Performance Testing tools Technical Documentation tools

Continuous Integration Integrate early, integrate often: Automate the build process Minimise code integration issues Improve visibility on the development process More flexibility and agility

Continuous Integration The Traditional development process: Coding Maybe some unit tests Integration System and UAT testing Production

The traditional approach Infrequent commits Difficult integration process Lots of bugs Version control (CVS) Infrequent releases Test server Testing only at the end

The traditional approach A flawed process: Testing may not be done efficiently Integration is long and difficult Poor visibility on development progress Functional tests are done too late Raised issues are harder to fix The client gets a sub-optimal product

How Continuous Integration helps Less bugs, faster fixes Regular commits Version control (CVS) Fast notification of integration issues Smother integration Regular testing Dedicated build server Automatic builds Automated tests Automatic reporting Regular releases Automated deployment Test server

Advantages of Continuous Integration An industry best practice Smoother integration Automatic regression testing Regular working releases Earlier functional testing Faster and easier bug fixes Better visibility

Continuous Integration tools Many choices CruiseControl LuntBuild Continuum Hudson... Some commercial tools are also available, for exampe: TeamCity (JetBrains) Bamboo (Atlassian) Pulse (Zutubi)

Continuous Integration tools CruiseControl Mature tool Strong user base Lots of extensions Hard to set up and maintain

Continuous Integration tools LuntBuild Web-based, easy to use Manages artifacts, dependencies and labels

Continuous Integration tools Continuum Web-based, easy to use Not as feature-rich as the others A bit clunky

Continuous Integration tools Hudson Web-based, easy to use Lots of plugins Cool user interface

The Hudson CI Server A project build status dashboard

The Hudson CI Server Automatic builds whenever code is committed

The Hudson CI Server Notification by email When a build fails When it is fixed

The Hudson CI Server Keeps a history of build results and artifacts

The Hudson CI Server View changes in a particular build Tag a build in CVS

Types of tools Categories of tools Build Process tools Version Control tools Continuous Integration tools Quality Metrics and code audit tools Unit Testing and Test Coverage tools Integration, Functional, Load and Performance Testing tools Technical Documentation tools

Quality Metrics Why enforce coding standards? Better quality code Code is easier to maintain Detect potential bugs Train staff

Quality Metrics Manual code reviews are good, but... Slow and time-consuming Tend not to be done systematically Automatic code audits Automatically enforce organisation coding standards Detect bad coding practices and potential bugs Facilitate developer training

Quality Metrics tools We use three complementary tools Checkstyle coding standards PMD best practices FindBugs potential bugs

Quality Metrics Checkstyle - Enforce coding standards Formatting and indentation Naming conventions Javadocs etc...

Quality Metrics Checkstyle - Enforce coding standards Eclipse plugin

Quality Metrics Checkstyle - Enforce coding standards Maven reports

Quality Metrics Checkstyle - Enforce coding standards Continuous Integration server

Quality Metrics PMD Best practices Empty try/catch/finally blocks Incorrect null pointer checks Excessive method length or complexity etc... Some overlap with Checkstyle

Quality Metrics PMD Best practices Eclipse plugin

Quality Metrics PMD Best practices Maven reports

Quality Metrics PMD Best practices Continuous Integration server

Quality Metrics FindBugs Potential defects Potential NullPointerExceptions Infinite loops etc...

Quality Metrics FindBugs Potential defects Eclipse plugin

Quality Metrics FindBugs Potential defects Maven reports

Quality Metrics FindBugs Potential defects Continuous Integration server

Types of tools Categories of tools Build Process tools Version Control tools Continuous Integration tools Quality Metrics and code audit tools Unit Testing and Test Coverage tools Integration, Functional, Load and Performance Testing tools Technical Documentation tools

Unit Testing A recommended best practice Unit testing results in: More reliable code Better designed code More flexible code

Unit Testing Tools Main tools JUnit 3.x the original, with lots of extensions JUnit 4 annotations and stuff TestNG the cutting edge

Unit Testing in Eclipse JUnit Eclipse integration

Test reports Maven test reports

Test result trends Hudson dashboard

Test Coverage Test Coverage: Are unit tests being written for all classes? How much code is really executed by the unit tests? Un-executed code will contain bugs Tool used: Cobertura

Test Coverage Reports Maven coverage reports:

Test Coverage Hudson Dashboard

Types of tools Categories of tools Build Process tools Version Control tools Continuous Integration tools Quality Metrics and code audit tools Unit Testing and Test Coverage tools Integration, Functional, Load and Performance Testing tools Technical Documentation tools

Integration, Functional, UI and Perf Tests Cover all your bases DBUnit - database testing Spring testing framework (Spring MVC) or StrutsTestCase Eclipse Profiling (TPTP) - profiling JMeter load and performance testing SoapUI web service testing Selenium web interface testing FEST Swing applications...

User Interface Testing Automatic UI testing with Selenium:

Regression Testing All tests automatically run before each build: Unit tests Integration tests User Interface tests

Types of tools Categories of tools Build Process tools Version Control tools Continuous Integration tools Quality Metrics and code audit tools Unit Testing and Test Coverage tools Integration, Functional, Load and Performance Testing tools Technical Documentation tools

Technical Documentation Human-written documentation: (potentially) highest possible quality BUT Often incomplete Hard to keep up-to-date

Technical Documentation Automatically-generated documentation: Complete Always up-to-date Cheap to produce BUT Lacks higher vision

Technical Documentation Many tools available: Maven web site lots of reports and project info SchemaSpy database schemas Doxygen UML documentation UmlGraph UML-enabled Javadoc

Technical Documentation Maven web site Rich reporting capabilities General project information Detailed, customizable reports

Technical Documentation SchemaSpy Database schemas

Technical Documentation DOxygen UML-embedded documentation

Technical Documentation UMLGraph Javadoc with UML diagrams

Technical Documentation Also some human-written documentation project Wiki Architecture vision High-level design Collaborative

Overview A Standard Build Process Dependency Management Continuous Integration Continuous Testing Continuous Quality Continuous Reporting Continuous Documentation

Questions?