Select a course.
1.2 Software and Software Development
infoWhy this? Software drives innovation across every sector of society. Understanding operating systems, translators, development methodologies and programming paradigms helps students appreciate how complex software systems are designed, built and maintained. This unit develops an awareness of the professional practices used by software engineers and prepares students to create effective, reliable solutions to real-world problems.
scheduleWhy now? Students are moving beyond simply writing programs and beginning to understand how large-scale software projects are developed. Learning these concepts now provides the framework needed for the programming project and introduces the collaborative and iterative approaches used throughout the technology industry
neurologyYou need to know
- An operating system manages processor time, memory, storage and input/output devices, while providing a user interface, security, file management and services for applications.
- Paging divides virtual memory into fixed-size pages and physical memory into equal-sized frames, whereas segmentation divides a program into variable-sized logical sections such as code, data and a stack.
- Virtual memory uses secondary storage to extend the available main memory; a page fault occurs when a required page is absent from RAM and must be loaded from secondary storage.
- An interrupt is a signal that requires processor attention; the processor completes its current instruction, saves its state, runs an Interrupt Service Routine, restores its state and resumes the interrupted program.
- First come first served runs processes in arrival order and is non-pre-emptive, while round robin gives each process a fixed time slice in turn and is pre-emptive.
- Shortest job first selects the waiting process with the shortest estimated execution time, shortest remaining time can pre-empt a running process, and multi-level feedback queues move processes between priority queues according to their behaviour.
- A distributed operating system coordinates several networked computers, an embedded operating system controls a dedicated device, a multi-tasking operating system runs several tasks apparently at once, and a multi-user operating system supports multiple users concurrently.
- A real-time operating system guarantees that responses occur within defined deadlines; hard real-time systems cannot tolerate missed deadlines, while soft real-time systems can tolerate occasional delays.
- The BIOS is firmware that performs start-up checks, initialises hardware and begins loading the operating system, while a device driver allows the operating system to communicate with a particular hardware device.
- A virtual machine is software that imitates a physical or abstract machine; a system virtual machine runs an operating system, while a process virtual machine executes intermediate code such as bytecode.
- Application software performs user-focused tasks, while utility software maintains, protects or optimises a computer through functions such as backup, compression, encryption, malware detection and storage management.
- Open-source software is supplied under a licence that permits its source code to be inspected, modified and redistributed, whereas closed-source software keeps its source code proprietary and restricts modification.
- A compiler translates a complete high-level program into target code before execution, an interpreter translates and executes code one statement at a time, and an assembler translates assembly mnemonics into machine code.
- Lexical analysis converts source code into tokens, syntax analysis checks that the tokens follow the language grammar, code generation produces target code, and optimisation improves efficiency without changing the program's intended behaviour.
- A linker combines object-code modules and libraries and resolves external references, a loader places an executable into memory for execution, and a library contains reusable pre-written code.
- The waterfall lifecycle completes requirements, design, implementation, testing and maintenance in sequence, making it suitable for stable requirements but costly to change after development has progressed.
- Agile development produces software through short iterative increments; extreme programming uses practices such as pair programming, test-driven development and continuous integration, rapid application development emphasises prototypes and time-boxed development, and the spiral model repeats development stages with explicit risk analysis.
- Agile and rapid methods accommodate changing requirements and frequent feedback but require sustained user involvement, whereas waterfall offers clear documentation and milestones, and the spiral model is well suited to large, high-risk projects but can be expensive and complex.
- Procedural programming organises instructions into procedures using sequence, selection and iteration, while assembly language is a processor-dependent low-level language; the Little Man Computer uses an accumulator, numbered mailboxes and instructions including INP, OUT, LDA, STA, ADD, SUB, BRA, BRZ, BRP and HLT.
- Immediate addressing stores the operand value in the instruction, direct addressing stores the operand's memory address, indirect addressing refers to a location containing the effective address, and indexed addressing forms the effective address by combining a base address with an index; object-oriented programming creates objects from classes and uses attributes, methods, encapsulation, inheritance and polymorphism.
rocket_launchYou must be able to
- Justify the choice of an operating system, application or utility for a scenario by referring to the user's requirements, hardware, compatibility, performance, security, cost and support.
- Trace how paging, segmentation and virtual memory manage a program's memory, including the handling of a page fault.
- Trace the handling of an interrupt through the Fetch-Decode-Execute cycle, including saving the processor state, executing the ISR and restoring the interrupted process.
- Apply first come first served, round robin, shortest job first, shortest remaining time and multi-level feedback queue scheduling to determine the order in which processes run.
- Classify operating systems as distributed, embedded, multi-tasking, multi-user or real-time and justify each classification from the system's purpose and constraints.
- Compare open-source and closed-source software for a given context using licensing, source-code access, customisation, security, support and cost.
- Trace source code through lexical analysis, syntax analysis, code generation, optimisation, linking and loading, identifying the output of each stage.
- Evaluate waterfall, agile, extreme programming, spiral and rapid application development methods, selecting a suitable methodology from the stability of requirements, level of risk, timescale and availability of user feedback.
- Write and follow algorithms accurately, using sequence, selection, iteration, variables and clearly defined inputs and outputs.
- Write and trace simple Little Man Computer programs using the accumulator, mailboxes, branching and input/output instructions, and determine operands or effective addresses for immediate, direct, indirect and indexed addressing.