Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Management Fundamentals
Organizations that attempt to put software-engineering discipline in place before putting project-management discipline in place are
doomed to fail.
Management fundamentals consist of (1) determining the size of the product (which includes functionality, complexity, and other
product characteristics), (2) allocating resources appropriate for a product of that size, (3) creating a plan for applying the resources,
and then (4) monitoring and directing the resources.
B. Planning
Best projects are characterized by strong up-front planning to define tasks and schedules.
Planning included these activities:
1. Estimation and scheduling
2. Determining how many people to have on the project team, what technical skills are needed, when to add people, and who
the people will be.
3. Deciding how to organize the team
4. Choosing which lifecycle model to use
5. Managing risk
6. Making strategic decisions such as how to control the product’s feature set and whether to buy or build pieces of the product.
C. Tracking
On a typical project, project management is almost a black-box function. You rarely know what’s going on during the project and you
just have to take whatever comes out at the end. On an ideal project you have 100 percent visibility at all times. On an efficient
project, you always have at least some visibility and you have good visibility more often than not. See p. 57 for graphs.
If you don’t track a project, you can’t manage it. You have no way of knowing whether your plans are being carried out and no way of
knowing what you should do next. You have no way of monitoring risk to you project. Effective tracking enables you to detect
schedule problems early, while there’s still time to do something about them.
D. Measurement
One key to long-term progress in a software organization is collecting metric data to analyze software quality and productivity.
2. Design
Fundamental topics
1. Major design style—such as object design, structured design, and data structure design
2. Foundational design concepts—such as information hiding, modularity, abstraction, encapsulation, cohesion, coupling,
hierarchy, inheritance, polymorphism, basic algorithms, and basic data structures
3. Stand design approaches to typically challenging areas—including exception handling, internationalization and
localization, portability, string storage, input/output, memory management, data storage, floating-point arithmetic,
database design, performance, and reuse
4. Design considerations unique to the application domain—such as financial, scientific, embedded systems, real-time
systems, and safety-critical software.
5. Architectural schemes—such as subsystem organization, layering
6. Use of design tools.
Design serves as the foundation for construction, project scheduling, project tracking, and project control.
3. Construction
Fundamentals
1. Coding practices—including variable and function naming, layout, and documentation
2. Data-related concepts --such as scope, persistence, and binding
3. Guidelines for using specific types of data—such as integer, floating-point, arrays …
4. Control-related concepts—including organizing strait-line code, using conditionals, controlling loops …
5. Assertions and other code-centered error-detection practices
6. Rules for packaging code into routines, modules, classes, and likes
7. Unit-testing and debugging practices
8. Integration strategies—such as incremental integration, big-bang integration, and evolutionary development
9. Code-tuning strategies and practices
10. The ins and outs of the particular programming language you’re using
11. Use of constructions tools—including environments, group work support, and code generators
B. Testing
The two basic kinds of execution testing are (1) units tests, in which the developer checks his or her own code to verify that it works
correctly, and (2) system tests, in which an independent tester checks to see whether the system operates as expected.
C. Technical Reviews
Used to detect defects in requirements, design, code, test cases, or other project artifacts.
1. Walkthroughs—refers to any meeting at which two or more developers review technical work with the purpose of
improving its quality. They are useful to rapid development because you can use them to detect defects well before
testing.
2. Code reading—the author of the code hands out source listing to two or more reviewers. The reviewers read the code and
report any errors to the author.
3. Inspections—are a kind of formal technical review that has been shown be extremely effective in detecting defects
throughout a project. Developers receive special training in inspections and play specific roles during the inspection:
moderator, reviewers, author, and scribe. May be up to 20 times more efficient than testing.
Technical reviews tend to find different kinds of errors than testing does. They find defects earlier than testing and are more cost
effective.