SlideShare une entreprise Scribd logo
1  sur  248
Upping the game
Improving your software development process


  John Ferguson Smart
  Principle Consultant
  Wakaleo Consulting
  Email: john.smart@wakaleo.com
  Web: http://www.wakaleo.com
  Twitter: wakaleo
Presentation Goals
Learn how to improve, harmonize and automate your
development process using tools like Maven, Hudson, and
many others.
Speaker’s qualifications
John Ferguson Smart
Consultant, Trainer, Mentor, Author,...
Works with Enterprise Java, Web Development, and
Open Source technologies
Author of ‘Java Power Tools’ (O’Reilly)
Writes articles for sites like JavaWorld, DevX and
Java.net, and blogs on Java.net
Speaks at conferences, Java User Groups etc.
Likes to write about himself in the third person
Agenda
What we will cover today:
Agenda
What we will cover today:
Industrializing your build process
Agenda
What we will cover today:
Industrializing your build process
Automate your builds
Agenda
What we will cover today:
Industrializing your build process
Automate your builds
Better testing practices
Agenda
What we will cover today:
Industrializing your build process
Automate your builds
Better testing practices
Reducing technical debt
Why improve?
       HERE is Edward Bear, coming downstairs now, bump,
       bump, bump, on the back of his head, behind
       Christopher Robin. It is, as far as he knows, the only
       way of coming downstairs, but sometimes he feels
       that there really is another way, if only he could stop
       bumping for a moment and think of it.
                                                  -- A. A. Milne
Why should we improve?
Why should we improve our development process?
Why should we improve?
Why should we improve our development process?
 Lower development costs
Why should we improve?
Why should we improve our development process?
 Lower development costs
 Lower maintenance costs
Why should we improve?
Why should we improve our development process?
 Lower development costs
 Lower maintenance costs
 Less bugs
Why should we improve?
Why should we improve our development process?
 Lower development costs
 Lower maintenance costs
 Less bugs
 Higher code quality
Why should we improve?
Why should we improve our development process?
 Lower development costs
 Lower maintenance costs
 Less bugs
 Higher code quality
 Be flexible - adapt to change more easily
Why should we improve?
Why should we improve our development process?
 Lower development costs
 Lower maintenance costs
 Less bugs
 Higher code quality
 Be flexible - adapt to change more easily
 Happier more productive users
How can we improve?
How can we improve our development process?
How can we improve?
How can we improve our development process?
 Standardized build practices
How can we improve?
How can we improve our development process?
 Standardized build practices
 Better testing practices
How can we improve?
How can we improve our development process?
 Standardized build practices
 Better testing practices
 Better visibility
How can we improve?
How can we improve our development process?
 Standardized build practices
 Better testing practices
 Better visibility
 Faster feedback
How can we improve?
How can we improve our development process?
 Standardized build practices
 Better testing practices
 Better visibility
 Faster feedback
 Quality metrics
How can we improve?
How can we improve our development process?
 Standardized build practices
 Better testing practices
 Better visibility
 Faster feedback
 Quality metrics
 Automate!
Tools for the job
There are plenty of tools available - and most are free!
Tools for the job
There are plenty of tools available - and most are free!
                    maven
                                     Build scripting
Tools for the job
There are plenty of tools available - and most are free!
                    maven
                                     Build scripting




                             JUnit
                                                       Automated testing
Tools for the job
    There are plenty of tools available - and most are free!
                         maven
                                         Build scripting




Automated code quality

                                 JUnit
                                                           Automated testing
Towards a better build process
Standardize your build process with Maven
Towards a better build process
Standardize your build process with Maven
What is Maven, anyway?
Towards a better build process
Standardize your build process with Maven
What is Maven, anyway?
 A high-level open source build scripting framework
Towards a better build process
Standardize your build process with Maven
What is Maven, anyway?
 A high-level open source build scripting framework
 Extensively used in the Java world
Towards a better build process
How does Maven help?
Towards a better build process
How does Maven help?
 Standards
Towards a better build process
How does Maven help?
 Standards
 Conventions
Towards a better build process
How does Maven help?
 Standards
 Conventions
 Lower Maintenance Costs
Towards a better build process
How does Maven help?
 Standards
 Conventions
 Lower Maintenance Costs
 Knowledge sharing
Towards a better build process
How does Maven help?
 Standards
 Conventions
 Lower Maintenance Costs
 Knowledge sharing
 Dependency Management
Towards a better build process
How does Maven help?
 Standards
 Conventions
 Lower Maintenance Costs
 Knowledge sharing
 Dependency Management
 Promoting good architecture
So how can Maven help me?
Standards and Conventions
So how can Maven help me?
Standards and Conventions
A standard directory structure
So how can Maven help me?
Standards and Conventions
A standard directory structure
A standard, but extensible build lifecycle
So how can Maven help me?
Standards and Conventions
A standard directory structure
A standard, but extensible build lifecycle

                         So new developers understand the
                         project structure and build process
                                    straight away!
So how can Maven help me?
Standards and Conventions
A standard directory structure
A standard, but extensible build lifecycle

                               So new developers understand the
                               project structure and build process
                                          straight away!


      ...and the build scripts are much
     easier to understand and maintain
So how can Maven help me?
Technical documentation
So how can Maven help me?
Technical documentation
Generate technical project documentation
So how can Maven help me?
Technical documentation
Generate technical project documentation
Easy to integrate code quality metrics
So how can Maven help me?
Technical documentation
Generate technical project documentation
Easy to integrate code quality metrics




       I can even generate UML
       diagrams in my Javadocs
So how can Maven help me?
Technical documentation
Generate technical project documentation
Easy to integrate code quality metrics




       I can even generate UML
       diagrams in my Javadocs
So how can Maven help me?
Technical documentation
Generate technical project documentation
Easy to integrate code quality metrics




       I can even generate UML
       diagrams in my Javadocs


                      And setting up code quality
                         metrics is a breeze!
So how can Maven help me?
Project architecture
So how can Maven help me?
Project architecture
Encourages developers to use modular design
So how can Maven help me?
Project architecture
Encourages developers to use modular design
More flexible architecture
So how can Maven help me?
Project architecture
Encourages developers to use modular design
More flexible architecture
Reduced complexity and maintenance costs
So how can Maven help me?
Project architecture
Encourages developers to use modular design
More flexible architecture
Reduced complexity and maintenance costs




      ...and the smaller modules are
         easier to test and maintain
So how can Maven help me?
Project architecture
Encourages developers to use modular design
More flexible architecture
Reduced complexity and maintenance costs
                                   Breaking our application down
                                    into clean modules is much
                                               easier

      ...and the smaller modules are
         easier to test and maintain
So how can Maven help me?
Dependency Management
So how can Maven help me?
Dependency Management
Understand precisely what libraries your application needs
So how can Maven help me?
Dependency Management
Understand precisely what libraries your application needs
Safer and more reproducible builds
So how can Maven help me?
Dependency Management
Understand precisely what libraries your application needs
Safer and more reproducible builds
A standard way to share internal libraries
So how can Maven help me?
Dependency Management
Understand precisely what libraries your application needs
Safer and more reproducible builds
A standard way to share internal libraries
                             All our libraries are shared and
                            safely stored on a central server
So how can Maven help me?
Dependency Management
Understand precisely what libraries your application needs
Safer and more reproducible builds
A standard way to share internal libraries
                                   All our libraries are shared and
                                  safely stored on a central server


    ...we just have to name the ones
        we need in our build script
So how can Maven help me?
Dependency Management before Maven


                                     lib
So how can Maven help me?
Dependency Management before Maven
 Each project has its own set of JAR files


                                            lib
So how can Maven help me?
Dependency Management before Maven
 Each project has its own set of JAR files
 Unnecessary duplication
                                            lib
So how can Maven help me?
Dependency Management before Maven
 Each project has its own set of JAR files
 Unnecessary duplication
 Hard to keep track of versions             lib
So how can Maven help me?
Dependency Management before Maven
 Each project has its own set of JAR files
 Unnecessary duplication
 Hard to keep track of versions             lib
 Errors due to incompatible JAR files
So how can Maven help me?
Dependency Management before Maven
 Each project has its own set of JAR files
 Unnecessary duplication
 Hard to keep track of versions             lib
 Errors due to incompatible JAR files
 Overloads the source code repository
So how can Maven help me?
Dependency Management before Maven
 Each project has its own set of JAR files
 Unnecessary duplication
 Hard to keep track of versions             lib
 Errors due to incompatible JAR files
 Overloads the source code repository




           ...and you never know what
              versions you are using
So how can Maven help me?
Dependency Management using Maven




           Projects declare the versions   Libraries are stored
              of libraries they need       on a central server




                                                             Libraries are
                                                           downloaded as
                                                               required
So how can Maven help me?
Dependency Management using Maven
 Library versions are stored on a central server




                 Projects declare the versions   Libraries are stored
                    of libraries they need       on a central server




                                                                   Libraries are
                                                                 downloaded as
                                                                     required
So how can Maven help me?
Dependency Management using Maven
 Library versions are stored on a central server
 Each project “declares” what libraries and versions it needs



                Projects declare the versions   Libraries are stored
                   of libraries they need       on a central server




                                                                  Libraries are
                                                                downloaded as
                                                                    required
