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.