Implementation and Testing

Prioritizing feature implementation

Planning the onion

Iteration / Release Planning

Software iterations and releases

An iteration of a project is a planned global step in the development of a piece of software.

Release terminology

A release is a stable iteration released to some users.

Iteration Planning

We covered above that an onion-decomposition is needed; how to do that in practice?

For iterations 3-6 of your projects you will need to supply an iteration plan. The previous project examples show some example iteration plans.

Implementation Principles

Here are some good principles for implementation, many of which are from the Agile school of thought.

Practice Collective Code Ownership


There are many levels on which you need to be communicating with your team, beyond collective code.

Continuous Integration (CI)

Build the whole system on a regular basis, don't work on a subcomponent in isolation for long

Have a coding standard

Pair Programming

Pair programming is two people programming on one terminal.

Is it good? Bad? Ugly?


Refactoring is an independent future lecture topic. At the root its very simple: sometimes its better to stop adding features and instead redo existing code to be more elegant and more aligned to they way you (now) see you are going.


Testing is a major component of commercial software development.

Testing Hierarchies

We use a simple testing hierarchy (there are other forms of test that we skip; these are the most common ones today)

Unit Testing

Write small tests for each nontrivial operation

Unit testing in Java with JUnit

Test Coverage

Test Coverage Tools

We will run the IntelliJ code coverage tool on the Todo app test suite. (Note their coverage tool doesn't seem to be compatible with Maven)

Acceptance testing

Behavior-Driven Development, briefly

BDD is a relatively new approach to acceptance testing

Integration Testing

CI Services for integration (and acceptance) testing

We will show Travis-CI in action running the tests of the simple Todo app.

Testing UIs

Testing apps with databases and distribution

You need to work harder to get some features automatically tested.

For your projects you will need to get as much automated testing set up as possible. Work with your project advisor to figure out how to get your test harnesses set up.

Iterations 3-6

We will briefly review Iteration 3 for the specific requirements.