CS121 Midterm Exam

Spring 2010




This is a take-home closed-book and closed-note exam. You are allowed one hour and fifteem minutes from the time you first view the exam until the time you complete the exam. Please email me an electronic version of your solutions in a text file or a word document. Include your name and the date/time when you started and finished the exam. Each question is worth 10 points. Keep your answers brief and to the point.

  1. Define the waterfall process. What are its drawbacks? For what types of projects is this approach best?

  2. What are the main characteristic of agile methods? For what types of projects is an agile approach best?

  3. What is the purpose of a use case? What are its key components? What is one shortcoming of use cases?

  4. Describe the types of requirements denoted by FURPS+. Give an example for each type.

  5. Describe two types of UML diagrams and when/why each is used.

  6. We've discussed and read about many characteristics of good UI design. If you had to choose three as most important what would they be? Support your choices.

  7. What is the single responsibility principle? How does using this principle improve software design?

  8. I am building a 3D miniature golf game. Following is the initial design related to the golf ball class. Discuss the use of inheritance and composition in this design and how my choices support or violate good design principles/heuristics. (I intend to add other types of shapes to model the course.)



  9. The rest of the 3D world in my miniature golf game will be built out of immobile triangles. When the ball moves I need to detect collisions with the triangles. Should collision detection be a responsibility of the ball class, the sphere class, the triangle class, or some other class? Support your answer in terms of good design principles/heuristics.

  10. I am thinking about making the sphere’s position public so that the ball can reset it whenever the ball (and thus the sphere) moves. Why is this a bad idea? Do you have a better suggestion?