free hit counter

Tuesday, January 31, 2006

Software Design Questsion and answers

based on Humphrey's PSP book, chapter 10:

What is the purpose of conceptual design?
The purpose of conceptual design is to find the correct abstractions to use in solving the problem at hand, and those which will have appropriate scalability.

Given the notions from section 10.6 (Old book 10.2) on “Design Quality”, how might you use risk management to determine how much design to do?
The factors of number of users, expected number of developers, expected size of system, safety criticality, and business criticality can be used to help gauge how much design to do. The higher any of these factors the more design should be done.

According to section 10.4 (Old book 10.3), what is the key difference between a requirements definition and design specification?
requirements are a problem with no answer. Specifications assume there is an answer, and put boundry conditions and invariants on it.

What are the key decisions that are typically made during High-Level Design (HLD)?
During HLD, decisions about how much and what to reuse, what new stuff to make reusable, and broad architecture decisions are made in the context of schedule, development cost, and product content

Why are abstractions needed in software development?
Software needs abstractions becuase it has few physical laws or constraints

Why is detailed design important for large, safety-critical systems? Should you do detailed design for small, non-critical programs?
detailed design is necessary for large safety critical systems because design is the best way to make sure that these systems are safe and can be constructed on time and on budget. Design is important for small systems b/c it makes for more reliable, secure programs, and helps in estimation.

7. Question: Why are implementation-level design decisions and changes common in complex software?

What are a few potential approaches or strategies for dealing with large scale development?
I think prototyping during design is one of the most effective strategies for dealing with large scale development as it sheds light on previously unknown elemnts early. A complementry devleopment strategy is functional enhancement- where you start with something that works, and you add features one at a time, verifying each works and does not break the system.

Why should the development strategy be defined explicitly?
The development strategy should be explicitly stated to keep all stakeholders expectations in sync.


Post a Comment

<< Home