So how can Maven help me?
Dependency Management using Maven
 Library versions are stored on a central server
 Each project “declares” what libraries and versions it needs
 All the required dependencies are automatically downloaded


                Projects declare the versions   Libraries are stored
                   of libraries they need       on a central server




                                                                  Libraries are
                                                                downloaded as
                                                                    required
So how can Maven help me?
Dependency Management using Maven
 Library versions are stored on a central server
 Each project “declares” what libraries and versions it needs
 All the required dependencies are automatically downloaded
 The server is called a ‘Maven Enterprise Repository Manager’

                Projects declare the versions   Libraries are stored
                   of libraries they need       on a central server




                                                                  Libraries are
                                                                downloaded as
                                                                    required
So how can Maven help me?
Dependency Management using Maven
 Library versions are stored on a central server
 Each project “declares” what libraries and versions it needs
 All the required dependencies are automatically downloaded
 The server is called a ‘Maven Enterprise Repository Manager’

                Projects declare the versions   Libraries are stored
                   of libraries they need       on a central server




                                                                  Libraries are
                                                                downloaded as
                                                                    required
               This way I know exactly what
               libraries my application uses
So how can Maven help me?
Release Management
So how can Maven help me?
Release Management
A standard way to track and release versions
So how can Maven help me?
Release Management
A standard way to track and release versions
Official versions stored on a central server
So how can Maven help me?
Release Management
A standard way to track and release versions
Official versions stored on a central server
Can be used to automate the deployment process
So how can Maven help me?
Release Management
A standard way to track and release versions
Official versions stored on a central server
Can be used to automate the deployment process




              The official versions are on that server
Towards better testing practices
Why is good testing so important?
Towards better testing practices
Why is good testing so important?
Development costs
Towards better testing practices
Why is good testing so important?
Development costs
Maintenance costs
Towards better testing practices
Why is good testing so important?
Development costs
Maintenance costs
Visibility
Towards better testing practices
Why is good testing so important?
Development costs
Maintenance costs
Visibility
Flexibility
Towards better testing practices
Why is good testing so important?
Development costs
Maintenance costs
Visibility
Flexibility
Documentation
Towards better testing practices
Coding the traditional way
Towards better testing practices
Coding the traditional way

           Requirements
Towards better testing practices
Coding the traditional way

           Requirements


                    Design
Towards better testing practices
Coding the traditional way

           Requirements


                    Design


                          Implementation
Towards better testing practices
Coding the traditional way

           Requirements


                    Design


                          Implementation


                                     Test
Towards better testing practices
Coding the traditional way

                  Requirements


                           Design


                                 Implementation
   You write your code

                                            Test
Towards better testing practices
Coding the traditional way

                   Requirements


                                  Design


                                       Implementation
   You write your code

                                                    Test
          A tester tests the finished application
Towards better testing practices
Coding the traditional way

                   Requirements


                                  Design


                                       Implementation
   You write your code                                     Maybe do some unit testing


                                                    Test
          A tester tests the finished application
Towards better testing practices
Coding the traditional way



  Coding

Some unit testing?

  Manual debugging?

      Manual functional
         testing?
Towards better testing practices
Coding the traditional way


                          Fragile untested code

  Coding

Some unit testing?

  Manual debugging?

      Manual functional
         testing?
Towards better testing practices
Coding the traditional way

                                                  Lots of bugs
                          Fragile untested code

  Coding

Some unit testing?

  Manual debugging?

      Manual functional
         testing?
Towards better testing practices
Coding the traditional way

                                                  Lots of bugs
                          Fragile untested code

  Coding                  Low code coverage

Some unit testing?

  Manual debugging?

      Manual functional
         testing?
Towards better testing practices
Coding the traditional way

                                                      Lots of bugs
                          Fragile untested code
                                                  Changes introduce new
  Coding                  Low code coverage               bugs

Some unit testing?

  Manual debugging?

      Manual functional
         testing?
Towards better testing practices
Coding the traditional way

                                                      Lots of bugs
                          Fragile untested code
                                                  Changes introduce new
  Coding                  Low code coverage               bugs

Some unit testing?         No regression tests

  Manual debugging?

      Manual functional
         testing?
Towards better testing practices
Coding the traditional way

                                                      Lots of bugs
                          Fragile untested code
                                                  Changes introduce new
  Coding                  Low code coverage               bugs

Some unit testing?         No regression tests     Changes are costly

  Manual debugging?

      Manual functional
         testing?
Towards better testing practices
Coding the traditional way

                                                      Lots of bugs
                          Fragile untested code
                                                  Changes introduce new
  Coding                  Low code coverage               bugs

Some unit testing?         No regression tests     Changes are costly

  Manual debugging?        Bug detected late

      Manual functional
         testing?
Towards better testing practices
Coding the traditional way

                                                       Lots of bugs
                          Fragile untested code
                                                  Changes introduce new
  Coding                  Low code coverage               bugs

Some unit testing?         No regression tests     Changes are costly

                                                     Bugs hard to fix
  Manual debugging?        Bug detected late
                                                   Bugs expensive to fix
      Manual functional
         testing?
Towards better testing practices
Coding the traditional way

                                                       Lots of bugs
                          Fragile untested code
                                                  Changes introduce new
  Coding                  Low code coverage               bugs

Some unit testing?         No regression tests     Changes are costly

                                                     Bugs hard to fix
  Manual debugging?        Bug detected late
                                                   Bugs expensive to fix
      Manual functional    Hard to trace code
         testing?         back to requirements
Towards better testing practices
Coding the traditional way

                                                       Lots of bugs
                          Fragile untested code
                                                  Changes introduce new
  Coding                  Low code coverage               bugs

Some unit testing?         No regression tests     Changes are costly

                                                     Bugs hard to fix
  Manual debugging?        Bug detected late
                                                   Bugs expensive to fix
      Manual functional    Hard to trace code
         testing?         back to requirements      Code fails to meet
                                                      requirements
Towards better testing practices
Coding the traditional way

                                                       Lots of bugs
                          Fragile untested code
                                                  Changes introduce new
  Coding                  Low code coverage               bugs

Some unit testing?         No regression tests     Changes are costly

                                                     Bugs hard to fix
  Manual debugging?        Bug detected late
                                                   Bugs expensive to fix
      Manual functional    Hard to trace code
         testing?         back to requirements      Code fails to meet
                                                      requirements
Towards better testing practices
So what’s wrong with the old way?
Towards better testing practices
So what’s wrong with the old way?
Lots of defects. Really, lots.
Towards better testing practices
So what’s wrong with the old way?
Lots of defects. Really, lots.
High maintenance costs
Towards better testing practices
So what’s wrong with the old way?
Lots of defects. Really, lots.
High maintenance costs
Hard to introduce new features
Towards better testing practices
So what’s wrong with the old way?
Lots of defects. Really, lots.
High maintenance costs
Hard to introduce new features
Doesn’t meet the actual requirements
Towards better testing practices
So what’s wrong with the old way?
Lots of defects. Really, lots.
High maintenance costs
Hard to introduce new features
Doesn’t meet the actual requirements
Delayed deliveries
Towards better testing practices
So what’s wrong with the old way?
Lots of defects. Really, lots.
High maintenance costs
Hard to introduce new features
Doesn’t meet the actual requirements
Delayed deliveries
Unhappy end-users
Towards better testing practices
                    How much does a bug cost to fix, anyway?
00
                                                                       $$$
75



50



25


                                                                                          When was the
0                                                                                         change requested?
     Requirements




                                 Unit Testing




                                                System Testing




                                                                 UAT




                                                                             Production
                        Design
Towards better testing practices
                    How much does a bug cost to fix, anyway?
00
                                                                       $$$
75



50                                                                       Changes harder and more costly



25


                                                                                          When was the
0                                                                                         change requested?
     Requirements




                                 Unit Testing




                                                System Testing




                                                                 UAT




                                                                             Production
                        Design
Towards better testing practices
                    How much does a bug cost to fix, anyway?
00
                                                                                  $$$
75



50                                                                                  Changes harder and more costly
                                 Changes easier and
                                  cheaper to make
25


                                                                                                     When was the
0                                                                                                    change requested?
     Requirements




                                            Unit Testing




                                                           System Testing




                                                                            UAT




                                                                                        Production
                        Design
Towards better testing practices
How can good testing practices help?
Towards better testing practices
How can good testing practices help?
 Reduce bugs
Towards better testing practices
How can good testing practices help?
 Reduce bugs
 Write better-designed code
Towards better testing practices
How can good testing practices help?
 Reduce bugs
 Write better-designed code
 Have more confidence in our code
Towards better testing practices
How can good testing practices help?
 Reduce bugs
 Write better-designed code
 Have more confidence in our code
 Make changes more easily
Towards better testing practices
How can good testing practices help?
 Reduce bugs
 Write better-designed code
 Have more confidence in our code
 Make changes more easily
 Meet user requirements more accurately
Towards better testing practices
How can good testing practices help?
 Reduce bugs
 Write better-designed code
 Have more confidence in our code
 Make changes more easily
 Meet user requirements more accurately
 Lower maintenance costs
