Final Review

You should carefully study the book and my classnotes. The following are some, but not all, of the important topics. Always study my classnotes first, then the following important topics, then the whole book.

Before the midterm we covered the following five chapters. They will still be included in the scope of the final exam, but only about 30% of the questions will be on the first five chapters.

Chapter 1: Why Software Engineering
C1.6 An Engineering approach, C1.7 Development team, C1.8 How has software engineering changed?

Chapter 2: Modeling the Process and Life Cycle
C2.2 Software Process models (Fig 2.1 waterfall, 2.3 waterfall with prototyping, 2.5 prototyping model, 2.7 transformational model, 2.9 incremental model, 2.10 spiral model) You must know all software lifecycle models, why do we use a particular model, the pros and cons. Extreme Programming (task, pair programming,client representative, agile methods)

Chapter 3: Planning and Managing the Project
C3.1 Tracking progress (schedule, milestone, activity graph Fig 3.1) C3.2 Personnel (Fig. 3.9 communication paths on a project, project organization) C3.3 Effort estimation (COCOMO constructive cost model) C3.4 Risk managemnet (what is risk? How to deal with it?) C3.5 Project plan (what is it? why do we need it?)

Chapter 4: Capturing the requirements
C4.5 Modeling notations (this is the heart of this chapter) ER diagrams, UML diagrams, Petri nets, Data flow diagrams, Use cases, Decision tables

Chapter 5: Designing the system
5.1 What is design? 5.2 Decomposition and modularity 5.5 Characteristics of good design (this section is important. Notions of coupling, Fig. 5.13 range of coubpling, Fig. 5.14 content coupling, Fig 5.15 common coupling. Notion of cohesion, Fig 5.16 types of cohesion)

After the midterm we covered the following four chapters. Chapters 6 and 8 are well written and require your careful study.

Chapter 6: Considering Objects
C6.1 What is OO? C6.3 Use cases (Figures 6.5 to 6.8 present a complete example) C6.4 Representing OO using UML (Fig. 6.9 explains how UML supports the development process) C6.5 OO System design (This section is the core!) (Fig 6.10 class, Fig. 6.15 - 6.17 design of class diagrams, Fig. 6.21 - 6.23 state diagrams, Fig. 6.24 - 6.25 activity diagrams) C6.8 information system example (Fig. 6.36 data flow diagram)

Chapter 8: Testing the Programs C8.1 Software faults and failures (Fig. 8.3 explains the testing steps) C8.3 Unit testing (Proving program correct, formal proof techniques pp. 380-382) Fig. 8.6 and pp. 387 explains relative strengths of test strategies: what are statement testing, branch testing, path testing etc.? C8.4 Integration testing (top down, bottom up, mixed, comparison) C8.6 Test Planning (Purpose pp. 400-401, content pp. 401)

Chapter 9: Testing the System C9.1 Principles of system testing (what are function testing, performance testing, acceptance testing, installation testing? See pp. 418-421) What is configuration management? Versions and releases (see pp. 423-424) How is a test team organized? (pp. 429-430) C9.2 function testing C9.3 performance testing C9.5 Acceptance testing C9.6 Installation testing C9.8 Test documentation (test plan pp. 452, Fig. 9.10 documents produced during testing pp. 453)

Chapter 11: Maintaining the System Laws of software evolution (see pp. 505) C11.2 Nature of maintenance (what are corrective maintenance, adaptive maintenance, perfective maintenance and preventive maintenance? pp. 507-508)