Software Analysis Techniques
Introduction
This document describes various techniques used during the analysis
phase of software development. More specifically, the techniques
described here grew out of experience in the multi-threaded event
driven embedded systems domain, but much of what is described is
applicable to software development in general.
Analysis is the process of understanding the problem that is to be
solved. In its most informal sense, analysis is what we do when we
think about the problem. Contrast this with design, which is thinking
about how to solve the problem. The more accurate our analysis of a
problem, the more likely we are to be able to design a solution that
actually solves the problem completely. Since all but the most trivial
problems are actually compond problems, it is all to easy to only solve
part of a problem correctly.
It is important to note that analysis is the process of
understanding the problem, not one of defining the problem. The
definition of the problem is established by requirements.
Requirements are rarely (if ever) complete when a new problem
(project) is started. Questions concerning specific requirements
inevitably arrise during analysis. Such questions should always be
answered by adding the new requirement to the appropriate documentation
with an explanation of the reason for the requirement.
When analysis gives rise to new requirements the waterfall model is
violated. Requirements for a new non-trivial problem are never
perfectly complete, and thus the waterfall model of development does
not reflect the reality of the development cycle. The two stages are
dependent upon one another, and the acknowledgement of this
relationship is the basis of the iterative development model.
The output of an analysis is a document that describes the problem
to be solved in a way that can be easily referenced
Establish Problem Boundaries
Identifying System Interfaces
- Direction
- Input
- Button
- Microphone
- UART RXD
- Temperature
- Output
-
Characterizing Interfaces
- Periodic
- Microphone voice samples
- Telecom Performance Monitoring Information
- Aperiodic
- UART Receiver Interrupt
- Telecom Alarms
- Incomming Telephone Call Notification
- Security Alert Notification
- Request/Response
- Command Line User Interface
- Configuration/Status Interface
- Control/Status Registers
Periodic interface, as the name implies, require that information is
transferred across the interface at regular intervals during normal
operation. The direction of the transfer may be either an input or an
output. Many real-time problems require that inputs be sampled with a
minimum frequency, and the outputs updated at a related frequency. The
deadline is directly related to these frequencies in that the
processing between input and output must not take any longer than the
period of the highest frequency.
Aperiodic interfaces are characterized by sporadic behavior with
respect to the transfer of information across the interface. That is to
say that information is not transferred across the interface at regular
intervals, but rather as the information becomes available. General
data communications interfaces are good examples of this type of
interface. While data may only cross the interface at a maximum rate
determined by the communications media, the arrival depends upon the
types of applications that exist on the data communications channel.
Request/Response interfaces are typified by a client sending of a
request to a server, and the server subsequently returning a response
when the request is completed. Almost all procedural sub-routine calls
can be characterized as request/response interfaces.
Identify Problem Domain Objects
- Purpose/Roles
- Number of Instances
- Lifecycle
- Collaborators
Identify Relationships Between Objects
- Cardinality
- One to One
- One to One or More
- One to One or Up to N
- One to Many
- One to N
- One to Zero or More
- etc.
- Relation
- One per direction
- Is-A
- Has-A
- Uses
- Creates
- Destroys
- Client-Server Direction
Here is a list of activities that are typically performed during the
analysis phase.
- Identify the problem scope by identifying all interfaces.
- Characterize the interfaces.
- Identify problem domain objects.
- Characterize the roles of the problem domain objects.
- Identify relationships between the problem domain objects.
- Classify data flows at interfaces and intra-faces.
- Behavior
- Periodic
- Aperiodic
- Command-Response
- Delivery Requirements
- Exactly once
- Flow Control
- Message Allocation/Reclamation
- At-Least-Once
- At-Most-Once
- Throughput
- Frequency
- Lather, rinse, repeat.
mike@mnmoran.org