Use Agile Correctly (Part 4) – Testing, Integration, and Delivery

  • November 2, 2016

    Use Agile Correctly (Part 4) - Testing, Integration, and Delivery

    Use Agile Correctly (Part 4) - Testing, Integration, and Delivery

    Thanks for the interest in our “How To Use Agile Correctly” series. You can find parts 1-3 via links below.

    Part 1: The Concept
    Part 2: Team and Process
    Part 3: Grooming and Planning

    For the final learning, we will be focusing on Unit Testing, Continuous Integration, and Continued Delivery

    Unit Testing

    Many teams don’t invest in Unit Testing. For any Agile Team Unit Test is the most critical thing and team must continue to increase the code coverage of the tests. Even based on Test Triangle as shown in the image below, Unit Test has the larger scope in Software Testing.


    Benefits of Unit Testing

    1. Unit Testing gives an opportunity to think as User of your code, instead of an implementer of the production code.
    2. Reduce bugs by identifying all the use case scenarios to reflect intent (end user’s mindset, business needs, expected functionality and business validations etc.)
    1. Less-n-less time on debugging.
    2. Avoid collateral damage. I.e. a fix in one area may break functionality in another possibly
      related/unrelated area.
    3. Helps you achieve YAGNI– You Aren’t Gonna Need It. I.e. saves you from writing code which you
      don’t need

    Tips for System Test

    • Must know how much to test, drive your Test cases from Acceptance criteria.
    • Avoid duplicate test steps.
    • Make sure that all your Test Cases are Mapped to Acceptance Criteria.
    • Try to combine similar behaviors in a single test case.
    • Do not go above and beyond to identify every corner case or hack the system. I.e. above a beyond the acceptance criteria. I know this is tricky and someone may want to debate on it. I didn’t mean to say that don’t test any areas of application which might have direct impact of a User Story or what not. But there is always a fine line on what to test and what not.
    • Time box for ad-hoc testing. I.e. in each sprint time-box some time

    Continuous Integration (CI)

    • An important part of any software development process is getting reliable builds of the software. – Martin Fowler
    • Continuous Integration (CI) is the strategy and practice of making sure that changes to a software project’s code base are successfully built, tested, reported on, and rapidly made available to all parties after they are introduced.

    Advantages of CI

    • Increase ROI (Return on Investment).
    • Guarantees successfully compiled software.
    • Visible progress reporting and problem tracking.
    • Low TCO (Total Cost of Ownership).
    • Improve development standards, consistencies and accountability.
    • Rapidly identify bugs, who created them, and where it is.
    • Quickly push high quality change updates to testing.
    • Reduce development integration effort.
    • Increase amount of quality code.

    Successful Build

    An aggressive goal for a successful build would include:

    •       All the latest sources are checked out of the configuration management system.

    •       Every file is compiled from scratch.

    •       The resulting object files are linked and deployed for execution.

    •       The system is started and a suite of tests is run against the system.

    •       If all of the above execute without error or human intervention and every test passes, that is a successful build.

    Let the Team see what is happening

    • Must have Gated builds and nightly builds to ensure value delivery of the functionality.

    You can use this build monitoring tool from

    Continuous Delivery (CD)

    CI mainly focuses on development teams. The output of the CI system normally forms the input to the manual testing process and to the rest of the release process.

    You’re doing continuous delivery when:

    • Your software is deployable throughout its lifecycle
    • Your team prioritizes keeping the software deployable over working on new features
    • You can perform push-button deployments of any version of the software to any environment on demand

    Contact us now to learn how this process could impact your company.