When we talk about non-functional requirements we often focus on performance and response times. But there are many other types of non-functional requirements and their obscurity can lead to them being missed.
Here are some non-functional requirements that can get forgotten:
Agile drives frequent releases and frequent releases drive automated testing. You can't just switch on test automation though, there is a lot of investment in time and energy required and the payoff is usually in the medium to long term.
So far we have built a simple Spring MVC web application and added a Cucumber based acceptance test. The next step is to add in a Selenium based Cucumber acceptance test. First we add in some Cucumber scenarios. Here is the feature file:
With the basic application in place it is now time to focus on testing. First up we add a Cucumber acceptance test. It is a good idea to keep your acceptance tests separate from your unit tests, so I tend to run them in the integration-test phase of Maven. To do this use the failsafe plugin, adding something like this to your pom:
...there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns -- the ones we don't know we don't know.
When working on a complicated product it can be tempting to focus on individual components rather than on end-user functionality. For example, a team might decide to build out an authentication component first before adding a user interface (UI).