Software Development Body of Knowledge - ABC 01
Friday, June 12, 2009 at 1:40 Tweet There is a great discipline out there called Project Management. It is about planning, organizing, and managing resources to bring about the successful completion of specific project. Projects can range widely from writing a diploma to delivering an innovative automobile factory ready for mass-production.
Core principles of this discipline are captured in a book called Project Management Body of Knowledge which basically lays out a foundation for a successful communication between the project managers and other people involved in the project (stakeholders).
These principles could be applied to software development, too. In fact, they should be applied, since Project Management is the tool that allows to deliver really complex development projects on time, within the budget and quality constraints.
This becomes even more important these days, as the complexity of enterprise applications keeps on growing with the introduction of new concepts like Software as a Service, Cloud Computing.
However, before the Project Management approach could be applied consciously to the development domain, some steps ought to be taken. The first one starts with a dictionary of common terms from the domain of software development projects.
So let me introduce Software Development Body of Knowledge - ABC series to you. Each article will present definitions of 3 terms essential to the software development these days. These definitions will attempt to provide common high-level overview of the term's meaning without going too deep into the details.
As always, all feedback is extremely welcome. Please, feel free either to comment on this post, specific terms or to drop me a line directly.

Test-Driven Development - TDD
Test-Driven Development (TDD) is a software design method that requires developers to create automated unit tests that define code requirements, before writing code itself. These unit tests contain multiple assertions (returning true or false) that could be used to rapidly verify correct behavior of the code being tested. Unit Tests allow developers to evolve and refactor code in a more secure manner.
Writing a test before the actual code helps to achieve higher quality, because:
- it forces developer to refine code contracts before working on the implementation;
- it forces developer to make and keep code easily testable. This requires loose coupling and a separation of cross-cutting concerns;
- presence of unit tests gives developers more psychological freedom to experiment with the code and refactor it; managers get lower risks related to introducing high-level changes to the project.
Proceed to the full article on Test-Driven Development
Continuous Integration
Continuous Integration (CI) in software development is a set of practices and principles that speed up delivery of software projects and increase quality of their deliverables.
Simply put, Continuous Integration takes a lot of mundane and boring things away from the process of software development, while letting developers to concentrate on more enjoyable and creative tasks.
As the name implies, Continuous Integration is about integrating changes to the development project continuously and automatically. These changes usually come in form of modifications and additions to the source code. When we keep them as small as possible and automatically run all checks available (starting from the compilation process and up to the full test routines), we can detect most breaking issues whenever they are introduced. Since the changes are small, it is much easier to isolate and fix the root cause.
Proceed to the full article on Continuous Integration
Inversion of Control - IoC
Inversion of Control (IoC) is an approach in software development that favors removing sealed dependencies between classes in order to make code more simple and flexible. We push control of dependency creation outside of the class, while making this dependency explicit.
Usage of Inversion of Control generally allows to create applications that are more flexible, unit-testable, simple and maintainable in the long run.
Proceed to the full article on Inversion of Control
Interested in the series? You can stay tuned by subscribing to the RSS feed of this Journal.