Agile software development is an iterative method of software development which requires short cycles of design, development and test. Central to this approach is the division of projects into small iterations, called sprints, that require less planning and can be completed within short time frames, usually measured in weeks. Agile development methods also allow for better collaboration while the software is built. Each sprint incorporates all stages of the traditional development cycle, including analysis, design, coding and testing. Once a sprint is complete, it is ready for deployment.
Comparison to Waterfall and V-Model Development
The Waterfall and V-Model development methods are characterized by distinct phases, each having a thorough review and authorization process that should be completed before proceeding. This approach has been used and is still recommended in many regulated industries building embedded systems. The phases: requirements definition, design, code, and test, sound logical enough but don't allow for easy incorporation of change. In this scenario, the testing phase almost always gets shortchanged. And the long development cycles make it really hard for projects to stay on schedule and within budget.
Manual vs Automatic Unit Test Frameworks
An indisputable fact related to manual unit testing is that the majority of the time spent unit testing is actually getting ready to test. The amount of test code generated will be at least equal to the amount of application code generated. For safety-critical systems the amount test code written can be 5 to 10 times the amount of application code. This test code, consisting of mock objects, stubs, and drivers, when built manually is prone to error.
VectorCAST/C++ and VectorCAST/Ada provide fully automated unit testing frameworks, and help to greatly simplify the process of unit testing. The VectorCAST tools completely automate the generation of the complete test environments including mock objects, smart stubs, and drivers.
Test Driven Development
The concept behind Test Driven Development (TDD) is that the test cases for the code to be developed should be created before the code is implemented. This way the test cases being developed for the code are based solely on the requirements and are not influenced by the implementation of the requirements in the code.
When you are building a test environment with VectorCAST/C++, you simply point to the directory containing the header files for the API that you want to test. VectorCAST will create the test environment automatically (smart stubs, mock objects and driver code), including empty implementations for the functions defined in the header files. This results in a complete executable test harness that can be run on the host platform or in an embedded development environment. Most importantly, as you iterate though your development cycles, VectorCAST will automatically include the code for each implemented function into the test environment as it is developed.
Continuous Integration and Test
Continuous Integration and Test is a key component of Agile and Test Driven Development. Each developer integrates changes to configuration management as they are ready for testing, leading to multiple integrations per day. Each integration is then verified by an automated build and test step to detect integration errors as quickly as possible. This approach leads to significantly reduced integration issues, allowing the project team to develop more cohesive software in a shorter amount of time.
VectorCAST/Manage is the ideal tool for supporting continuous integration and test. VectorCAST/Manage allows development teams to assemble previously developed VectorCAST test environments into regression test suites, providing a single point-of-control for all unit and integration test activities. At-a-glance logs, summary reports, and color-coded pass/fail criteria highlight the status of each test within the regression suite. Trend reporting is also available to show testing progress over time.