1. What is a driver (during software testing)? What is a stub (during software testing)?  (2,5)

A driver is a small main program, designed to call a subroutine or function that you want to test.

A stub is a small (almost empty) subroutine, or function, that allows you to test the main program before the subroutine is written.

 2. Describe the linear-sequential model of software development.

 Perform each phases of software development only once, and begin each phase only when the previous phase is complete.

Phases can include: system analysis, requirements analysis, (or definition) design (or architecture), coding, testing, maintenance (or revision).

3. What are formal methods of software development?

 Attempts to produce software that is provably correct.

OK to mention mathematical methods.

4. Define requirements analysis.

 Designing the features of a software system. The analysis will tell us what the software should do.

OK to say that the result of requirements analysis is a document called a functional specification.

5. Describe the spiral model of software development.

The software process is repeated again and again, improving (expanding) the software each time.

OK to mention that a new version may begin before the previous version is finished.

6. List 3 of the differences between a software design that is “right” and a design that just works.  (1,3,5)

 Cleaner, simpler, more maintainable, easier to fix, easier to extend, scalable, smaller, form follows function, beautiful, matches the problem.

7. What is cohesion? (4) Do we want a lot or a little? (1)

The degree to which each module (or function or subroutine) relates to only one thing. We want a lot.

8. Name 3 reasons that software estimates are often wrong.  (1,3,5)

Scope creep, basing estimates on external deadlines, new problem domains (or new to this team), optimism (or assuming all will go well), want to get the job.

9. Name 3 advantages of using and maintaining a project tracking system, like Microsoft Project.  (1,3,5)

You know where the project really is (50% done versus 90% done), you can use resources efficiently (resource leveling), you can track planned progress versus actual progress, you can adjust your plan better when something changes or goes wrong.

10. What is coupling? (4) Do we want a lot or a little? (1)

The degree of dependence between modules (or functions to subroutines). We want a little.

11. What are boundary (or edge) conditions for testing? (3) Why is it important to test these conditions?  (2)

Boundary conditions are the extremes of input – largest value, lowest value, fast input, no input, huge file, zero length file.

Bugs often happen at boundary conditions?

12. What is regression testing?  

Testing software to verify that something, which used to work, still works correctly. Often performed after some new code or feature has been added, to make sure the new code didn’t break something that used to work.

 13. According to Ed Yourdon, what are 2 ways of handling “death march projects”?  (2,5)

Triage (do only what really must be done, and defer other features). Get something done quickly, so you can demonstrate a working program. Replace the manager with a new manager, who might be able to renegotiate the deadline or feature list. Document the project, to help avoid the problem in future projects.

14. Name 3 of the items counted in function point analysis.  (1,3,5)

User inputs, user outputs, user inquiries, files, external (device) interfaces, complexity, re-usability, performance.

15. According to Fred Brooks (Mythical Man Month), why does adding people to a late software project make it later?

Must train new programmers (which takes time from current programmers). More programmers means more communication paths for everyone, even after training. More pieces of the program means more interfaces between the program units, and that increases complexity.

16. Describe 2 separate Y2K problems.  (2,5)

Assuming that the century is 1900 and storing (or using) only 2 digits for the year.  Putting “magic numbers” in the year field – such as 99 or 00 to mean “end of file”. Not knowing that 2000 is a leap year. Hardware registers (or data types) that are too small to hold required dates (this may occur before or after Jan 1, 2000).

17. Define software engineering.

Producing high-quality software in an efficient, predictable manner.

Or

The application of sound engineering principles to software development.

18. What are the 3 phases of every software project?  (1,3,5)

Definition, development, maintenance (or repair, or revision).

19. Define system analysis (or system engineering).

Designing (or analyzing) an overall system (which is more than just computers) to solve a problem in an organization.

20. Name 3 advantages to an organization that operates at a high level of CMM “maturity” versus an organization at a lower level.  (1,3,5)

More accurate time estimates for projects, better software quality, building a history of data about their software development practices, continuous improvement, public recognition for being at a higher level, better response to crisis (can handle it in stride).