CIS 422/522 - Spring, 2006 - A.Hornof
Good Final Exam Questions

You should be familiar with everything that was presented in lectures, on the midterm, and covered in chapters 1-3, 5, 8-13, 16. (Chapters and page numbers refer to van Vliet, 2000.) The following questions relate to the main points of each chapter and some of the more important topics in each chapter. You should be able to relate all of these concepts to real-world examples.

Chapter 1 - Introduction

What is software engineering? Why is it important to Computer Science? What are problems that software engineering tries to prevent, and how does it try to prevent them? Include both major catastrophic problems, and less catastrophic but more common problems.

How is software engineering similar to, and different from, other engineering disciplines?

What are the major phases, or activities, in a software engineering project? Draw a relationship between any two phases. In other words, given any two phases, explain how each directly affects the other.

Explain this paradox: "The last 10% of the project takes 90% of the time."

"There is no silver bullet." Explain.

Chapter 2 - Software Engineering Management

Explain this statement: "Plans are nothing. Planning is everything." The idea is that a written schedule and allocation of resources is not useful if it is not updated to reflect how time and other resources are spent, and the new status of resources available and spent, time elapsed, work remaining, and new work that had not been anticipated. Explain why this is the case, and draw from specific examples in one or both of your projects this term.

What are six reasons that software is delivered late?

What is the primary communication goal of a project plan? What do you think are the three most important components? Justify your answer, drawing from specific examples in one or both of your projects this term.

Chapter 3 - The Software Life Cycle

Why are software life cycle models called "models"? What are they a "model" of? Note that you will have to define "model" as part of this answer.

Describe and define each of the following models. What are the strengths and weaknesses of each? Describe a specific system or specific project circumstance in which each model would be particularly good to follow, and a system or circumstance in which each would be particularly bad to follow: (a) Waterfall, (b) Prototyping, (c) Incremental development, (d) RAD, (e) Spiral.

How does the spiral model subsume prototyping, incremental development, and the waterfall model? (p.70)

Software maintenance increases system entropy. Discuss possible ways to counteract this effect. (p.71)

Chapter 5 - People Management and Team Organization

Briefly describe and provide a specific example of each of the following coordination mechanisms: (a) Simple structure, (b) Machine bureaucracy, (c) Divisionalized form, (d) Professional bureaucracy, (e) Adhocracy. In one sentence for each, explain how this class adhered in some form or another to each of the mechanisms. If it helps, consider that one of the "deliverables" in the class is your increased knowledge of software engineering, and that this "product" is not directly delivered to me but rather achieved and delivered to each of you independently while you worked in your groups.

Describe and define the following team organizations: (a) Hierarchical, (b) Matrix, (c) Chief Programmer Team. Describe a specific situation in which each organization would be particularly effective, and one in which each would be particularly ineffective.

Why might a client want to have a copy of the hierarchical organization chart, or "org chart", for a firm that is building a piece of software for the client?

Good programmers often get moved up the "org chart". Why might this be a bad idea?

What are some ways to counteract the destructive outcome of the Peter and Paul Principles? (If this question is asked on the exam, the principles will be stated for you. Though the concepts are well-known, I have not heard this terminology used in practice.)

Chapter 8 - Project Planning and Control

Explain why software engineering can be thought of as the practice of gaining control over a software development project. Include examples of the entities that need to be controlled, and techniques for controlling each entity.

What is a PERT chart and what is a Gantt chart? What is the purpose of each? For what sort of information is each one better suited?

Chapter 9 - Requirements Engineering

What is requirements engineering? How is it different from design?

What are the three main processes in requirements engineering? What is the purpose of each?

What is an SRS? What, in your opinion, are the three most important sections to include in an SRS? Explain.

Describe the following requirements elicitation techniques: Interview, Delphi technique, Brainstorming session, Task analysis, Scenario (Use-Case) Analysis, Ethnography, Form analysis, and Prototyping. What are the strengths and weakness of each? Give an example of a system or circumstances in which each would each be particularly appropriate and useful.

