Software Engineering
Rationale:
In order to develop high quality software it is imperative that Information Systems Professionals have an understanding of software development as an engineering discipline. This understanding should be focused on both the practical and theoretical aspects of the discipline.
Aims:
To gain a knowledge of:
- The principles of software engineering
- Software process models and process improvement
- Development methods
- Requirements and specification
- Software design
- Software implementation
- Verification and validation
- Software project management
- Software quality
Objectives:
- An understanding of a wide variety of software engineering principles, process models and development methods
- A knowledge of the different phases in software engineering; requirements, specification, design, implementation, verification and validation
- Project management capability
- A knowledge of how to produce high-quality software
- An awareness of the special requirements for specific types of system such as safety critical systems
- An understanding of the practical problems in developing software systems
Content:
1 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
2 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
3 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 State charts
- Object Oriented Methods and Techniques (e.g. U M L) 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
4 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
5 PROJECT MANAGEMENT
- Risk Management
- Team Management (Personnel and Technical)
- Project Planning (Resource and Technical)
- Education and Training
- Cost Estimation
- Project Scheduling
6 SOFTWARE QUALITY
- Software Quality Assurance
- Configuration Management and Change Control
- Software Tools
- The 'ilities'
- Standards
- Documentation
- Metrics
|