Towards better testing practices
How can good testing practices help?
Towards better testing practices
How can good testing practices help?

      Well-designed code
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
         Full automated
        regression tests
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
         Full automated
        regression tests       Lower maintenance costs

                               Make changes with confidence
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
         Full automated
        regression tests       Lower maintenance costs

                               Make changes with confidence
          Code to the
         requirements
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
         Full automated
        regression tests       Lower maintenance costs

                               Make changes with confidence
          Code to the
         requirements
                                Don’t code unnecessary features
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
         Full automated
        regression tests       Lower maintenance costs

                               Make changes with confidence
          Code to the
         requirements
                                Don’t code unnecessary features

     Focus and productivity
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
         Full automated
        regression tests       Lower maintenance costs

                               Make changes with confidence
          Code to the
         requirements
                                Don’t code unnecessary features

     Focus and productivity        Develop more productively
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
         Full automated
        regression tests       Lower maintenance costs

                               Make changes with confidence
          Code to the
         requirements
                                Don’t code unnecessary features

     Focus and productivity        Develop more productively

          Technical
        documentation
Towards better testing practices
How can good testing practices help?
                              Easier to make changes
      Well-designed code
                              Better response to user feedback
        Find bugs faster
                                Cheaper bug fixes
         Full automated
        regression tests       Lower maintenance costs

                               Make changes with confidence
          Code to the
         requirements
                                Don’t code unnecessary features

     Focus and productivity        Develop more productively

          Technical               “Executable requirements”
        documentation
                                  Lower maintenance costs
Towards better testing practices
More flexibility
Towards better testing practices
More flexibility
 Testable code is easier to change
Towards better testing practices
More flexibility
 Testable code is easier to change
 Full regression tests avoid introducing errors
Towards better testing practices
More flexibility
 Testable code is easier to change
 Full regression tests avoid introducing errors




     I’m not afraid to change the code
        - the tests are my safety net
Towards better testing practices
Better visibility
Towards better testing practices
Better visibility
 Tests are “executable requirements”
Towards better testing practices
Better visibility
 Tests are “executable requirements”
 Automated acceptance tests measure progress
Towards better testing practices
Better visibility
 Tests are “executable requirements”
 Automated acceptance tests measure progress




      A feature can’t be “90% finished”
         - it either works or it doesn’t
Towards better testing practices
Documentation
Towards better testing practices
Documentation
 Tests are “living documentation” of your code
Towards better testing practices
Documentation
 Tests are “living documentation” of your code
 Always accurate and up-to-date
Towards better testing practices
Documentation
 Tests are “living documentation” of your code
 Always accurate and up-to-date




     I can understand how the code
        works by reading the tests
Towards better testing practices
Lower maintenance costs
Towards better testing practices
Lower maintenance costs
 Less bugs, found faster
Towards better testing practices
Lower maintenance costs
 Less bugs, found faster
 Changes are easier to make
Towards better testing practices
Lower maintenance costs
 Less bugs, found faster
 Changes are easier to make




         Maintaining this sort of
      application is a real pleasure!
Automating the build process
Continuous Integration - what’s the issue?
Traditional development cycles are bad for your health:
Automating the build process
Continuous Integration - what’s the issue?
Traditional development cycles are bad for your health:
 Integration is long and difficult
Automating the build process
Continuous Integration - what’s the issue?
Traditional development cycles are bad for your health:
 Integration is long and difficult
 Poor visibility on development progress
Automating the build process
Continuous Integration - what’s the issue?
Traditional development cycles are bad for your health:
 Integration is long and difficult
 Poor visibility on development progress
 Functional tests are done too late
Automating the build process
Continuous Integration - what’s the issue?
Traditional development cycles are bad for your health:
 Integration is long and difficult
 Poor visibility on development progress
 Functional tests are done too late
 Raised issues are harder to fix
Automating the build process
Continuous Integration - what’s the issue?
Traditional development cycles are bad for your health:
 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
Automating the build process
Continuous Integration - what’s involved?
Automating the build process
Continuous Integration - why bother?
Automating the build process
Continuous Integration - why bother?
Smoother integration process
Automating the build process
Continuous Integration - why bother?
Smoother integration process
Automatic regression testing
Automating the build process
Continuous Integration - why bother?
Smoother integration process
Automatic regression testing
Regular working releases
Automating the build process
Continuous Integration - why bother?
Smoother integration process
Automatic regression testing
Regular working releases
Earlier functional testing
Automating the build process
Continuous Integration - why bother?
Smoother integration process
Automatic regression testing
Regular working releases
Earlier functional testing
Faster and easier bug fixes
Automating the build process
Continuous Integration - why bother?
Smoother integration process
Automatic regression testing
Regular working releases
Earlier functional testing
Faster and easier bug fixes
Better visibility
Automating the build process
Continuous Integration - why bother?
Smoother integration process
Automatic regression testing
Regular working releases
Earlier functional testing
Faster and easier bug fixes
Better visibility

                     No more “it works on my machine”
Automating the build process
Continuous Integration - what you need
Automating the build process
Continuous Integration - what you need
            Automated build process (e.g. Maven)
Automating the build process
Continuous Integration - what you need
            Automated build process (e.g. Maven)




                Automated tests (JUnit, Selenium, easyb...)
Automating the build process
Continuous Integration - what you need
            Automated build process (e.g. Maven)




                Automated tests (JUnit, Selenium, easyb...)




                          Source code repository
Automating the build process
Continuous Integration - what you need
            Automated build process (e.g. Maven)




                Automated tests (JUnit, Selenium, easyb...)




                          Source code repository



                                     Continuous Build Server
Automating the build process
Continuous Integration - what can it do?
Automating the build process
Continuous Integration - what can it do?
Raise integration issues - fast!
Automating the build process
Continuous Integration - what can it do?
Raise integration issues - fast!
Monitor your build process
Automating the build process
Continuous Integration - what can it do?
Raise integration issues - fast!
Monitor your build process
Monitor and report on code quality and code coverage
Automating the build process
Continuous Integration - what can it do?
Raise integration issues - fast!
Monitor your build process
Monitor and report on code quality and code coverage
Build promotion and release management
Automating the build process
Continuous Integration - what can it do?
Raise integration issues - fast!
Monitor your build process
Monitor and report on code quality and code coverage
Build promotion and release management
Automated deployments
Automating the build process
Looking for a good O/S Continuous Integration tool?
Automating the build process
Looking for a good O/S Continuous Integration tool?
Try Hudson!
Automating the build process
Looking for a good O/S Continuous Integration tool?
Try Hudson!
 Easy to set up and configure
Automating the build process
Looking for a good O/S Continuous Integration tool?
Try Hudson!
 Easy to set up and configure
 Good build and code quality metrics
Automating the build process
Looking for a good O/S Continuous Integration tool?
Try Hudson!
 Easy to set up and configure
 Good build and code quality metrics
 Lots of plugins
Automated Code Quality
Why use code quality metrics
Automated Code Quality
Why use code quality metrics
Better quality code
Automated Code Quality
Why use code quality metrics
Better quality code
Enforce corporate coding standards
Automated Code Quality
Why use code quality metrics
Better quality code
Enforce corporate coding standards
Detect potential bugs
Automated Code Quality
Why use code quality metrics
Better quality code
Enforce corporate coding standards
Detect potential bugs
Code is easier to maintain
Automated Code Quality
Why use code quality metrics
Better quality code
Enforce corporate coding standards
Detect potential bugs
Code is easier to maintain
Train new staff
Automated Code Quality
Why use code quality metrics
Better quality code
Enforce corporate coding standards
Detect potential bugs
Code is easier to maintain
Train new staff
Keep technical debt down
Automated Code Quality
What is technical debt?
Automated Code Quality
What is technical debt?
 The cost of poor quality code:
Automated Code Quality
What is technical debt?
 The cost of poor quality code:
   Harder to make changes
Automated Code Quality
What is technical debt?
 The cost of poor quality code:
   Harder to make changes
   Too much time spent fixing bugs
Automated Code Quality
What is technical debt?
 The cost of poor quality code:
   Harder to make changes
   Too much time spent fixing bugs
   Takes too long to add competitive new features
Automated Code Quality
What is technical debt?
 The cost of poor quality code:
   Harder to make changes
   Too much time spent fixing bugs
   Takes too long to add competitive new features


                           This legacy code takes way
                                to long to change
Automated Code Quality
What is technical debt?
 The cost of poor quality code:
   Harder to make changes
   Too much time spent fixing bugs
   Takes too long to add competitive new features


                            This legacy code takes way
                                 to long to change




               We spend all our time fixing bugs, not
                      adding new features
Automated Code Quality
How do we pay off technical debt?
Automated Code Quality
How do we pay off technical debt?
 Enforce coding standards
Automated Code Quality
How do we pay off technical debt?
 Enforce coding standards
 Teach developers good coding practices
Automated Code Quality
How do we pay off technical debt?
 Enforce coding standards
 Teach developers good coding practices
 Spend time keeping the code clean (refactoring)
Automated Code Quality
How do we pay off technical debt?
 Enforce coding standards
 Teach developers good coding practices
 Spend time keeping the code clean (refactoring)




                 ...it will be quicker and easier for
                everyone to make changes later on
