Software Engineering I

My Software Engineering I course at Reykjavik University, Iceland, is publicly available on Youtube.

The course is intended to cover the following learning outcomes. However, keep in mind that the actual course at Reykjavik University includes practice sessions, a large group project, as well as a written exam. Therefore, following the Youtube videos only might not lead to all of the learning outcomes. The material covered in the YouTube videos can be downloaded as a slide deck here.

Knowledge and comprehension

  1. Contrast software engineering techniques required for different types of software systems.
  2. Discuss ethical issues arising in the context of modern software engineering projects.
  3. Explain what software engineering is and why it is needed.
  4. Illustrate the term stakeholder in relation to different types of software systems.
  5. Summarise different techniques for performing requirements validation.
  6. Discuss how system modeling can be used in different ways to address the needs of modern software systems.
  7. Discuss the need for systematic processes in software engineering.
  8. Compare plan-driven and agile processes in relation to different types of software systems.
  9. Explain several common agile practices.
  10. Discuss the issues of applying agile processes in large-scale and regulated environments.
  11. Explain the different stages and scopes of testing.
  12. Discuss different testing coverage criteria.
  13. Discuss how architectural decisions can affect different system qualities.
  14. Illustrate key architectural patterns.
  15. Explain key design patterns of object-oriented design.
  16. Contrast security and safety in the context of software systems.
  17. Summarise design guidelines to achieve security in software systems.
  18. Illustrate the key ideas of model-based engineering.
  19. Summarise recent trends in software engineering.

Application and analysis

  1. Classify different kinds of requirements needed in software engineering.
  2. Apply system modeling to provide an overview of a software system.
  3. Demonstrate understanding of different parts of the Scrum process.
  4. Conduct unit and system testing in a test-first matter.
  5. Make use of architectural styles/patterns to create a basic system architecture.

Synthesis and evaluation

  1. Formulate functional and quality requirements using different techniques.
  2. Adapt a process to the specific needs of a software system.
  3. Examine the role of human factors in the development of software systems.