Sometimes you can elicit requirements by simply asking users about the task and the system. What might be a better approach than asking? Explain.

What is the difference between functional and non-functional requirements? Start by defining each. Give an example of each. Why is it useful to separate them in a requirements document?

Why is it important for requirements to be objectively verifiable? Give a specific example of an objectively-verifiable specification for each of the following qualities: Correctness, Reliability, Efficiency, Integrity, Usability, Maintainability, Testability, Portability, Reusability. You may need to read a little of Chapter 6, around p.111, if you don't fully understand what each quality is.

What is a stakeholder? Who are all of the stakeholders, for example, in the development of the software that runs a bank's ATM (automated teller machine)?

Chapter 10 - Software Architecture

What is software architecture? (Don't use the word "software" in your definition.)

What is the purpose of software architecture?

What are two views of the system that are often included when describing a software architecture?

What are software design patterns? Give an example of one.

Describe a software architecture (that is not MVC) that would be useful for a variety of real-world systems: A library book check-in and check-out system. The International Space Station internal climate control system. A fast-paced network-based interactive game. Explain why each architecture is particularly useful for each system.

How does software architecture help stakeholders to comprehend a system?

Chapter 11 - Software Design

What is an SDS? What, in your opinion, are the three most important sections to include in an SDS? Why?

Explain how software design is both a process and a result.

Why is software design a "wicked problem."

Explain why design is by necessity iterative. Give examples of an iterative design process from one of your projects. Don't just discuss the decision to use one particular technology over another, but the design of some aspect of the software code.

Define each of the following terms and explain how each concept is relevant to the design process: information hiding, abstraction, encapsulation, inheritance, polymorphism.

What is modular design? What are the benefits of modular design?

What is functional decomposition? Give a specific example of how you applied it in one of your projects?

Chapter 12 - Object-Oriented Analysis and Design

Explain the benefits of object-oriented design and programming in the context of the benefits of modular programming.

Without drawing them, explain what information is conveyed by class diagrams, state diagrams, and interaction diagrams. What is the purpose of each type of diagram in the context of design and analysis?

Sketch out a class diagram, state diagram, and interaction diagram for an ATM, and the operation of loading the machine with cash. Include 3-6 nodes or entities in each diagram. Provide a key, or annotate each diagram, to explain all information that is conveyed.

Given a problem statement, such as the one on p.372, where would you start to figure out what classes to include in your system, and where would you start to figure out what methods to include in your system?

Provide an example of a problem to solve (system to build) that would be better-suited for OO design, and a problem that would be better-suited for a data flow design.

Chapter 13 - Software Testing 

Give a specific example of a different software test that can be applied at each phase in the development of a software system.

What is black-box testing and what is white-box testing? When is each more appropriate? Give a specific example of each that you used in Projects 1 or 2

What is equivalence partition testing? (This is from lecture.)

Explain how stubs and drivers can be used to ease the pain of integration.

A system has three modules (A, B, and C) that will interact with each other but are developed independently. Each is built by a different programmer. Each programmer works with stubs or drivers that simulate the other modules during development. Who should build the stubs and drivers for module A? Why? How will this affect integration testing?

Chapter 16 - User Interface Design

What is the relationship between software engineering and user interface design and analysis?

For each phase in a software engineering life cycle, identify a specific, distinct task that could be accomplished to contribute to the usability of the system being constructed.

What is HTA? How is it useful to the design of computer interfaces, and to software engineering in general?

What is the ultimate test of the usability of a computer system?

What are the benefits and drawbacks of empirical vs. analytical usability analysis techniques?

Give a specific example of an empirical usability analysis technique, and an analytical usability analysis technique. Explain very briefly how to use each technique.

Give a specific example of an inspection-based analytical usability analysis technique, and a model-based analytical usability analysis technique. Explain very briefly how to use each technique. What is one strength and one drawback of each?

What is the "think aloud" technique? When would you want to use it?

"Computers will be easier to use when you can just talk to them." Explain the problem with this statement in the context of the flow of information and control, and the decision-making process that people undertake when using a computer.