The primary role of a software engineer is to be able to design, build and test, high-quality software solutions following best practices and industry standards. You will typically be working as part of a larger collaborative team, in which you will have responsibility for significant elements of the overall project. You will need to be able to interpret requirements specification documentation and designs in order to develop and test software that meets its requirements, even when these requirements may change.
Pre-requisite: ECM3432DA Software Engineering 1
The aim of this module is to further develop your knowledge, understanding and skill in software development and the practice of software engineering in an organisational context. You should be able to create effective and secure software solutions using contemporary software development languages and methodologies to deliver the full range of functional and non-functional requirements.
INTENDED LEARNING OUTCOMES (ILOs) (see assessment section below for how ILOs will be assessed)
On successful completion of this module you should be able to:
Module Specific Skills and Knowledge
1. Create effective and secure software solutions using contemporary software development languages to deliver the full range of functional and non-functional requirements using relevant development methodologies.
2. Undertake analysis and design to create artefacts such as use cases to produce robust software designs.
3. Produce high quality code with sound syntax in at least one language following best practices and standards.
4. Perform code reviews, debugging and refactoring to improve code quality and efficiency.
5. Test code to ensure that the functional and non-functional requirements have been met.
6. Deliver software solutions using industry standard build processes, and tools for configuration management, version control and software build, release and deployment into enterprise environments.
7. Work collaboratively and professionally with others in cross functional teams.
8. Apply secure and robust development principles to ensure software resilience.
Discipline Specific Skills and Knowledge
9. Understand how to operate at all stages of the software development life cycle and how each stage is applied in a range of contexts. For example, requirements analysis, design, development, testing, implementation.
10. Understand the principles of a range of development techniques, for each stage of the software development cycle that produce artefacts and the contexts in which they can be applied. For example, UML, unit testing, programming, debugging, frameworks, architectures.
11. Understand the principles of a range of development methods and approaches and the contexts in which they can be applied. For example, Scrum, Extreme Programming, Waterfall, Prince2, TDD.
12. Understand how to interpret and implement a design, compliant with functional, non-functional and security requirements including principles and approaches to addressing legacy software development issues from a technical and socio-technical perspective. For example, architectures, languages, operating systems, hardware, business change.
13. Understand the factors affecting product quality and approaches for how to control them throughout the development process. For example, security, code quality, coding standards.
14. Identify and define software engineering problems that are non-routine and incompletely specified.
15. Implement software engineering projects using appropriate software engineering methods, approaches and techniques.
16. Respond to changing priorities and problems arising within software engineering projects by making revised recommendations, and adapting plans as necessary, to fit the scenario being investigated.
17. Determine, refine, adapt and use appropriate software engineering methods, approaches and techniques to evaluate software engineering project outcomes.
18. Extend and update software development knowledge with evidence from professional and academic sources by undertaking appropriate research to inform best practice and lead improvements in the organisation.
Personal and Key Transferable / Employment Skills and Knowledge
19. Possess a strong work ethic and commitment in order to meet the standards required.
20. Act reliably, objectively and be capable of both independent and team working.
21. Act with integrity with respect to ethical, legal and regulatory requirements ensuring the protection of personal data, safety and security.
22. Commit to continuous professional development; maintaining their knowledge and skills in relation to developments in digital and technology solutions that influence their work.
23. Interact professionally with people from technical and non-technical backgrounds. Presents data and conclusions in an evidently truthful, concise and appropriate manner.
24. Participate in and shares best practice in their organisation, and the wider community for aspects relevant to digital and technology solutions.
25. Maintain awareness of trends and innovations in the subject area, utilising a range of academic literature, online sources, community interaction, conference attendance and other methods which can deliver business value.
26. Champion diversity and inclusion in their work ensuring that digital technology solutions are accessible.
SYLLABUS PLAN - summary of the structure and academic content of the module
Software architecture (2 weeks)
• Design patterns revisited; MVP
• Frameworks
• Package diagrams
• UML deployment diagrams
Code quality (1 week)
• Best practices and standards; software quality assurance
• GRASP principles
• Developing efficient, secure and reliable software
• Profiling
• Code reviews
Methods and tools (2 weeks)
• Working collaboratively and professionally with others in cross-functional teams
• The Unified Process
• Scrum in depth; XP; DSDM
• Lean development
• Development tools
Software design (2 weeks)
• User experience design; usability; human-computer interaction
• Domain modelling
• UML sequence diagrams
• Interpreting and implementing a design
Advanced programming (2 weeks)
• Threads
• Localisation
• Product line development
Testing (2 weeks)
• System testing; acceptance testing
• Advanced testing tools
• Test-driven development
Deployment in enterprise environments (1 week)