Previous Section
 < Free Open Study > 
Next Section


Exercises

  1. Explain what we mean by "software engineering."

  2. Which of these statements is always true?

    1. All of the program requirements must be completely defined before design begins.

    2. All of the program design must be complete before any coding begins.

    3. All of the coding must be complete before any testing can begin.

    4. Different development activities often take place concurrently, overlapping in the software life cycle.

  3. Name three computer hardware tools that you have used.

  4. Name two software tools that you have used in developing computer programs.

  5. Explain what we mean by "ideaware."

  6. Explain why software might need to be modified

    1. in the design phase.

    2. in the coding phase.

    3. in the testing phase.

    4. in the maintenance phase.

  7. Goal 4 says, "Quality software is completed on time and within budget."

    1. Explain some of the consequences of not meeting this goal for a student preparing a class programming assignment.

    2. Explain some of the consequences of not meeting this goal for a team developing a highly competitive new software product.

    3. Explain some of the consequences of not meeting this goal for a programmer who is developing the user interface (the screen input/output) for a spacecraft launch system.

  8. For each of the following, describe at least two different abstractions for different viewers (see Figure 1.1).

    1. A dress

    2. An aspirin

    3. A carrot

    4. A key

    5. A saxophone

    6. A piece of wood

  9. Functional decomposition is based on a hierarchy of ____________, and object-oriented design is based on a hierarchy of ____________.

  10. What is the difference between an object and an object class? Give some examples.

  11. Make a list of potential objects from the description of the automated teller machine scenario given in this chapter.

  12. Have you ever written a programming assignment with an error in the specifications? If so, at what point did you catch the error? How damaging was the error to your design and code?

  13. Explain why the cost of fixing an error is higher the later in the software cycle that the error is detected.

  14. Explain how an expert understanding of your programming language can reduce the amount of time you spend debugging.

  15. Give an example of a run-time error that might occur as the result of a programmer's making too many assumptions.

  16. Define "robustness." How can programmers make their programs more robust by taking a defensive approach?

  17. The following program has three separate errors, each of which would cause an infinite loop. As a member of the inspection team, you could save the programmer a lot of testing time by finding the errors during the inspection. Can you help?

    void Increment(int);
    int main()
    {
      int count = 1;
      while(count < 10)
      cout  << " The number after "  << count; /* Function Increment
      Increment(count);             adds 1 to count */
      cout  << " is " << count << end1;
      return 0;
    }
    void Increment (int nextNumber)
    // Increment the parameter by 1.
    {
      nextNumber++;
    }
    
  18. Is there any way a single programmer (for example, a student working alone on a programming assignment) can benefit from some of the ideas behind the inspection process?

  19. When is it appropriate to start planning a program's testing?

    1. During design or even earlier

    2. While coding

    3. As soon as the coding is complete

  20. Differentiate between unit testing and integration testing.

  21. Explain the advantages and disadvantages of the following debugging techniques:

    1. Inserting output statements that may be turned off by commenting them out

    2. Using a Boolean flag to turn debugging output statements on or off

    3. Using a system debugger

  22. Describe a realistic goal-oriented approach to data-coverage testing of the function specified below:

  23. A program is to read in a numeric score (0 to 100) and display an appropriate letter grade (A, B, C, D, or F).

    1. What is the functional domain of this program?

    2. Is exhaustive data coverage possible for this program?

    3. Devise a test plan for this program.

  24. Explain how paths and branches relate to code coverage in testing. Can we attempt 100% path coverage?

  25. Differentiate between "top-down" and "bottom-up" integration testing.

  26. Explain the phrase "life-cycle verification."

  27. Write the corrected version of the function Divide.

  28. Why did we type cast dividend and divisor in the function Divide?

  29. The solution to the Case Study did not consider negative fractions.

    1. How should a negative fraction be represented?

    2. Which of the member functions would have to be changed to represent negative fractions? What changes would be involved?

    3. Rewrite the test plan to test for negative fractions.

  30. One of the member functions in the Case Study needed an additional test. Which function is it and what should the data be?



Previous Section
 < Free Open Study > 
Next Section
Converted from CHM to HTML with chm2web Pro 2.85 (unicode)