- Describe the notion of software as it is understood in SE
- Describe a definition of software engineering
- Describe goals of software engineering
- Be able to describe the peculiar properties of software based on the "No Silver Bullet" (NSB) paper (complexity, conformity, changeability, invisibility)
- Be able to describe the difference between essential and accidental properties of software (NSB)
- Give an example of a solution to a software development problem and describe why it is not a silver bullet (e.g. object-oriented design)
- Be able to describe the software qualities and give examples including possible metrics (correctness, reliability, robustness, maintainability, usability, portability, verifiability etc.)
- Describe the major steps of a waterfall software development process
- In particular, be able to describe the details of the maintenance step
- Describe the kinds of programs (S-Programs, P-programs etc.) and their likelihood to undergo change according to the paper by Lehman [pdf]
- Describe the laws of the software evolution according to the paper by Lehman [pdf]
- Describe the definition of an agile software development process (conclusion from the paper by Pekka Abrahamsson)
- Be able to pinpoint advantages and disadvantages of XP
- Give a definition of software architecture by Perry&Wolf [pdf]
- Describe layered and event-based software architectures by Garlan&Shaw [pdf]
- Describe Model-View-Controller architecture and know its main benefits by the MVC paper by John Hunt and the MVC diagram on canvas [pdf]
- Describe how software erosion during maintenance can remove the benefits given by an architecture and reduce maintainability based on Linux case study and MVC event-based notification [pdf] and class notes (remember that a major benefit of the layered architecture is security and event-based notification in MVC is an ability to modify/change the view without touching the model)
Be able to describe how a tool such as ArchJava can help improve maintenability and reduce software architecture erosion [pdf]
- Know the Cleanroom process description (diagram in Fig. 2) [pdf]
- Know the Cleanroom formal design (3 stages: black box, state box, clear box: pp. 7-8) and verification process (pp. 9-10)
- Know the Cleanroom statistical testing approach process (4 items on p. 11), testcase generation process (pp. 11-12, Fig. 7)
- Know the summary of design hints from the paper "Hints for computer system design" by Butler Lampson (Fig. 1)
- Know the problem of regression testing
- Be able to describe the importance of regression testing for maintenance
- Know the 4 major approaches to regression testing
- Be able to use a tool such as JUnit for regression testing
- Be able to use a version control system such as GIT for software maintenance
- Know the definitions introduced in the paper on Version control systems by Reidar Conradi [pdf]: version space, product space, version, version item, delta, symmetric delta, directed delta, extensional versioning, intensional versioning
- Know the intents of evolution: revisions, variants, cooperation: section 3.3 of the paper by Conradi
- Know the representations of the version space: version graph and grid and be able to give examples from Conradi paper (section 3.4 in Conradi paper)
- Know state-based and change-based versioning and their kinds (section 3.5 in Conradi paper)
- Know the kinds of merging tools: raw merging, two-way merging, three-way merging, textual merging, syntactic merging, semantic merging, operation-based merging