This book discusses a comprehensive spectrum of software engineering techniques and shows how they can be applied in practical software projects. This edition features updated chapters on critical systems, project management and software requirements.