Software Engineering
Principles of Software Engineering
- Candidates must be aware of the fundamental principles underlying Software Engineering and understand why an ‘engineering discipline’ is required to develop high quality software systems.
- Engineering vs Programming
- Programming in the Large vs Programming in the Small
- High Quality Software Systems vs Software Programs
Process Models
- Candidates should be aware that there are many process models that can be used as the basis for a software development life-cycle:
- Overview of Process Models and their importance
- V-model
- V-model with prototyping
- Evolutionary Development
- Incremental Development
- Spiral Model
- Cleanroom Process Model
- DSDM (a process model not a method)
- Comparison of Models
Development Methods and Techniques
- Candidates should show a theoretical and practical understanding of the following:
- Structured Methods and Techniques (e.g. SSADM)
- DataFlow Diagrams
- Entity-Relationship Diagrams
- State Transition Diagrams
- Statecharts
- Object Oriented Methods and Techniques (e.g. UML)
- Use Cases
- Class Diagrams
- Behaviour Diagrams (e.g. collaboration diagram)
- Implementation Diagrams (e.g. component diagram)
- Formal Methods
- VDM, Z, B
- CSP, Mascot, Petri-Nets
Software Development Life Cycle
- Candidates should show a practical understanding of developing software products through a development life-cycle:
- Requirements
- Requirements Analysis and Capture
- Requirements Engineering, e.g. CORE
- Requirements Tracking
- Functional Requirements
- Non-Functional Requirements
- Specification
- Refinement of Requirements
- Natural Language Specification
- Diagrammatic
- Formal, Mathematical Specification
- Use of Abstraction
- Rapid Prototyping
- Design
- Refinement of Specifications
- System Architectures
- Different Design Approaches
- Design Trade-Offs (e.g. modular vs performance)
- Performance Modelling/ Simulation
- Structured Design vs O-O Design
- Implementation
- Encapsulation and Modularistion
- Information Hiding (ADTs/ Interfaces)
- Coupling and Cohesion
- Component Reuse
- Debugging
- Performance Measurement
- Validation and Verification
- Testing; black-box and white box, statistical
- Formal Proof
- Correctness Arguments
- Inspections and Reviews
- Static and Dynamic Analysis Tools
- Using the Compiler
- Maintenance
Project Management
- Risk Management
- Team Management (Personnel and Technical)
- Project Planning (Resource and Technical)
- Education and Training
- Cost Estimation
- Project Scheduling
Software Quality
- Software Quality Assurance
- Configuration Management and Change Control
- Software Tools
- The 'ilities'
- Standards
- Documentation
- Metrics

