Increasing size and complexity of software and hardware systems makes it harder to ensure their reliability. At the same time, the issues of autonomous computing become more critical as we more and more rely on software systems in our daily life. Such complexity is getting even more critical with the ubiquitous computing of embedded devices and other pervasive systems. These trends ask for techniques and tools for developing reliable and autonomous software which can support software engineers in their efforts. This book summarizes the state of the art of research in the diverse fields concerned, including novel designs, case studies and experimental as well as theoretical results.