Midterm Study Guide

1. What are the main activities involved in software construction?
2. Why are metaphors used in software design and development?
3. What are some common metaphors of good software development processes?
4. What are some common metaphors of bad software development processes?
5. What is the difference between a heuristic and an algorithm?
6. Why is it important to carefully consider the prerequisites of a software system before you build it?
7. What are the three major classes of software, and how does the system class impact practices used in building each type
8. What is a cylinder? What is its significance with respect to performance?
9. What is a problem definition, and why is it important?
10. What are system requirements? Why is it so hard to have stable requirements? What can you do to minimize the impact of requirement changes midstream?
11. What are the major components of system architecture? What is the meaning of each of the following with respect to system architecture?
a. Program organization
b. Data Design
c. Major Classes
d. Business Rules
e. User Interface
f. Resource Management
g. Security
h. Performance
i. Interoperability
j. Input/Output
k. Over-engineering
l. Buy vs. Build
12. What are the key design decisions that must be made?
13. What is a programming convention, and why is it important?
14. What are the components of a major construction practices. What is the significance of each?
15. What is the meaning of each of the following design challenges?
a. Design is a wicked problem
b. Design is a sloppy process
c. Design is about trade-offs and priorities
d. Design involves restrictions
e. Design is a heuristic process
f. Design is emergent
16. What is the reason that managing complexity is so center to good software design?
17. What are the main desirable characteristics of design, and what do they mean?
18. What are the 5 levels of design, and what is the significance of each?
19. What are the major heuristics of the design process? What does each mean?
a. Find real world objects
b. Form consistent abstractions
c. Encapsulate Implementation details
d. Inherit when this makes things simpler
e. Hide secrets
f. Identify areas likely to change
g. Keep Coupling Loose
h. Look for common design patterns
20. Explain each of the following deign practices:
a. Iterate
b. Divide and Conquer
c. Top-down and Bottom up
d. Experimental Prototyping
e. Collaborative design
21. What is an ADT, what why is it good to use?
22. Be able to recognize and critique a good and bad class abstraction.
23. What is the meaning of “containment” and “Inheritance” in classes?
24. What is polymorphism?
25. Why is it good to protect the internal variables of a class?
26. What are the reasons to create a class?
27. Recognize the things wrong with a low quality routine.
28. What are the reasons to create a routine?
29. What are the types of cohesion? What are better, which are worse? Why?
30. What are good rules for naming routines?
31. What order should parameters be put in? How should they be documented?
32. What is a macro, and why use it instead of a routine?
33. What are Asserts, and why use them?
34. Why should you protect the inputs of a routine?
35. What are the strategies for handling bad input to a routine?
36. What is an exception, and what are the ways to deal with it?
Topic revision: r1 - 2013-03-26 - JimSkon
 
This site is powered by the TWiki collaboration platformCopyright &© by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback