Goal orientation is an increasingly recognized paradigm
for eliciting, structuring, analyzing and documenting system
requirements. Goals are statements of intent ranging
from high-level, strategic concerns to low-level, technical
requirements on the software-to-be and assumptions on its
environment. Achieving goals require the cooperation of
agents such as software components, input/output devices
and human agents. The assignment of responsibilities for
goals to agents is a critical decision in the requirements
engineering process as alternative agent assignments
define alternative system proposals.
The paper describes a systematic technique to support the
process of refining goals, identifying agents, and exploring
alternative responsibility assignments. The underlying
principles are to refine goals until they are assignable to
single agents, and to assign a goal to an agent only if the
agent can realize the goal.
There are various reasons why a goal may not be realizable
by an agent, e.g., the goal may refer to variables that
are not monitorable or controllable by the agent. The
notion of goal realizability is first defined on formal
grounds; it provides a basis for identifying a complete taxonomy
of realizability problems. From this taxonomy we
systematically derive a catalog of tactics for refining goals
and identifying agents so as to resolve realizability problems.
Each tactics corresponds to the application of a formal
refinement pattern that relieves the specifier from
verifying the correctness of refinements in temporal logic.
Our techniques have been used in two case studies of significant
size; excerpts are shown to illustrate the main
ideas.