Many applications-area projects involve the need to integrate software with hardware devices and human controls. Left to themselves to determine the system architecture, the hardware or human factors personnel will often make commitments that severely complicate the software engineering function. A good example is the choice of best-of-breed hardware components or user applications with incompatible COTS products or user interfaces. Research is needed on integrated software-hardware-human factors system definition and design that involves software engineers in both the research and the use of the resulting methods, processes, and tools.
A valuable perspective on the mismatches between traditional hardware-oriented systems engineering architectural structures and modern software architectural structures has been provided in [Maier, 2006]. First, traditional hardware-driven systems engineering methods functionally decompose the systems architecture into one-to-many “part-of” or “owned-by” relationships. This means that much of the software is fragmented into part-of children of numerous scattered hardware components, while modern software methods organize system capabilities as layers of many-to-many service-oriented relationships. This makes for slow and cumbersome software adaptation to change, and difficulties in creating high-assurance systems.