Software engineering is defined as the application of systematic and quantifiable approaches to the development and maintenance of software. A disciplined approach is essential given the highly complex software required by business and consumers. In this course, students will learn the fundamentals of software engineering including software processes and requirements engineering, project management, design, testing, and maintenance. Emphasis will be placed on agile software engineering methods and learning through hands-on coding assignments throughout the semester. Team based exercises will be used to teach project management skills. Coding will be done in Java and Javascript, and will include exposure to many of the standard tools from industry.
By the end of the course the student will be expected to be able:
- to explain the software lifecycle and compare major process models such as waterfall and agile
- to demonstrate effective software development practices through participation in a medium-sized team project
- to show an awareness of and facility with a full range of software tools including version control, unit testing frameworks, and build tools
- to understand the use case model and to produce a software requirements specification
- to explain principles of object-oriented design and show understanding of software design patterns
- to describe the different levels of software testing (from unit to acceptance) and write test cases for non-trivial software modules
- to demonstrate an awareness of key ethical concerns relating to modern software systems