Friday, March 16, 2018

Empowering software integration

Software integration is often looked down upon in the software development community despite the key role it plays in the software delivery process. Quite often, even the broader scoped Software Configuration Management is not given its due in terms of resources or recognition. Here are my suggestions to make software integration contribute in a more meaningful way to make the entire software delivery cycle more efficient:

Software integration is the process of pulling multiple sources of code together, building them, testing the output and releasing either the source or the generated binary. The established best practice is to enable continuous delivery of software where the integration, build, test and release tasks are handled automatically when new source code is submitted for integration.

Where Continuous Integration starts to particularly break down is on embedded systems when the work output of largely independent software teams is integrated and the resultant output runs on a single processor with constrained memory and clock cycles. Each team contributes to thoroughly testing its own deliverable, but an integrated test is needed for performance under concurrency. Most often, this "integrated test" is simply a concurrent run of the individual tests. The challenge is to select the right tests to run concurrently and to establish metrics that signal the test pass/fail status.

By shifting ownership of the concurrent test and performance metrics to the integration team, one can make the team contribute more meaningfully to the software delivery life cycle. The integration team should establish checks to ensure that each contributing team consumes its pre-established amount of system resources such as memory and processor cycles. This structure also automatically establishes a triage workflow since any concurrency related failures are first looked at by the team that performed the integration rather than the individual technology team, thus speeding up troubleshooting.

Linking test delivery to code, with coverage based pass/fail is a topic for another day.
-Kuntal.