Overview

This course provides an introduction to software engineering, algorithm design and analysis. The main topics include: Software design in UML: use cases, class modelling, objects and links, aggregations and dependencies, activity diagrams, state-charts; Principles of good software design, software development lifecycle, the role of design and modelling in software development; Software verification and validation; Project management and planning; Case studies and software horror stories. Abstract data types, design patterns, algorithmic issues, complexity theory, the application and implementation of common data structures in Java.

Software Engineering

The major aims of this part of the course is

  • to understand the role of software development in the software life-cycle
  • Produce static and behavioural models of software programs
  • Specify and verify software systems
  • Decompose problems and develop software architectures
  • Implement software models in a structured and efficient way.

Algorithm Design and Analysis

Understanding the underlying motivation behind common abstract data types or data structures is essential for making intelligent decisions when implementing programming solutions. The study of algorithms help in a wide range of problem solving.

This course is a component of the University of London's Computing and Information Systems Degree Programme. It is offered externally at SBCS. Further information about the course schedule can be found on the SBCS Website.

Outline

The following outline is given as a guide only. The order that the topics are delivered may vary.

Week Topic
1 Software Engineering. What makes a good system. The difficulty of building software. Survey of options available to software developers/engineers.
2 Software Development Process. Waterfall model, Iterative models, Agile models.
3 Use Cases, User Requirements, User Stories
4 Class Diagrams, Identification of classes
5 Sequence Diagrams
6 More about class diagrams, aggregation and composition, inheritance
7 State MAchine Diagrams
8 Activity Diagrams
9 Product Quality, validation and verification, testing techniques.
10 Process Quality
11 Problems and Algorithms, Big-O notation
12 Abstract Data Types, arrays, lists, stacks, trees, queues, sets, hash tables
13 Sorting, Searching, Traversal
14 Divide and Conquer, Recursion
15 Dynamic Programming
16 Greedy Algorithms
17 P = NP?
18 String Matching, Boyer-Moore, Knuth-Morris-Pratt