Automated Code Quality
How do we pay off technical debt?
 Enforce coding standards
 Teach developers good coding practices
 Spend time keeping the code clean (refactoring)




                              If I spend a little time tidying up
                                      my code today...




                 ...it will be quicker and easier for
                everyone to make changes later on
Automated Code Quality
Team code reviews
Automated Code Quality
Team code reviews
 Review code as a group
Automated Code Quality
Team code reviews
 Review code as a group
 Long and slow if done manually
Automated Code Quality
Team code reviews
 Review code as a group
 Long and slow if done manually
 Benefits greatly from the use of tools
Automated Code Quality
Enforcing coding standards with Hudson
Automated Code Quality
Enforcing coding standards with Hudson


                             Number of violations over time
Automated Code Quality
Enforcing coding standards with Hudson
Automated Code Quality
Enforcing coding standards with Hudson




                      Drilling down
Automated Code Quality
Enforcing coding standards with Hudson
Automated Code Quality
Enforcing coding standards with Hudson




                      Details for a particular issue
Automated Code Quality
Code Coverage
Automated Code Quality
Code Coverage
See what code is being executed by your unit tests.
Automated Code Quality
Code Coverage
See what code is being executed by your unit tests.
Isolate untested code
Automated Code Quality
Code Coverage
See what code is being executed by your unit tests.
Isolate untested code
Can help to estimate if testing practices are being applied
Automated Code Quality
Monitoring Code Coverage with Hudson
Automated Code Quality
Monitoring Code Coverage with Hudson
Automated Code Quality
Monitoring Code Coverage with Hudson

                            Executed code
Automated Code Quality
Monitoring Code Coverage with Hudson

                                Executed code




                       Unexecuted code
Automated Code Quality
Code Quality Governance with Sonar
Automated Code Quality
Code Quality Governance with Sonar
Centralized code quality management
Automated Code Quality
Code Quality Governance with Sonar
Centralized code quality management
Works on any Maven project
Automated Code Quality
Code Quality Governance with Sonar
Centralized code quality management
Works on any Maven project
Store code quality metrics in a database
Automated Code Quality
Code Quality Governance with Sonar
Centralized code quality management
Works on any Maven project
Store code quality metrics in a database
Code quality metrics can be consulted on a web site
Automated Code Quality
Code Quality Governance with Sonar
Sonar centralizes many code quality metrics
Automated Code Quality
     Code Quality Governance with Sonar
      Sonar centralizes many code quality metrics
Source code metrics
Automated Code Quality
     Code Quality Governance with Sonar
      Sonar centralizes many code quality metrics
Source code metrics                                 Code complexity metrics
Automated Code Quality
     Code Quality Governance with Sonar
      Sonar centralizes many code quality metrics
Source code metrics                                 Code complexity metrics




                                                Test results and code coverage
Automated Code Quality
     Code Quality Governance with Sonar
      Sonar centralizes many code quality metrics
Source code metrics                                 Code complexity metrics




                                                Test results and code coverage




                                                           Build history
Automated Code Quality
     Code Quality Governance with Sonar
      Sonar centralizes many code quality metrics
Source code metrics                                 Code complexity metrics




                                                Test results and code coverage




                                                           Build history


         Modules
Automated Code Quality
     Code Quality Governance with Sonar
       Sonar centralizes many code quality metrics
Source code metrics                                  Code complexity metrics




                                                 Test results and code coverage


Code quality metrics


                                                            Build history


          Modules
Automated Code Quality
     Code Quality Governance with Sonar
       Sonar centralizes many code quality metrics
Source code metrics                                  Code complexity metrics




                                                   Test results and code coverage


Code quality metrics


                                                            Build history


          Modules


                                             Click anywhere to drill down
Automated Code Quality
Code Quality Governance with Sonar
You can drill down to view the details for each type of issue
Automated Code Quality
Code Quality Governance with Sonar
You can drill down to view the details for each type of issue
                          Overview
Automated Code Quality
Code Quality Governance with Sonar
You can drill down to view the details for each type of issue
                          Overview

                                     Different types of violations
Automated Code Quality
    Code Quality Governance with Sonar
      You can drill down to view the details for each type of issue
                                Overview

                                           Different types of violations




Violations in this class
Automated Code Quality
    Code Quality Governance with Sonar
      You can drill down to view the details for each type of issue
                                           Overview

                                                      Different types of violations




Violations in this class




                       Violation details
Summary
How can you improve the development process?
Summary
How can you improve the development process?
Standardize your build process
Summary
How can you improve the development process?
Standardize your build process
Improve testing practices
Summary
How can you improve the development process?
Standardize your build process
Improve testing practices
Use Continuous Integration
Summary
How can you improve the development process?
Standardize your build process
Improve testing practices
Use Continuous Integration
Reduce your technical debt
Summary
How can you improve the development process?
Standardize your build process
Improve testing practices
Use Continuous Integration
Reduce your technical debt
Automate, automate, automate!
John Ferguson Smart
                  Email: john.smart@wakaleo.com
                   Web: http://www.wakaleo.com
                                  Twitter: wakaleo




Thanks for your attention!
John Ferguson Smart
                  Email: john.smart@wakaleo.com
                   Web: http://www.wakaleo.com
                                  Twitter: wakaleo




Thanks for your attention!
John Ferguson Smart
                               Email: john.smart@wakaleo.com
                                Web: http://www.wakaleo.com
                                               Twitter: wakaleo




Thanks for your attention!


      http://www.wakaleo.com
John Ferguson Smart
                               Email: john.smart@wakaleo.com
                                Web: http://www.wakaleo.com
                                               Twitter: wakaleo




Thanks for your attention!


                                     http://weblogs.java.net/blog/
      http://www.wakaleo.com

Contenu connexe

Similaire à How can you improve, harmonize and automate your development process using tools like Maven, Hudson, and Nexus? This presentation is a high-level overview of Java software development process improvement.

An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to MavenVadym Lotar
 
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...Simplilearn
 
Docker Enables DevOps - Keep C.A.L.M.S. and Docker on ...
Docker Enables DevOps - Keep C.A.L.M.S. and Docker on ...Docker Enables DevOps - Keep C.A.L.M.S. and Docker on ...
Docker Enables DevOps - Keep C.A.L.M.S. and Docker on ...Boyd Hemphill
 
Maven introduction
Maven introductionMaven introduction
Maven introductionLai Hieu
 
Build your QA Pipeline using Serenity , Selenium WebDriver , Rest Assured and...
Build your QA Pipeline using Serenity , Selenium WebDriver , Rest Assured and...Build your QA Pipeline using Serenity , Selenium WebDriver , Rest Assured and...
Build your QA Pipeline using Serenity , Selenium WebDriver , Rest Assured and...Moataz Nabil
 
maven build certificaton
maven build certificatonmaven build certificaton
maven build certificatonVskills
 
SE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-ToolsSE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-ToolsAmr E. Mohamed
 
Keep calms and Docker On ... Innotech
Keep calms and Docker On ... InnotechKeep calms and Docker On ... Innotech
Keep calms and Docker On ... InnotechBoyd Hemphill
 
Presentation 1 open source tools in continuous integration environment v1.0
Presentation 1   open source tools in continuous integration environment v1.0Presentation 1   open source tools in continuous integration environment v1.0
Presentation 1 open source tools in continuous integration environment v1.0Jasmine Conseil
 
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Edureka!
 
JAVA Certification Course
JAVA Certification CourseJAVA Certification Course
JAVA Certification CourseSMEClabs
 
Puppet Camp Paris 2014: Achieving Continuous Delivery and DevOps with Puppet
Puppet Camp Paris 2014: Achieving Continuous Delivery and DevOps with Puppet Puppet Camp Paris 2014: Achieving Continuous Delivery and DevOps with Puppet
Puppet Camp Paris 2014: Achieving Continuous Delivery and DevOps with Puppet Puppet
 
Achieving Continuous Delivery with Puppet
Achieving Continuous Delivery with PuppetAchieving Continuous Delivery with Puppet
Achieving Continuous Delivery with PuppetDevoteam Revolve
 
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...Simplilearn
 
How to Learn Azure DevOps
How to Learn Azure DevOpsHow to Learn Azure DevOps
How to Learn Azure DevOpsRavendra Singh
 

Similaire à How can you improve, harmonize and automate your development process using tools like Maven, Hudson, and Nexus? This presentation is a high-level overview of Java software development process improvement. (20)

Improving your SDLC
Improving your SDLCImproving your SDLC
Improving your SDLC
 
Maven ppt
Maven pptMaven ppt
Maven ppt
 
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to Maven
 
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
How To Become A DevOps Engineer | Who Is A DevOps Engineer? | DevOps Engineer...
 
Docker Enables DevOps - Keep C.A.L.M.S. and Docker on ...
Docker Enables DevOps - Keep C.A.L.M.S. and Docker on ...Docker Enables DevOps - Keep C.A.L.M.S. and Docker on ...
Docker Enables DevOps - Keep C.A.L.M.S. and Docker on ...
 
Maven introduction
Maven introductionMaven introduction
Maven introduction
 
