Software engineering: theory and application [139]

This syllabus covers the methods, attitudes and values which underlie professional contemporary software systems development. The emphasis is on how to undertake formal software development through requirements specification, design and implementation, but within a broader understanding of software engineering practices.

Section 1: Software engineering process

  • The changing pressures on software engineering practices: History of the field, definition of software, the software crisis.

  • The Process for Developing Software and its importance

  • The Capability Maturity Model

  • The traditional software engineering process: The lifecycle model, evolutionary software development, incremental software development, spiral model.  Prototyping

  • Rapid software development

  • Internet speed web based application development

  • End-user development.

  • Agile methods

  • Extreme programming

  • Refactoring

Section 2: The practices of software engineering

  • Introduction to structured vs. object-oriented paradigms

  • Acquiring requirements

  • Specifying requirements and design (both structured and object-oriented)
    - structured approaches: ER diagram, data flow diagrams, data dictionary
    - OO approach (using UML): use-case diagrams, class diagrams, object sequence diagrams,  state-chart diagrams

  • Features of good design

  • Coding and configuration management

  • Implementation and testing (both structured and object-oriented)
    - choice of programming languages and techniques
    - test planning
    - white box and black box testing
    - testing automation
    - implementation
  • Maintenance and software evolution
    - Systems re-engineering for Legacy systems
  • Reuse
    - reasons for reuse
    - concept reuse – patterns, configurable systems products and program generators
    - component-based software engineering
  • Computer Aided Software Engineering (CASE) Tools
  • Documentation and help systems
  • Project management in software engineering
  • Documentation and help systems
  • Managing software engineering projects