Advanced Computer Science: Multi-Core Computing [MSc]
Software Engineering Concepts in Practice
|Unit level:||Level 6|
|Teaching period(s):||Semester 1|
|Offered by||School of Computer Science|
|Available as a free choice unit?:||Y
A reasonable level of programmng skill (as expected of most ACS students)
At the conceptual level, students will get a systematic grasp of key topics including quality assurance and testing, software design and construction, and distinctive aspects of software development project management. By the end of the course, students will be able both to grasp the big picture of each topic and also have detailed understanding of select subtopics. Additionally, students will become acquainted with the relevant research literature.
At the experiential level, students will apply their conceptual understanding to working with a large, established, open source software project.
Overall, students will acquire an informed, practical knowledge of what it is to be a professional software engineer.
• Software engineering as a discipline
• Software design and architecture
• Software construction
• Quality assurance
• Software development project management
• Development methodologies
This is a course which gives students who didn't do a substantial amount of software engineering in their first degree an overview of the subject, with strong enphasis on sofware design and on teamwork.
Learning outcomes are detailed on the COMP61511 course unit syllabus page on the School of Computer Science's website for current students.
- Analytical skills
- Group/team working
- Project management
- Oral communication
- Problem solving
- Written communication
- Written exam - 50%
- Written assignment (inc essay) - 50%
Introduce Software Engineering, comparing and contrasting it with other Engineering disciplines. Explain the fundamental problem of requirements change, and the problems this causes for traditional software development processes. Introduce the Agile approach to software development, and some of the main characteristics of agile methods, e.g. continuous stakeholder involvement, iterative and incremental development and Physicality. The Agile UP will be used as an example of a traditonal process applied in an Agile way.
Explain (and advocate!) the Object Oriented approach to software development, particularly Responsibility Driven Design. Introduce a minimal subset of UML notation that covers most practical cases, and illustrate its use in requirements capture and software design. The GRASP (General Responsibility Assignment Software Patterns) principles will be used as the basis for discussing software design. These are also the underlying principles on which design patterns are based.
Explain the basics of software testing, in particular unit testing with JUnit. In this course a traditional approach to testing will be taken, where tests are typically written after the code to be tested, but by a different person. The alternative, Test-driven development, will be explored in the Agile course.
Discuss some of the wider context of software engineering, for example user and stakeholder considerations, standards, and the role of software, and software engineers, in large organisations.
COMP61511 reading list can be found on the School of Computer Science website for current students.
Weekly coursework will be collected via Blackboard, and feedback is provided through the same mechanism or directly in labs.
- Lectures - 20 hours
- Practical classes & workshops - 15 hours
- Independent study hours - 115 hours