Build your QA Pipeline using Serenity , Selenium WebDriver , Rest Assured and...
Build your QA Pipeline using Serenity , Selenium WebDriver , Rest Assured and...Build your QA Pipeline using Serenity , Selenium WebDriver , Rest Assured and...
Build your QA Pipeline using Serenity , Selenium WebDriver , Rest Assured and...
 
maven build certificaton
maven build certificatonmaven build certificaton
maven build certificaton
 
SE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-ToolsSE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-Tools
 
Team Maven
Team MavenTeam Maven
Team Maven
 
Keep calms and Docker On ... Innotech
Keep calms and Docker On ... InnotechKeep calms and Docker On ... Innotech
Keep calms and Docker On ... Innotech
 
What is maven
What is mavenWhat is maven
What is maven
 
Presentation 1 open source tools in continuous integration environment v1.0
Presentation 1   open source tools in continuous integration environment v1.0Presentation 1   open source tools in continuous integration environment v1.0
Presentation 1 open source tools in continuous integration environment v1.0
 
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
 
JAVA Certification Course
JAVA Certification CourseJAVA Certification Course
JAVA Certification Course
 
DevOps beyond the Tools
DevOps beyond the ToolsDevOps beyond the Tools
DevOps beyond the Tools
 
Puppet Camp Paris 2014: Achieving Continuous Delivery and DevOps with Puppet
Puppet Camp Paris 2014: Achieving Continuous Delivery and DevOps with Puppet Puppet Camp Paris 2014: Achieving Continuous Delivery and DevOps with Puppet
Puppet Camp Paris 2014: Achieving Continuous Delivery and DevOps with Puppet
 
Achieving Continuous Delivery with Puppet
Achieving Continuous Delivery with PuppetAchieving Continuous Delivery with Puppet
Achieving Continuous Delivery with Puppet
 
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
 
How to Learn Azure DevOps
How to Learn Azure DevOpsHow to Learn Azure DevOps
How to Learn Azure DevOps
 

Plus de John Ferguson Smart Limited

My Reading Specs - Refactoring Patterns for Gherkin Scenarios
My Reading Specs - Refactoring Patterns for Gherkin ScenariosMy Reading Specs - Refactoring Patterns for Gherkin Scenarios
My Reading Specs - Refactoring Patterns for Gherkin ScenariosJohn Ferguson Smart Limited
 
Artisti e Condotierri - How can your team become artists of the 21st century ...
Artisti e Condotierri - How can your team become artists of the 21st century ...Artisti e Condotierri - How can your team become artists of the 21st century ...
Artisti e Condotierri - How can your team become artists of the 21st century ...John Ferguson Smart Limited
 
Engage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceEngage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceJohn Ferguson Smart Limited
 
Sustainable Test Automation with Serenity BDD and Screenplay
Sustainable Test Automation with Serenity BDD and ScreenplaySustainable Test Automation with Serenity BDD and Screenplay
Sustainable Test Automation with Serenity BDD and ScreenplayJohn Ferguson Smart Limited
 
Engage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceEngage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceJohn Ferguson Smart Limited
 
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...John Ferguson Smart Limited
 
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...John Ferguson Smart Limited
 
Screenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testingScreenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testingJohn Ferguson Smart Limited
 
All the world's a stage – the next step in automated testing practices
All the world's a stage – the next step in automated testing practicesAll the world's a stage – the next step in automated testing practices
All the world's a stage – the next step in automated testing practicesJohn Ferguson Smart Limited
 
It's Testing, Jim, but not as we know it - BDD for Testers
It's Testing, Jim, but not as we know it - BDD for TestersIt's Testing, Jim, but not as we know it - BDD for Testers
It's Testing, Jim, but not as we know it - BDD for TestersJohn Ferguson Smart Limited
 

Plus de John Ferguson Smart Limited (20)

My Reading Specs - Refactoring Patterns for Gherkin Scenarios
My Reading Specs - Refactoring Patterns for Gherkin ScenariosMy Reading Specs - Refactoring Patterns for Gherkin Scenarios
My Reading Specs - Refactoring Patterns for Gherkin Scenarios
 
Artisti e Condotierri - How can your team become artists of the 21st century ...
Artisti e Condotierri - How can your team become artists of the 21st century ...Artisti e Condotierri - How can your team become artists of the 21st century ...
Artisti e Condotierri - How can your team become artists of the 21st century ...
 
Engage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceEngage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a difference
 
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANTBE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
 
Sustainable Test Automation with Serenity BDD and Screenplay
Sustainable Test Automation with Serenity BDD and ScreenplaySustainable Test Automation with Serenity BDD and Screenplay
Sustainable Test Automation with Serenity BDD and Screenplay
 
Feature Mapping Workshop
Feature Mapping WorkshopFeature Mapping Workshop
Feature Mapping Workshop
 
Engage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceEngage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a difference
 
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
 
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
 
Shift left-devoxx-pl
Shift left-devoxx-plShift left-devoxx-pl
Shift left-devoxx-pl
 
Screenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testingScreenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testing
 
Cucumber and Spock Primer
Cucumber and Spock PrimerCucumber and Spock Primer
Cucumber and Spock Primer
 
All the world's a stage – the next step in automated testing practices
All the world's a stage – the next step in automated testing practicesAll the world's a stage – the next step in automated testing practices
All the world's a stage – the next step in automated testing practices
 
CukeUp 2016 Agile Product Planning Workshop
CukeUp 2016 Agile Product Planning WorkshopCukeUp 2016 Agile Product Planning Workshop
CukeUp 2016 Agile Product Planning Workshop
 
BDD Anti-patterns
BDD Anti-patternsBDD Anti-patterns
BDD Anti-patterns
 
Serenity and the Journey Pattern
Serenity and the Journey PatternSerenity and the Journey Pattern
Serenity and the Journey Pattern
 
BDD - Collaborate like you mean it!
BDD - Collaborate like you mean it!BDD - Collaborate like you mean it!
BDD - Collaborate like you mean it!
 
BDD-Driven Microservices
BDD-Driven MicroservicesBDD-Driven Microservices
BDD-Driven Microservices
 
BDD Anti-patterns
BDD Anti-patternsBDD Anti-patterns
BDD Anti-patterns
 
It's Testing, Jim, but not as we know it - BDD for Testers
It's Testing, Jim, but not as we know it - BDD for TestersIt's Testing, Jim, but not as we know it - BDD for Testers
It's Testing, Jim, but not as we know it - BDD for Testers
 

Dernier

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Dernier (20)

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

