Spring 2003 Software Engineering Qualifier
Answer six of the nine following questions. For all answers provide
citations of relevant literature sufficient to identify the source.
1. Characterize the kinds of situations in which the Visitor design
pattern might prove useful. Use examples to illustrate alternatives to using
Visitor? What are the advantages and disadvantages of this pattern as an
extensibility mechanism? Show skeletal code that implements the Visitor
pattern using overloading in a language that supports it (e.g. C++, Java,
C#).
2. For decades, software engineers have tried to identify common pieces
of software, express them in a reusable form, and provide support for identifying
the reusable component that is appropriate in a particular situation. What
are the difficulties in implementing an effective software reuse process?
In particular, what are considered some of the standard dilemmas (or opposite
tendencies) in software reusability? Give specific examples (e.g. languages,
libraries, systems, etc.) for each one. What do you think would be
a promising approach or technology for software reuse in the future? How
would your approach overcome the difficulties you described?
3. Data-flow analyses are required for many software-engineering tasks.
a. Define monotone data-flow frameworks for
1) Reaching definitions
2) Reachable uses
(For each framework, be explicit in defining the GEN and KILL sets, their
initial values, the direction of the flow, the confluence operator, and the
transformation functions).
b. Prove that the algorithm defined by the reaching-definitions framework
converges.
c. One requirement for rapid convergence of a data-flow algorithm is the
ordering of the visitation of the nodes (basic blocks). How would you determine
an ordering of visitation of the nodes for the reaching-definitions framework
for such convergence? In the reachable-uses framework?
d. Describe two ways that data-flow information can be used for software-engineering
tasks.
4. Testing at the integration level is becoming increasingly important
because of the widespread use of components. The ideal situation would be
for developers of components to individually test their components and for
application developers to test their applications without retesting the components
they use.
a. Suppose that the component developer guarantees that it has provided coverage
of component C according to some adequacy criterion—such as branch-coverage—before
release. If the application developer creates a test suite T that provides
branch coverage of the application, can he/she be guaranteed that T will
also provide branch coverage of C? Justify your answer.
b. Perry and Kaiser describe the problems with adequacy for object-oriented
programs in their paper "Adequate Testing and Object-Oriented Programming”.
They discuss the problems for general object-oriented programming languages,
and the problems may not exist for all object-oriented languages. Select
three of the issues they raise, and discuss whether they apply to Java programs.
5. In your work on debugging aids, you claim there is a relationship
between coverage data and fault location. Given that this is correct, the
question arises about the effects that your tools might have on the software
development process. One of the things we want to achieve in software engineering
is an ability to continually improving the processes we employ.
a. If we rely on your tool/method for localization, how can the information
it produces be used for process improvement?
b. How would you evaluate the productivity improvement that results from
the use of your tool and compare it to other methods, such as slicing?
c. The majority of software development errors in systems are due to requirements
and design problems. Given that your tool helps locate faults and the majority
of them didn't occur due to plain old coding errors but due to requirements
or design errors carried into the code, how can a person use those results
to help localize the root cause of the faults? This is not just a trace ability
question, since the goal is to improve the process not just state that such
and such erroneous requirement manifested itself as a fault.
The next two questions concern the following system. The purpose of the system
is to control the temperature in a single room of a house. The room (and
the house) is poorly insulated, so, over time, it will cool until its temperature
reaches that of the outdoors (0 degrees). The temperature inside the room
is measured by a thermometer. The user of the system can set the desired
room temperature, (between 50 and 80 degrees). The desired temperature is
compared against the measured temperature in the room, and if it is more
than 5 degrees above, the heater is turned on (if it isn't on already). If
the desired temperature is more than 3 degrees below the measured temperature,
then the heater is turned off (if necessary). The temperature inside the
room can be increased by a furnace. The furnace is capable of heating air
to a temperature of 80 degrees. When the furnace is off, it loses heat at
the rate of one degree per minute, with a minimum of zero. When it is turned
on, it increases its temperature at the rate of ten degrees per minute. The
furnace is either on or off. When the furnace is running it supplies
air to the room at its current temperature.
6. Provide a top-level, model-based design of this system, using either
VDM or Z. Syntax is not important, but correct modeling is. Your design should
include data structures and functions sufficient to represent the details
described above. Semantics should be provided in the form of invariant properties
and pre/post conditions. Include annotations to describe your model.
7. Provide a top-level, UML design of this system, using whatever types
of diagrams you think appropriate to this problem. Syntax of the notation
is not important, but correct modeling is. Your design should describe both
static structure and behavior sufficient to represent the details described
above. Semantics should be provided in the form of (natural language) invariant
properties and pre/post conditions. Include annotations to describe your
model.
8. Software engineering research has been criticized as having had
no effect on practicing software developers.
a. Give three examples of techniques or tools that are the result of software
engineering research, which have affected actual software development practice.
b. Justify that they have in fact made a difference to the practice of software
development.
c. Discuss why you think these three have managed to have an impact.
d. Give three examples of successful software engineering research techniques
or tools that have not had an appreciable impact on practice. Please pick
examples for which the reason is other than "there has not yet been enough
time."
e. Justify that these have been successful research techniques or tools.
f. Discuss why you think these three have not managed to have an impact.
g. Express your own opinion on the importance of "relevancy to software development
practice" as reason for a researcher to select a research area.
9. The Agile Development Manifesto proclaims the following four values:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to changes over following a plan
Based on these values, contrast agile methodologies (more broadly defined
than just Extreme Programming) with more traditional approaches. Based on
your discussion, suggest project characteristics that might make the use
of an agile methodology more or less appropriate.