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. ???

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?

37. What is the Pseudocode Programming Process and why is it a useful tool?

38. Constructing classes and constructing routines tends to be an iterative process. What does this mean, and why is it the case?

39. Why is it a good practice to look over and review each others work?

40. What is the meaning and significance of each of the following in design?

a. Minimal complexity

c. Loose coupling

d. Extensibility

e. Reusability

f. High fan-in

g. Low-to-medium fan-out

h. Portability

i. Leanness

j. Stratification

41. Why and when should variables be initialized?

42. What is the “life” of a variable? Be able to compute it.

43. What does it mean to minimize the scope of a variable, and how can it be done?

44. What is variable persistence?

45. What is meant by variable binding time? What are some common binding times? Give examples of each.

46. What are the advantages/disadvantages of early binding verses late binding?

47. Why is it a good time to use each variable for one purpose only?

48. What is the MOST IMPORTANT variable naming consideration?

49. Why is it good to have a consistent naming policy? Give several reasons.

50. What does it mean to have a “problem oriented” variable name? What is the alternative?

51. With variables, what are some ways to do each of the following:

52. Differentiate between variable names and routine names

53. Differentiate between classes and objects

Topic revision: r2 - 2016-02-24 - 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