[MUSIC]
So up till now, we have been talking about quality in an informal way.
However, if you want to build systems that support the required qualities,
you will need a way to express those qualities, and
you need to understand how you can achieve them.
After this module, you should be able to understand quality attributes and
formulate your own quality requirements.
We will also study two qualities that are especially relevant for
the Internet of things, interoperability and modifiability.
Now, quality attributes have been around for a long time,
and many of them have their own research community and interest groups.
Performance engineering, usability, and security,
all examples of such specialized communities.
The list is endless, but there are many problems with this
older approach to system quality attributes.
In many cases, the system quality is considered without any
relation to the other qualities, and each community has its own vocabulary.
Responsiveness has a different meaning for
a performance engineer than for a usability expert.
Another problem is the fact that some definitions are vague or ambiguous.
What does it mean if a system is modifiable or fast?
How can I test a requirement that states that
the system needs to have high level of usability?
Let's take the example of a mobile phone application for
looking up train schedules.
This sounds like a very simple, functional application,
the only thing we need to do is to look up something in a database.
However, users expect that such applications
have a very high level of usability.
Now, our intuition tells us that it can be somehow related to the fact that we want
to get to the train schedule of the next train with a minimum number of keystrokes.
But a usability requirement expressed as the departure station should
be available with a minimum number of keystrokes is not specific enough
to reason about the impact on the system architecture.
What does that mean, minimum number of keystrokes?
Or how do I even test this?