The number of methods and tools available to the software engineer nowadays is overwhelming; nevertheless many software projects fail to meet their schedules, are over budget, do not meet the user requirements, or simply have considerable quality defects. Reinhold Ploesch emphasizes methods, techniques and tools that can be used by typical software engineers in everyday projects. The important requirements for the methods and techniques presented are simplicity, preciseness, generality and expressiveness; the challenge is to develop approaches that are balanced in the sense that all four requirements are fairly equally fulfilled. His approach combines contract and scenario techniques into a consistent methodology that can be used in analysis and design. It can also be combined with prototyping-based software development. Graduate students and researchers will gain a thorough understanding of contract techniques and related approaches. Professional software engineers will find many techniques applicable in their daily work, as all approaches given are compared with techniques available in the realm of the popular UML language.