- 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 difference between functional and non-functional requirements and give examples
- Be able to describe the software qualities and give examples including possible metrics (correctness, reliability, robustness, maintainability, usability, portability, verifiability etc.)
- Describe the emphasis of a requirements document (what , not how)
- Describe the major qualities of a requirements document (complete, consistent)
- Describe the notion of a software process and why it is needed
- Describe the major steps of a waterfall software development process
- 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
- Be able to explain what OO programming means (e.g. by Stroustrup)
- Be able to describe the 3 main principles of OO programming
- Why is it important to specify and analyze a software design before implementation (especially for large software systems) ?
- Give a definition of software architecture by Perry&Wolf
- 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 list of major software analysis methods