Postgraduate Course: Practical Software Development (EPCC11001)
|School||School of Informatics
||College||College of Science and Engineering
|Credit level (Normal year taken)||SCQF Level 11 (Postgraduate)
||Availability||Not available to visiting students
|Summary||Programming is often the first thing we learn when we move into software development, but it is not the singular focus of a good software developer. As this course will cover, a good software developer must be able to produce code which, among other qualities, is well designed, maintainable, readable, and testable. Importantly, they must in addition to being able to write good code, they must be able to undertake and understand the other roles that are necessary to produce good software products. These roles can include but are not limited to project management, risk management, planning, requirement engineering, and system architecture. This course aims to cover the programming approaches that lead to good code and the processes which lead to the delivery of high-quality, efficient, robust, portable, usable software products. You will be introduced to areas of increasing prominence in both academia and industry including the importance of software sustainability and the use of agile methods.
The course covers the following:
- Best practices for scientific computing.
- Introduction to operating systems, compilers and batch systems.
- Writing programs for people, programs that are readable, maintainable, and usable.
- Reviewing code to identify bugs and share expertise.
- Debugging using code browsers and debuggers.
- Managing versions and collaborating using revision control.
- Automating common tasks and building programs using a build tool.
- Automated regression and unit testing to help ensure and maintain program correctness.
- Profiling and performance analysis to identify and improve a program's use of processing and memory resources.
- Security, authentication and authorisation concepts.
- REST application programming interfaces.
- Open source software.
- Software Development Projects and Processes
- Development Models
- Project Approaches including Agile and PRINCE2
- Project Planning: Task Scheduling and Risks
- Design: Requirements Capture and Prioritisation, Interfaces, Code, System
- Software Testing
- Usability and Evaluation
- Project Teams and Communications
- Project Reviews
The course will be taught via a series of live lectures and tutorial lab sessions. Each week will normally have a single one hour lecture on a topic and a two hour tutorial/lab/discussion session where students will be expected to interact and contribute to the activities. The course will be supported by series of pre-recorded concept videos which will give the introduction to topics in the course, allowing students to focus on the details and questions during contact time. These pre-recorded videos will additionally provide case studies of projects carried out by EPCC staff.
The course will be assessed through three methods:
- The application of the course material to a group software development project
- Group presentation to present product of project
- Individual course reflection and code review
The group assignment will be carried out in three submissions over two semesters allowing each submission to concentrate on different skills and learning outcomes from the course.
Course Delivery Information
|Academic year 2022/23, Not available to visiting students (SS1)
|Learning and Teaching activities (Further Info)
Lecture Hours 21,
Seminar/Tutorial Hours 37,
Supervised Practical/Workshop/Studio Hours 6,
Online Activities 4,
Feedback/Feedforward Hours 6,
Programme Level Learning and Teaching Hours 4,
Directed Learning and Independent Learning Hours
|Assessment (Further Info)
|Additional Information (Assessment)
||Formative Assessment (Semester 1, early):
Formative assessment will be a group performance analysis of a code artefact The group will have to plan, perform and present the analysis of the code. Feedback will be provided on the following:
- Experimental Design and Documentation
- Data Visualisation
- Quality of Analysis
- Concept Understanding
- Quality of Presentation
The groups will be given a project brief against which they must run a software project. This project will build upon the familiar code base from the formative assessment. The Assessment should be treated as a single overarching project with three 'milestone' submissions:
1. Group Assessment - Submission 1 - 25% - Requirements, Design, Plan (Submission S1)
2. Group Assessment - Submission 2 - 20% - Risk Review, CI/CD and Test Framework Deployments (Submission S2, early)
3. Group Assessment - Submission 3 - 25% - Final Prototype, Usability and Performance Testing, Evaluation (Submission S2)
Each group assessment will require the submission of a Peer Assessment form which will be used to affect the marks of the group members. This variation will nominally, at the Board of Examiners' discretion, be limited to +/- 20 marks on each assessment - subject to supporting evidence in the Peer Assessment form with penalties applied for non-completion of the peer assessment form or for any attempt to manipulate results using the form (e.g. insufficient explanation/evidence to support excessively high/low ratings).
Group Presentation - 10%. (Delivered Flexible Learning Week) -
The group assessment should present their project as a product - highlight the technical design and qualities of their work, highlight how the design matches the requirements of the project and what future plans for the product are.
Personal Coursework - 20% (Submission S2 End of Exam Diet)
The individual assignment will be two sections:
1. A personal reflection on the group project - this should include an assessment of the group performance and dynamics, the individual and their role in the assessment and the concepts and learning that they have undertaken during the process
2. Code Review - this should be a code module or file from the project which the individual should perform a code review of. This review should include adherence to code standards, functionality review, readability, testing and potential improvements or issues in the code.
||In-class feedback, tutorials and lectures are intended to be interactive so there will be an on-going verbal dialogue with students that engage with the course.
For all assessments, students will have the opportunity to discuss in person or virtually with a member of the course team their feedback or questions.
Formative Assessment Feedback:
Written Group Feedback addressing strengths and weaknesses of analysis and conclusions
Verbal Cohort Feedback to address common strengths, weaknesses and concept misunderstanding
Weighted Group Assessments:
Written Group Feedback addressing strengths and weaknesses of specific elements, question-based feedback to encourage reflection on why an option or opinion or decision was taken.
Verbal Cohort Feedback to address cohort level strengths and weaknesses.
Written Group Feedback on the quality and content of the presentation and the relationship to the prior assessed materials.
Verbal Cohort Feedback to address cohort level strengths and weaknesses.
Written feedback addressing the elements of reflection and code review. Question based feedback where items are unclear or the reasoning isn't apparent to provoke reflection in the student.
|No Exam Information
On completion of this course, the student will be able to:
- Describe, execute, and evaluate the processes required for software development.¿
- Produce, Refactor, Test and Evaluate usable and readable source code.¿
- Design, implement, analyse, and document qualitative and quantitative experiments on software.¿
- Identify, prioritise, and develop project management strategies for change management, risk management, resource management and communication.¿
- Evaluate and apply software development tools and techniques to development projects including version control, code analysis, profilers, continuous integration, and continuous deployment.
Wilson G, Aruliah D.A., Brown C.T., Chue Hong N.P., Davis M., et al. 'Best Practices for Scientific Computing'. PLoS Biol 12(1): e1001745. doi:10.1371/journal.pbio.1001745.
Optional (More reading is available):
L. Wallace and M. Keil. Software Project Risk and their Effect on Outcomes, Communication of the ACM, vol 47 number 4, pp. 68-73, 2004
M. N. A. Khan, A. M. Mirza, and I. Saleem, Software Risk Analysis with the use of Classification Techniques: A Review Eng. Technol. Appl. Sci. Res., vol. 10, no. 3, pp. 5678-5682, Jun. 2020.
Razavian, Maryam et al., 2016. In two minds: how reflections influence software design thinking. Journal of software : evolution and process, 28(6), pp.394-426.
Suryanarayana, Girish, Samarthyam, Ganesh & Sharma, Tushar, 2014. Refactoring for Software Design Smells, San Francisco: Elsevier Science & Technology.
Sandve G.K., Nekrutenko A., Taylor J., Hovig E. 'Ten Simple Rules for Reproducible Computational Research'. PLoS Comput Biol 9(10): e1003285. doi:10.1371/journal.pcbi.1003285.
McConnell, S. 'Code Complete: A Practical Handbook of Software Construction' (2nd ed.), Microsoft Press, 19 Jun 2004. ISBN-10: 0735619670. ISBN-13: 978-0735619678.
Hunt, A. 'The Pragmatic Programmer', Addison Wesley, 20 Oct 1999. ISBN-10: 020161622X, ISBN-13: 978-0201616224.
|Graduate Attributes and Skills
||Research and Enquiry: Problem solving; Analytical thinking; Independent research
Personal and Intellectual Autonomy: Creativity and inventive thinking; Decision making;
Personal Effectiveness: Planning, organising and time management; Team working; Change management
Communication: Verbal communication and presentation; Written communications; Influencing and negotiation skills
||Only available to students on EPCC's on-campus MSc programmes.
|Keywords||Software development,planning,risk analysis,risk management,requirements,HPC,HPCwDS,Software
|Course organiser||Mr Alistair Grant
Tel: (0131 6)50 5028
|Course secretary||Mr James Richards
Tel: 90131 6)51 3578