How can you improve, harmonize and automate your development process using tools like Maven, Hudson, and Nexus? This presentation is a high-level overview of Java software development process improvement.

  • 1. Upping the game Improving your software development process John Ferguson Smart Principle Consultant Wakaleo Consulting Email: john.smart@wakaleo.com Web: http://www.wakaleo.com Twitter: wakaleo
  • 2. Presentation Goals Learn how to improve, harmonize and automate your development process using tools like Maven, Hudson, and many others.
  • 3. Speaker’s qualifications John Ferguson Smart Consultant, Trainer, Mentor, Author,... Works with Enterprise Java, Web Development, and Open Source technologies Author of ‘Java Power Tools’ (O’Reilly) Writes articles for sites like JavaWorld, DevX and Java.net, and blogs on Java.net Speaks at conferences, Java User Groups etc. Likes to write about himself in the third person
  • 4. Agenda What we will cover today:
  • 5. Agenda What we will cover today: Industrializing your build process
  • 6. Agenda What we will cover today: Industrializing your build process Automate your builds
  • 7. Agenda What we will cover today: Industrializing your build process Automate your builds Better testing practices
  • 8. Agenda What we will cover today: Industrializing your build process Automate your builds Better testing practices Reducing technical debt
  • 9. Why improve? HERE is Edward Bear, coming downstairs now, bump, bump, bump, on the back of his head, behind Christopher Robin. It is, as far as he knows, the only way of coming downstairs, but sometimes he feels that there really is another way, if only he could stop bumping for a moment and think of it. -- A. A. Milne
  • 10. Why should we improve? Why should we improve our development process?
  • 11. Why should we improve? Why should we improve our development process? Lower development costs
  • 12. Why should we improve? Why should we improve our development process? Lower development costs Lower maintenance costs
  • 13. Why should we improve? Why should we improve our development process? Lower development costs Lower maintenance costs Less bugs
  • 14. Why should we improve? Why should we improve our development process? Lower development costs Lower maintenance costs Less bugs Higher code quality
  • 15. Why should we improve? Why should we improve our development process? Lower development costs Lower maintenance costs Less bugs Higher code quality Be flexible - adapt to change more easily
  • 16. Why should we improve? Why should we improve our development process? Lower development costs Lower maintenance costs Less bugs Higher code quality Be flexible - adapt to change more easily Happier more productive users
  • 17. How can we improve? How can we improve our development process?
  • 18. How can we improve? How can we improve our development process? Standardized build practices
  • 19. How can we improve? How can we improve our development process? Standardized build practices Better testing practices
  • 20. How can we improve? How can we improve our development process? Standardized build practices Better testing practices Better visibility
  • 21. How can we improve? How can we improve our development process? Standardized build practices Better testing practices Better visibility Faster feedback
  • 22. How can we improve? How can we improve our development process? Standardized build practices Better testing practices Better visibility Faster feedback Quality metrics
  • 23. How can we improve? How can we improve our development process? Standardized build practices Better testing practices Better visibility Faster feedback Quality metrics Automate!
  • 24. Tools for the job There are plenty of tools available - and most are free!
  • 25. Tools for the job There are plenty of tools available - and most are free! maven Build scripting
  • 26. Tools for the job There are plenty of tools available - and most are free! maven Build scripting JUnit Automated testing
  • 27. Tools for the job There are plenty of tools available - and most are free! maven Build scripting Automated code quality JUnit Automated testing
  • 28. Towards a better build process Standardize your build process with Maven
  • 29. Towards a better build process Standardize your build process with Maven What is Maven, anyway?
  • 30. Towards a better build process Standardize your build process with Maven What is Maven, anyway? A high-level open source build scripting framework
  • 31. Towards a better build process Standardize your build process with Maven What is Maven, anyway? A high-level open source build scripting framework Extensively used in the Java world
  • 32. Towards a better build process How does Maven help?
  • 33. Towards a better build process How does Maven help? Standards
  • 34. Towards a better build process How does Maven help? Standards Conventions
  • 35. Towards a better build process How does Maven help? Standards Conventions Lower Maintenance Costs
  • 36. Towards a better build process How does Maven help? Standards Conventions Lower Maintenance Costs Knowledge sharing
  • 37. Towards a better build process How does Maven help? Standards Conventions Lower Maintenance Costs Knowledge sharing Dependency Management
  • 38. Towards a better build process How does Maven help? Standards Conventions Lower Maintenance Costs Knowledge sharing Dependency Management Promoting good architecture
  • 39. So how can Maven help me? Standards and Conventions
  • 40. So how can Maven help me? Standards and Conventions A standard directory structure
  • 41. So how can Maven help me? Standards and Conventions A standard directory structure A standard, but extensible build lifecycle
  • 42. So how can Maven help me? Standards and Conventions A standard directory structure A standard, but extensible build lifecycle So new developers understand the project structure and build process straight away!
  • 43. So how can Maven help me? Standards and Conventions A standard directory structure A standard, but extensible build lifecycle So new developers understand the project structure and build process straight away! ...and the build scripts are much easier to understand and maintain
  • 44. So how can Maven help me? Technical documentation
  • 45. So how can Maven help me? Technical documentation Generate technical project documentation
  • 46. So how can Maven help me? Technical documentation Generate technical project documentation Easy to integrate code quality metrics
  • 47. So how can Maven help me? Technical documentation Generate technical project documentation Easy to integrate code quality metrics I can even generate UML diagrams in my Javadocs
  • 48. So how can Maven help me? Technical documentation Generate technical project documentation Easy to integrate code quality metrics I can even generate UML diagrams in my Javadocs
  • 49. So how can Maven help me? Technical documentation Generate technical project documentation Easy to integrate code quality metrics I can even generate UML diagrams in my Javadocs And setting up code quality metrics is a breeze!
  • 50. So how can Maven help me? Project architecture
  • 51. So how can Maven help me? Project architecture Encourages developers to use modular design
  • 52. So how can Maven help me? Project architecture Encourages developers to use modular design More flexible architecture
  • 53. So how can Maven help me? Project architecture Encourages developers to use modular design More flexible architecture Reduced complexity and maintenance costs
  • 54. So how can Maven help me? Project architecture Encourages developers to use modular design More flexible architecture Reduced complexity and maintenance costs ...and the smaller modules are easier to test and maintain
  • 55. So how can Maven help me? Project architecture Encourages developers to use modular design More flexible architecture Reduced complexity and maintenance costs Breaking our application down into clean modules is much easier ...and the smaller modules are easier to test and maintain
  • 56. So how can Maven help me? Dependency Management
  • 57. So how can Maven help me? Dependency Management Understand precisely what libraries your application needs
  • 58. So how can Maven help me? Dependency Management Understand precisely what libraries your application needs Safer and more reproducible builds
  • 59. So how can Maven help me? Dependency Management Understand precisely what libraries your application needs Safer and more reproducible builds A standard way to share internal libraries
  • 60. So how can Maven help me? Dependency Management Understand precisely what libraries your application needs Safer and more reproducible builds A standard way to share internal libraries All our libraries are shared and safely stored on a central server
  • 61. So how can Maven help me? Dependency Management Understand precisely what libraries your application needs Safer and more reproducible builds A standard way to share internal libraries All our libraries are shared and safely stored on a central server ...we just have to name the ones we need in our build script
  • 62. So how can Maven help me? Dependency Management before Maven lib
  • 63. So how can Maven help me? Dependency Management before Maven Each project has its own set of JAR files lib
  • 64. So how can Maven help me? Dependency Management before Maven Each project has its own set of JAR files Unnecessary duplication lib
  • 65. So how can Maven help me? Dependency Management before Maven Each project has its own set of JAR files Unnecessary duplication Hard to keep track of versions lib
  • 66. So how can Maven help me? Dependency Management before Maven Each project has its own set of JAR files Unnecessary duplication Hard to keep track of versions lib Errors due to incompatible JAR files
  • 67. So how can Maven help me? Dependency Management before Maven Each project has its own set of JAR files Unnecessary duplication Hard to keep track of versions lib Errors due to incompatible JAR files Overloads the source code repository
  • 68. So how can Maven help me? Dependency Management before Maven Each project has its own set of JAR files Unnecessary duplication Hard to keep track of versions lib Errors due to incompatible JAR files Overloads the source code repository ...and you never know what versions you are using
  • 69. So how can Maven help me? Dependency Management using Maven Projects declare the versions Libraries are stored of libraries they need on a central server Libraries are downloaded as required
  • 70. So how can Maven help me? Dependency Management using Maven Library versions are stored on a central server Projects declare the versions Libraries are stored of libraries they need on a central server Libraries are downloaded as required
  • 71. So how can Maven help me? Dependency Management using Maven Library versions are stored on a central server Each project “declares” what libraries and versions it needs Projects declare the versions Libraries are stored of libraries they need on a central server Libraries are downloaded as required
  • 72. So how can Maven help me? Dependency Management using Maven Library versions are stored on a central server Each project “declares” what libraries and versions it needs All the required dependencies are automatically downloaded Projects declare the versions Libraries are stored of libraries they need on a central server Libraries are downloaded as required
  • 73. So how can Maven help me? Dependency Management using Maven Library versions are stored on a central server Each project “declares” what libraries and versions it needs All the required dependencies are automatically downloaded The server is called a ‘Maven Enterprise Repository Manager’ Projects declare the versions Libraries are stored of libraries they need on a central server Libraries are downloaded as required
  • 74. So how can Maven help me? Dependency Management using Maven Library versions are stored on a central server Each project “declares” what libraries and versions it needs All the required dependencies are automatically downloaded The server is called a ‘Maven Enterprise Repository Manager’ Projects declare the versions Libraries are stored of libraries they need on a central server Libraries are downloaded as required This way I know exactly what libraries my application uses
  • 75. So how can Maven help me? Release Management
  • 76. So how can Maven help me? Release Management A standard way to track and release versions
  • 77. So how can Maven help me? Release Management A standard way to track and release versions Official versions stored on a central server
  • 78. So how can Maven help me? Release Management A standard way to track and release versions Official versions stored on a central server Can be used to automate the deployment process
  • 79. So how can Maven help me? Release Management A standard way to track and release versions Official versions stored on a central server Can be used to automate the deployment process The official versions are on that server
  • 80. Towards better testing practices Why is good testing so important?
  • 81. Towards better testing practices Why is good testing so important? Development costs
  • 82. Towards better testing practices Why is good testing so important? Development costs Maintenance costs
  • 83. Towards better testing practices Why is good testing so important? Development costs Maintenance costs Visibility
  • 84. Towards better testing practices Why is good testing so important? Development costs Maintenance costs Visibility Flexibility
  • 85. Towards better testing practices Why is good testing so important? Development costs Maintenance costs Visibility Flexibility Documentation
  • 86. Towards better testing practices Coding the traditional way
  • 87. Towards better testing practices Coding the traditional way Requirements
  • 88. Towards better testing practices Coding the traditional way Requirements Design
  • 89. Towards better testing practices Coding the traditional way Requirements Design Implementation
  • 90. Towards better testing practices Coding the traditional way Requirements Design Implementation Test
  • 91. Towards better testing practices Coding the traditional way Requirements Design Implementation You write your code Test
  • 92. Towards better testing practices Coding the traditional way Requirements Design Implementation You write your code Test A tester tests the finished application
  • 93. Towards better testing practices Coding the traditional way Requirements Design Implementation You write your code Maybe do some unit testing Test A tester tests the finished application
  • 94. Towards better testing practices Coding the traditional way Coding Some unit testing? Manual debugging? Manual functional testing?
  • 95. Towards better testing practices Coding the traditional way Fragile untested code Coding Some unit testing? Manual debugging? Manual functional testing?
  • 96. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Coding Some unit testing? Manual debugging? Manual functional testing?
  • 97. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Coding Low code coverage Some unit testing? Manual debugging? Manual functional testing?
  • 98. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Changes introduce new Coding Low code coverage bugs Some unit testing? Manual debugging? Manual functional testing?
  • 99. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Changes introduce new Coding Low code coverage bugs Some unit testing? No regression tests Manual debugging? Manual functional testing?
  • 100. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Changes introduce new Coding Low code coverage bugs Some unit testing? No regression tests Changes are costly Manual debugging? Manual functional testing?
  • 101. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Changes introduce new Coding Low code coverage bugs Some unit testing? No regression tests Changes are costly Manual debugging? Bug detected late Manual functional testing?
  • 102. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Changes introduce new Coding Low code coverage bugs Some unit testing? No regression tests Changes are costly Bugs hard to fix Manual debugging? Bug detected late Bugs expensive to fix Manual functional testing?
  • 103. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Changes introduce new Coding Low code coverage bugs Some unit testing? No regression tests Changes are costly Bugs hard to fix Manual debugging? Bug detected late Bugs expensive to fix Manual functional Hard to trace code testing? back to requirements
  • 104. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Changes introduce new Coding Low code coverage bugs Some unit testing? No regression tests Changes are costly Bugs hard to fix Manual debugging? Bug detected late Bugs expensive to fix Manual functional Hard to trace code testing? back to requirements Code fails to meet requirements
  • 105. Towards better testing practices Coding the traditional way Lots of bugs Fragile untested code Changes introduce new Coding Low code coverage bugs Some unit testing? No regression tests Changes are costly Bugs hard to fix Manual debugging? Bug detected late Bugs expensive to fix Manual functional Hard to trace code testing? back to requirements Code fails to meet requirements
  • 106. Towards better testing practices So what’s wrong with the old way?
  • 107. Towards better testing practices So what’s wrong with the old way? Lots of defects. Really, lots.
  • 108. Towards better testing practices So what’s wrong with the old way? Lots of defects. Really, lots. High maintenance costs
  • 109. Towards better testing practices So what’s wrong with the old way? Lots of defects. Really, lots. High maintenance costs Hard to introduce new features
  • 110. Towards better testing practices So what’s wrong with the old way? Lots of defects. Really, lots. High maintenance costs Hard to introduce new features Doesn’t meet the actual requirements
  • 111. Towards better testing practices So what’s wrong with the old way? Lots of defects. Really, lots. High maintenance costs Hard to introduce new features Doesn’t meet the actual requirements Delayed deliveries
  • 112. Towards better testing practices So what’s wrong with the old way? Lots of defects. Really, lots. High maintenance costs Hard to introduce new features Doesn’t meet the actual requirements Delayed deliveries Unhappy end-users
  • 113. Towards better testing practices How much does a bug cost to fix, anyway? 00 $$$ 75 50 25 When was the 0 change requested? Requirements Unit Testing System Testing UAT Production Design
  • 114. Towards better testing practices How much does a bug cost to fix, anyway? 00 $$$ 75 50 Changes harder and more costly 25 When was the 0 change requested? Requirements Unit Testing System Testing UAT Production Design
  • 115. Towards better testing practices How much does a bug cost to fix, anyway? 00 $$$ 75 50 Changes harder and more costly Changes easier and cheaper to make 25 When was the 0 change requested? Requirements Unit Testing System Testing UAT Production Design
  • 116. Towards better testing practices How can good testing practices help?
  • 117. Towards better testing practices How can good testing practices help? Reduce bugs
  • 118. Towards better testing practices How can good testing practices help? Reduce bugs Write better-designed code
  • 119. Towards better testing practices How can good testing practices help? Reduce bugs Write better-designed code Have more confidence in our code
  • 120. Towards better testing practices How can good testing practices help? Reduce bugs Write better-designed code Have more confidence in our code Make changes more easily
  • 121. Towards better testing practices How can good testing practices help? Reduce bugs Write better-designed code Have more confidence in our code Make changes more easily Meet user requirements more accurately
  • 122. Towards better testing practices How can good testing practices help? Reduce bugs Write better-designed code Have more confidence in our code Make changes more easily Meet user requirements more accurately Lower maintenance costs
  • 123. Towards better testing practices How can good testing practices help?
  • 124. Towards better testing practices How can good testing practices help? Well-designed code
  • 125. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback
  • 126. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster
  • 127. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes
  • 128. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes Full automated regression tests
  • 129. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes Full automated regression tests Lower maintenance costs Make changes with confidence
  • 130. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes Full automated regression tests Lower maintenance costs Make changes with confidence Code to the requirements
  • 131. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes Full automated regression tests Lower maintenance costs Make changes with confidence Code to the requirements Don’t code unnecessary features
  • 132. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes Full automated regression tests Lower maintenance costs Make changes with confidence Code to the requirements Don’t code unnecessary features Focus and productivity
  • 133. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes Full automated regression tests Lower maintenance costs Make changes with confidence Code to the requirements Don’t code unnecessary features Focus and productivity Develop more productively
  • 134. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes Full automated regression tests Lower maintenance costs Make changes with confidence Code to the requirements Don’t code unnecessary features Focus and productivity Develop more productively Technical documentation
  • 135. Towards better testing practices How can good testing practices help? Easier to make changes Well-designed code Better response to user feedback Find bugs faster Cheaper bug fixes Full automated regression tests Lower maintenance costs Make changes with confidence Code to the requirements Don’t code unnecessary features Focus and productivity Develop more productively Technical “Executable requirements” documentation Lower maintenance costs
  • 136. Towards better testing practices More flexibility
  • 137. Towards better testing practices More flexibility Testable code is easier to change
  • 138. Towards better testing practices More flexibility Testable code is easier to change Full regression tests avoid introducing errors
  • 139. Towards better testing practices More flexibility Testable code is easier to change Full regression tests avoid introducing errors I’m not afraid to change the code - the tests are my safety net
  • 140. Towards better testing practices Better visibility
  • 141. Towards better testing practices Better visibility Tests are “executable requirements”
  • 142. Towards better testing practices Better visibility Tests are “executable requirements” Automated acceptance tests measure progress
  • 143. Towards better testing practices Better visibility Tests are “executable requirements” Automated acceptance tests measure progress A feature can’t be “90% finished” - it either works or it doesn’t
  • 144. Towards better testing practices Documentation
  • 145. Towards better testing practices Documentation Tests are “living documentation” of your code
  • 146. Towards better testing practices Documentation Tests are “living documentation” of your code Always accurate and up-to-date
  • 147. Towards better testing practices Documentation Tests are “living documentation” of your code Always accurate and up-to-date I can understand how the code works by reading the tests
  • 148. Towards better testing practices Lower maintenance costs
  • 149. Towards better testing practices Lower maintenance costs Less bugs, found faster
  • 150. Towards better testing practices Lower maintenance costs Less bugs, found faster Changes are easier to make
  • 151. Towards better testing practices Lower maintenance costs Less bugs, found faster Changes are easier to make Maintaining this sort of application is a real pleasure!
  • 152. Automating the build process Continuous Integration - what’s the issue? Traditional development cycles are bad for your health:
  • 153. Automating the build process Continuous Integration - what’s the issue? Traditional development cycles are bad for your health: Integration is long and difficult
  • 154. Automating the build process Continuous Integration - what’s the issue? Traditional development cycles are bad for your health: Integration is long and difficult Poor visibility on development progress
  • 155. Automating the build process Continuous Integration - what’s the issue? Traditional development cycles are bad for your health: Integration is long and difficult Poor visibility on development progress Functional tests are done too late
  • 156. Automating the build process Continuous Integration - what’s the issue? Traditional development cycles are bad for your health: Integration is long and difficult Poor visibility on development progress Functional tests are done too late Raised issues are harder to fix
  • 157. Automating the build process Continuous Integration - what’s the issue? Traditional development cycles are bad for your health: 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
  • 158. Automating the build process Continuous Integration - what’s involved?
  • 159. Automating the build process Continuous Integration - why bother?
  • 160. Automating the build process Continuous Integration - why bother? Smoother integration process
  • 161. Automating the build process Continuous Integration - why bother? Smoother integration process Automatic regression testing
  • 162. Automating the build process Continuous Integration - why bother? Smoother integration process Automatic regression testing Regular working releases
  • 163. Automating the build process Continuous Integration - why bother? Smoother integration process Automatic regression testing Regular working releases Earlier functional testing
  • 164. Automating the build process Continuous Integration - why bother? Smoother integration process Automatic regression testing Regular working releases Earlier functional testing Faster and easier bug fixes
  • 165. Automating the build process Continuous Integration - why bother? Smoother integration process Automatic regression testing Regular working releases Earlier functional testing Faster and easier bug fixes Better visibility
  • 166. Automating the build process Continuous Integration - why bother? Smoother integration process Automatic regression testing Regular working releases Earlier functional testing Faster and easier bug fixes Better visibility No more “it works on my machine”
  • 167. Automating the build process Continuous Integration - what you need
  • 168. Automating the build process Continuous Integration - what you need Automated build process (e.g. Maven)
  • 169. Automating the build process Continuous Integration - what you need Automated build process (e.g. Maven) Automated tests (JUnit, Selenium, easyb...)
  • 170. Automating the build process Continuous Integration - what you need Automated build process (e.g. Maven) Automated tests (JUnit, Selenium, easyb...) Source code repository
  • 171. Automating the build process Continuous Integration - what you need Automated build process (e.g. Maven) Automated tests (JUnit, Selenium, easyb...) Source code repository Continuous Build Server
  • 172. Automating the build process Continuous Integration - what can it do?
  • 173. Automating the build process Continuous Integration - what can it do? Raise integration issues - fast!
  • 174. Automating the build process Continuous Integration - what can it do? Raise integration issues - fast! Monitor your build process
  • 175. Automating the build process Continuous Integration - what can it do? Raise integration issues - fast! Monitor your build process Monitor and report on code quality and code coverage
  • 176. Automating the build process Continuous Integration - what can it do? Raise integration issues - fast! Monitor your build process Monitor and report on code quality and code coverage Build promotion and release management
  • 177. Automating the build process Continuous Integration - what can it do? Raise integration issues - fast! Monitor your build process Monitor and report on code quality and code coverage Build promotion and release management Automated deployments
  • 178. Automating the build process Looking for a good O/S Continuous Integration tool?
  • 179. Automating the build process Looking for a good O/S Continuous Integration tool? Try Hudson!
  • 180. Automating the build process Looking for a good O/S Continuous Integration tool? Try Hudson! Easy to set up and configure
  • 181. Automating the build process Looking for a good O/S Continuous Integration tool? Try Hudson! Easy to set up and configure Good build and code quality metrics
  • 182. Automating the build process Looking for a good O/S Continuous Integration tool? Try Hudson! Easy to set up and configure Good build and code quality metrics Lots of plugins
  • 183. Automated Code Quality Why use code quality metrics
  • 184. Automated Code Quality Why use code quality metrics Better quality code
  • 185. Automated Code Quality Why use code quality metrics Better quality code Enforce corporate coding standards
  • 186. Automated Code Quality Why use code quality metrics Better quality code Enforce corporate coding standards Detect potential bugs
  • 187. Automated Code Quality Why use code quality metrics Better quality code Enforce corporate coding standards Detect potential bugs Code is easier to maintain
  • 188. Automated Code Quality Why use code quality metrics Better quality code Enforce corporate coding standards Detect potential bugs Code is easier to maintain Train new staff
  • 189. Automated Code Quality Why use code quality metrics Better quality code Enforce corporate coding standards Detect potential bugs Code is easier to maintain Train new staff Keep technical debt down
  • 190. Automated Code Quality What is technical debt?
  • 191. Automated Code Quality What is technical debt? The cost of poor quality code:
  • 192. Automated Code Quality What is technical debt? The cost of poor quality code: Harder to make changes
  • 193. Automated Code Quality What is technical debt? The cost of poor quality code: Harder to make changes Too much time spent fixing bugs
  • 194. Automated Code Quality What is technical debt? The cost of poor quality code: Harder to make changes Too much time spent fixing bugs Takes too long to add competitive new features
  • 195. Automated Code Quality What is technical debt? The cost of poor quality code: Harder to make changes Too much time spent fixing bugs Takes too long to add competitive new features This legacy code takes way to long to change
  • 196. Automated Code Quality What is technical debt? The cost of poor quality code: Harder to make changes Too much time spent fixing bugs Takes too long to add competitive new features This legacy code takes way to long to change We spend all our time fixing bugs, not adding new features
  • 197. Automated Code Quality How do we pay off technical debt?
  • 198. Automated Code Quality How do we pay off technical debt? Enforce coding standards
  • 199. Automated Code Quality How do we pay off technical debt? Enforce coding standards Teach developers good coding practices
  • 200. Automated Code Quality How do we pay off technical debt? Enforce coding standards Teach developers good coding practices Spend time keeping the code clean (refactoring)
  • 201. Automated Code Quality How do we pay off technical debt? Enforce coding standards Teach developers good coding practices Spend time keeping the code clean (refactoring) ...it will be quicker and easier for everyone to make changes later on
  • 202. Automated Code Quality How do we pay off technical debt? Enforce coding standards Teach developers good coding practices Spend time keeping the code clean (refactoring) If I spend a little time tidying up my code today... ...it will be quicker and easier for everyone to make changes later on
  • 204. Automated Code Quality Team code reviews Review code as a group
  • 205. Automated Code Quality Team code reviews Review code as a group Long and slow if done manually
  • 206. Automated Code Quality Team code reviews Review code as a group Long and slow if done manually Benefits greatly from the use of tools
  • 207. Automated Code Quality Enforcing coding standards with Hudson
  • 208. Automated Code Quality Enforcing coding standards with Hudson Number of violations over time
  • 209. Automated Code Quality Enforcing coding standards with Hudson
  • 210. Automated Code Quality Enforcing coding standards with Hudson Drilling down
  • 211. Automated Code Quality Enforcing coding standards with Hudson
  • 212. Automated Code Quality Enforcing coding standards with Hudson Details for a particular issue
  • 214. Automated Code Quality Code Coverage See what code is being executed by your unit tests.
  • 215. Automated Code Quality Code Coverage See what code is being executed by your unit tests. Isolate untested code
  • 216. Automated Code Quality Code Coverage See what code is being executed by your unit tests. Isolate untested code Can help to estimate if testing practices are being applied
  • 217. Automated Code Quality Monitoring Code Coverage with Hudson
  • 218. Automated Code Quality Monitoring Code Coverage with Hudson
  • 219. Automated Code Quality Monitoring Code Coverage with Hudson Executed code
  • 220. Automated Code Quality Monitoring Code Coverage with Hudson Executed code Unexecuted code
  • 221. Automated Code Quality Code Quality Governance with Sonar
  • 222. Automated Code Quality Code Quality Governance with Sonar Centralized code quality management
  • 223. Automated Code Quality Code Quality Governance with Sonar Centralized code quality management Works on any Maven project
  • 224. Automated Code Quality Code Quality Governance with Sonar Centralized code quality management Works on any Maven project Store code quality metrics in a database
  • 225. Automated Code Quality Code Quality Governance with Sonar Centralized code quality management Works on any Maven project Store code quality metrics in a database Code quality metrics can be consulted on a web site
  • 226. Automated Code Quality Code Quality Governance with Sonar Sonar centralizes many code quality metrics
  • 227. Automated Code Quality Code Quality Governance with Sonar Sonar centralizes many code quality metrics Source code metrics
  • 228. Automated Code Quality Code Quality Governance with Sonar Sonar centralizes many code quality metrics Source code metrics Code complexity metrics
  • 229. Automated Code Quality Code Quality Governance with Sonar Sonar centralizes many code quality metrics Source code metrics Code complexity metrics Test results and code coverage
  • 230. Automated Code Quality Code Quality Governance with Sonar Sonar centralizes many code quality metrics Source code metrics Code complexity metrics Test results and code coverage Build history
  • 231. Automated Code Quality Code Quality Governance with Sonar Sonar centralizes many code quality metrics Source code metrics Code complexity metrics Test results and code coverage Build history Modules
  • 232. Automated Code Quality Code Quality Governance with Sonar Sonar centralizes many code quality metrics Source code metrics Code complexity metrics Test results and code coverage Code quality metrics Build history Modules
  • 233. Automated Code Quality Code Quality Governance with Sonar Sonar centralizes many code quality metrics Source code metrics Code complexity metrics Test results and code coverage Code quality metrics Build history Modules Click anywhere to drill down
  • 234. Automated Code Quality Code Quality Governance with Sonar You can drill down to view the details for each type of issue
  • 235. Automated Code Quality Code Quality Governance with Sonar You can drill down to view the details for each type of issue Overview
  • 236. Automated Code Quality Code Quality Governance with Sonar You can drill down to view the details for each type of issue Overview Different types of violations
  • 237. Automated Code Quality Code Quality Governance with Sonar You can drill down to view the details for each type of issue Overview Different types of violations Violations in this class
  • 238. Automated Code Quality Code Quality Governance with Sonar You can drill down to view the details for each type of issue Overview Different types of violations Violations in this class Violation details
  • 239. Summary How can you improve the development process?
  • 240. Summary How can you improve the development process? Standardize your build process
  • 241. Summary How can you improve the development process? Standardize your build process Improve testing practices
  • 242. Summary How can you improve the development process? Standardize your build process Improve testing practices Use Continuous Integration
  • 243. Summary How can you improve the development process? Standardize your build process Improve testing practices Use Continuous Integration Reduce your technical debt
  • 244. Summary How can you improve the development process? Standardize your build process Improve testing practices Use Continuous Integration Reduce your technical debt Automate, automate, automate!
  • 245. John Ferguson Smart Email: john.smart@wakaleo.com Web: http://www.wakaleo.com Twitter: wakaleo Thanks for your attention!
  • 246. John Ferguson Smart Email: john.smart@wakaleo.com Web: http://www.wakaleo.com Twitter: wakaleo Thanks for your attention!
  • 247. John Ferguson Smart Email: john.smart@wakaleo.com Web: http://www.wakaleo.com Twitter: wakaleo Thanks for your attention! http://www.wakaleo.com
  • 248. John Ferguson Smart Email: john.smart@wakaleo.com Web: http://www.wakaleo.com Twitter: wakaleo Thanks for your attention! http://weblogs.java.net/blog/ http://www.wakaleo.com

Notes de l'éditeur