Continuous Engineering (CI)
Continuous Engineering Enter continuous engineering. What happens when requirements come in at a canter, or change frequently? How do we ensure that the gains of a mature continuous delivery process are not muted by a confused requirements and design process? This question is especially relevant in the IoT era, when devices work in real-life business, social, legal, and climatic ‘environments’. To call such environments dynamic and unpredictable would be an understatement.
First things first. The tools that support continuous engineering must focus on speed and agility. Automation is key; as it is in Continuous Delivery. Which is why the emphasis on automated modeling, testing, builds, and deployment persists in continuous engineering as well.
Global traceability requires tools that can help you connect to your entire portfolio of artifacts across lifecycle stages. So, you can link test cases with software requirements and navigate from one to the other seamlessly, even when the two kinds of artifacts are created by different tools. Such interoperability between tools can be achieved easily when the tools support OSLC.
Global Configuration Management
The next ingredient in the continuous engineering recipe is configuration management. Versioning and configuration management have been around a long time. However, as in traceability, the ability to work across a lifecycle is what continuous engineering needs. Given that analysts, designers, developers, testers, and operations have traditionally worked in silos, a universal view of all artifacts across the lifecycle has not been a frequently expressed demand. Not until continuous engineering.
With continuous engineering you can have multiple product release streams running in parallel. Each product stream will have its own artifacts from different lifecycle stages — requirements, design use cases, test cases, and code — slightly different from those in other streams. The set of such artifacts comprising a product stream is often called a ‘global configuration’. In many ways, a global configuration is like an abstract layer that links together artifacts living in their own lifecycle stage and managed independently by stage-specific tools.