A challenge for engineers is how to design systems that work effectively in todays complicated world. Five key characteristics of modern computing environments that need to be taken into account when building systems are: complexity, their distributed nature, time-sensitivity of information, the uncertainty and unpredictability of the surrounding environment, and its open nature new things happen. This is sometimes summarised as systems being dynamic. A desirable attribute for software within a dynamic system is adaptivity. As the world changes, our software ideally should evolve to reflect the change. As new facts enter the world, the software should not break. An obvious area where adaptivity is essential is security. As a new virus or security threat is determined, it would be good if the virus checking/firewall/security system incorporated a response to the new threat automatically. How do the system know how to adapt in response to new events and situations? There has to be some purposefulness that the system can refer to. An additional attribute that I strongly advocate is that the software should be understandable in its design and purpose. We need ways of thinking about and describing software which simplifies complexity, at least in regarding to describing behaviour.
Proceedings of the18th World Congress of the International Federation of Automatic Control (IFAC 2011), Milan, Italy, 28 August - 02 September 2011 / Sergio Bittanti, Angelo Cenedese and Sandro Zampieri (eds.),
Vol. 18, part 1