# Introduction to Software Engineering

* Status: This book is still under construction.
* This book is an introduction to the art of software engineering. It is intended as a textbook for an undergraduate level course.
* Software Engineering is about teams and it is about quality. The problems to solve are so complex or large, that a single developer cannot solve them anymore. Software engineering is also about communication on a team and with internal and external stakeholders. Teams do not consist only of developers, but also of quality assurance testers, systems architects, system/platform engineers, customers, project managers and other stakeholders.
* Implementation is no longer just writing code, but it is also following guidelines, writing documentation and also writing unit tests. But unit tests alone are not enough. The different pieces have to fit together. And we have to be able to spot problematic areas using metrics and improve the quality in those areas. The code should follow certain standards to make it easier for a team to work together. Once we are finished coding, that does not mean that we are finished with the project: for large projects maintaining software and other maintenance can keep many people busy for a long time.
* Since there are so many factors influencing the success or failure of a project, the book covers project management skills. Software projects can be so large that we have to do careful planning. We walk through the factors that cause a project to fail and the success factors. Last but not least, a good software engineer, like any engineer, needs tools, and in this book we cover good tools for everyday use on large, and small, projects.
* We invite you to join us on the journey through the mazes of software engineering!

### Software Engineering

* Introduction
* History
* Software Engineer

### UML

* Introduction
* Models and Diagrams
* Tools: Modelling and Case
* Labs

### Process & Methodology

* Introduction
* Methodology
* V-Model
* Agile Model
* Standards
* Life Cycle
* Rapid Application Development
* Extreme Programming
* Personal Software Process
* Tools: Process
* Labs

### Planning

* Requirements
* Requirements Management
* Specification
* Tools: Planning
* Labs

### Project Management

* Introduction
* Software Estimation
* Cost Estimation
* Development Speed
* Tools: Project Management
* Labs

### Architecture & Design

* Introduction
* Design
* Design Patterns
* Anti-Patterns
* Tools: Architecture
* Labs

### Implementation

* Introduction
* Code Convention
* Good Coding
* Documentation
* Tools: Compiler
* Tools: Debugger
* Tools: IDE
* Tools: GUI Builder
* Tools: Source Control
* Tools: Software Documentation
* Labs

### Testing

* Introduction
* Unit Tests
* Profiling
* Test-driven Development
* Refactoring
* Tools: Testing
* Tools: Code Coverage
* Tools: Profiling
* Labs

### Software Quality

* Introduction
* Static Analysis
* Metrics
* Software Package Metrics
* Visualization
* Code Review
* Code Inspection
* Tools: Static Code Analysis
* Labs

### Deployment & Maintenance

* Introduction
* Maintenance
* Evolution
* Tools: Build Tools
* Tools: Continuous Integration
* Tools: Bug Tracking
* Labs

### Re-engineering

* Introduction
* Reverse Engineering
* Round-trip Engineering
* Tools: Decompiler
* Tools: Obfuscation
* Labs

### Other

* Introduction

### Appendices

* Glossary
* Resources
* Authors
* Licensing