Software Engineering for Industry

Module aims

This course is about working on large, existing, software systems. It focuses on tools, techniques, practices and principles that software engineers use on a daily basis to successfully build, modify, maintain and grow the large software systems that form so much of the infrastructure of trade, commerce, communication and entertainment in the modern world.

 

Learning outcomes

To be aware of discussion and issues related to each topic in the Syllabus, including the ability to do the following:

 
• To be aware of issues and topics that are current areas of discussion in the software engineering industry.
• To be able to source and review articles presenting work and opinions related to these issues - both academic papers and industrial case studies.
• To be able to discuss these, giving reasoned arguments and criticism
• To be aware of practical tools and techniques related to each topic, as used in industry
• To be able to apply this understanding to practical examples and relate it to projects, experience of internships, industrial examples etc
 
To be able to demonstrate the following skills
 
• To be able to investigate and give reasoned opinions on characteristics of a given legacy codebase
• To be able to find, review, critique and discuss related literature for a given software engineering topic
• To be able to apply critical thinking and present a reason argument discussing the technological and economic forces at play when making engineering decisions

Module syllabus

• Working with Legacy Code
• Seams and Sensing
• Software Architecure
• Viewpoints and Perspectives
• Software Evolution
• Microservices and architectural transformation
• Software repository mining
• Continuous Delivery
• Deployment Pipelines
• Testing and Quality Assurance
• Scaling and Resilience
• Circuit breakers

Pre-requisites

The contents of (302) Software Engineering Practice or equivalent experience.

Teaching methods

Reading, Writing, Practical and Discussion:

As a coursework-only course, the learning in this course is mostly self-directed. Each week will cover a different topic. We will give some suggested reading - but expect that students will also read other related articles etc that they find for themselves. We will also give them a practical exercise associated with each topic. There is a lab session each week where students can get help with these, or - more usefully - discuss their thoughts and ideas with the course tutors. 

They then need to write up a short summary of their thoughts on the week's topic, addressing a question that we will provide. Then, during the lecture slot on Tuesdays we will discuss the topic that the class has been researching, asking people from the class to briefly present their work and thoughts, and will discuss these as a class.

The topics covered in this class do not have right and wrong answers - software engineering is all about trade-offs - so bring your own thoughts and opinions about what would work in which situations, and why. Back up your thoughts with things you have read about, or experienced in projects, work placements etc.

Assessments

Weekly topics are worked on in groups of 2-3. The written work that groups submit each week is assessed. The total of these makes up approx 60% of the course marks.

There is a final coursework in groups of 2-3 that takes the place of the exam for this course, with a written submission. This makes up approx 40% of the marks.

*This is a level 7/M course

Reading list

Core

Module leaders

Dr Robert Chatley