COMP61511 Software Engineering Concepts in Practice syllabus 2017-2018
Software Engineering is a discipline concerned with all aspects of software production. The goal of software engineering is to produce successful software systems by means of successful software development projects. A software system is a system with a substantial software component that is deployed for users. A software development project is the process used to produce a software system. A system might be successful (e.g., meet all user requirements) while the project might not be (e.g., it came in over time and over budget).
The goal of successful systems from successful projects is not easily achieved and many software development projects fail in some way, or, indeed, many ways.
Professional software engineers need to have mastery of a certain body of knowledge and a certain set of skills and those skills should be informed by and inform that knowledge. This course presents an advanced core of software engineering at both a conceptual and at a experiential level.
This course is formed by the IEEE & ACM ACM 2009 Software Engineering Curriculum Recommendations <http://www.gswe2009.org>. In particular, it is designed to significantly advance the goal of “A student who has mastered the [Core Body of Knowledge (CBOK) will be able to develop a modest-sized software system of a few thousand lines of code from scratch, be able to modify a pre-existing large-scale software system exceeding 1,000,000 lines of code, and be able to integrate third- party components that are themselves thousands of lines of code. Development and modification include analysis, design, and verification, and should yield high- quality artefacts, including the final software product."
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
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.
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)
- Analytical skills
- Group/team working
- Project management
- Oral communication
- Problem solving
- Written communication
|Programme outcome||Unit learning outcomes||Assessment|
|A1 D1||A good grasp of the discipline of software engineering and how core concepts appear in practice.|
|A2 B2 B3 C1 C2||Able to assess technologies, systems, designs, and techniques for their suitability to a large scale software development task and act on those assessments to produce enhancements to large, complex software systems. Able to reflect on the relation between such assessments and the success of a project.|
|A3 C4||Familiar with some analytical and empirical methods for software development and for research on software engineering. Able to go to the relevant literature and assimilate new knowledge.|
|D1 D3 D5||Able to design, assess, enact, and participate in a large scale software development project.|
|Applying UML and patterns: an introduction to Object-Oriented analysis and design and iterative development (3rd edition)||Larman, Craig||0131489062||Prentice Hall||2004||✔|
Course unit materials
Links to course unit teaching materials can be found on the School of Computer Science website for current students.