Abstract

Today, software engineering is concerned less with individual programs than with large-scale networks of interacting programs. For large-scale networks, engineering problems emerge that go well beyond functional correctness (the purview of programming) and encompass equally crucial nonfunctional qualities such as security, performance, availability, and fault tolerance. A pivotal challenge, then, is to provide techniques to routinely construct systems that have predictable nonfunctional quality. These techniques impose constraints on the problem being solved and on the form solutions can take. This technical note shows how smart constraints can be embedded in software infrastructure, so that systems conforming to those constraints are predictable by construction.