In our initial definition of requirements engineering, we talked about
software systems. But what do we really mean when we
use the term software? Software is an abstract description of
a set of computations that becomes concrete, and therefore useful, only
when we run the software on some hardware, and that,
in the context of some human activity that it can
support. So what does that mean exactly? What that means
is that when we say software, what we really mean is
a software intensive system. That is, the combination
of 3 things, the software, the hardware on which
the software runs, and the context in which the
software is used. Just to illustrate, let me show
you this through a picture. What I'm showing here
is a customer, a user, that is using, is
accessing, an ATM machine. And this action involves several
things. There is the software that drives the logic
of the ATM machine. There is the hardware on
which the software runs. And there is the context
In which the software is used. And in this
case, the context is the bank. And only by
considering these 3 things together can we really understand
the functionality that is represented here. So the bottom
line here is that we usually take hardware and
context for granted in this equation. But they actually
need to be explicitly considered when building a
system. Otherwise, we might forget this is all
the functionality, and ultimately of the requirements. And
we might end up with the wrong system.