Honours Degree Modules
Lecturer: Dr Stefan Gruner
This module requires the student to conduct independent research under supervision of a staff member on a topic agreed upon by the student and staff member. The module consists of two parts: Research methods and the project. During the first semester, formal lectures will be presented on best research practices (counting 10 credits). The project (counting 20 credits) involves application of the taught research methods to complete a research project. The project serves as an opportunity for the student to explore one of the department's areas of research in greater depth. The end product may be a new piece of software, a model or an algorithm, or an extension of these. It could be an experimental, or theoretical piece of reasoning. The final outcome of the project is a technical report.
Lecturer: Prof Andries Engelbrecht
This module focuses on two Computational Intelligence paradigms, namely Evolutionary Computation and Swarm Intelligence. Within the Evolutionary Computation paradigm, algorithmic models of Darwinian evolution will be studied, including genetic algorithms, genetic programming, evolutionary strategies, evolutionary programming, differential evolution, cultural algorithms and co-evolution. Within the Swarm Intelligence paradigm algorithm models of social organisms found in nature will be studied, including ant algorithms and particle swarm optimisation. These algorithms will mostly be studied in the context of complex optimisation problems, including multi-objective optimisation, dynamic environments, constraints, and finding multiple solutions. Prior knowledge assumed include good programming skills and an undergraduate module in calculus.
Lecturer: Prof Andries Engelbrecht
This module focuses on three Computational Intelligence paradigms, namely Artificial Neural Networks, Artificial Immune Systems, and Fuzzy Systems. Within the Artificial Neural Networks paradigm algorithmic models of neural learning will be studied, including supervised, unsupervised, and reinforcement learning. Aspects that influence the performance of artificial neural networks will be studied in depth. Within the Artificial Immune Systems paradigm algorithm models of different views of the human biological immune system will be studied, including negative selection, clonal selection, network theory and danger theory models. The Fuzzy Systems paradigm include models of reasoning with uncertainty, specifically fuzzy logic and rough sets. Prior knowledge assumed include good programming skills and an undergraduate module in calculus.
Lecturer: Prof Hein Venter
This module focuses on state-of-the-art security topics that are current and relevant to industry. The curriculum for the module is determined annually to reflect the current research directions as pursued by the Information and Computer Security Architectures (ICSA) researh group. The main topics include, but are not limited to: Applied security, including operating system security, secure coding, and cryptography; Trust and trust management systems; Privacy and privacy-enhanced technologies; Social Engineering. Students will be challenged to contribute innovative research ideas in the field of Computer Security by completing a number of mini projects such as writing research papers and writing software programs.
Lecturer: Prof Martin Olivier
This module focuses on state-of-the-art information security topics that are current and relevant to industry. The curriculum for this module is annually determined to reflect the current research directions as pursued by the Information and Computer Security Architectures (ICSA) research group. The main topics include, but are not limited to: Information security management, including policies, standards and procedures; Risk management; Privacy; Ethics; Legal issues in Information Security; Information security services and technologies. Students will be challenged to contribute innovative research ideas in the field of Information Security Management by completing a number of mini projects such as writing research papers and writing software programs.
Lecturer: Dr Patricia Lutu
This module covers various perspectives of Software Engineering theory and practices. It provides an overview both of the challenges in contemporary software engineering (such as scale, complexity and urgency) and of the recommended practices for overcoming these challenges. It will familiarise students with both the historical and current theories about activities for the design, development, deployment and ongoing operation of software. It will show how these activities aim to be predictable, repeatable, robust, value-producing, and how they aim to meet the specified requirements for the intended system users. It will also emphasise that standardisation and reuse can be important factors in successfully engineering software. The module assumes prior knowledge about Software Engineering at the level of an introductory/undergraduate module.
Lecturer: Dr Fritz Solms
This module discusses software architecture, including the representation of designs, definitions, styles and patterns of architecture. Its themes include model-driven architecture, formal modelling and analysis, and architectural description languages. The module will show that the architecture of a software system is determined by the collection of significant design decisions made early on in the development of that system – decisions concerning the components comprising the system, repeating-patterns of system-wide aspects, and the platforms on which the system will be built. It will discuss how, once these decisions are made and subsequently followed, they end up profoundly affecting the development, deployment, use and ongoing enhancement of that system. The module assumes that the student is familiar with software development lifecycle concepts, and that she/he has been part of at least one significant software development effort. Those who have not completed COS730 will be provided additional background.
Lecturer: Prof Derrick Kourie
The focus of this module is on a formal approach to deriving algorithms, known as "correctness by construction". It relies on Dijkstra's guarded command language (GCL) for specifying the derived algorithms. The requirements of an algorithm are initially stated in terms of a pre- and a post-condition, specified in first order predicate logic. Strategies are given for progressively refining these specifications to GCL notation which can, in turn, easily be translated into a conventional programming language. The surprising power of the method will be demonstrated. Not only are algorithms guaranteed to be correct (in the same sense that the proof of a mathematical theorem is guaranteed to be correct); they frequently turn out to be remarkably efficient. In the early part of the module, a number of well-known algorithms (such as linear and binary search, raising a number to an integer power, finding the approximate log of a number, etc) will be derived in order to become thoroughly familiar with the approach. Later various intermediate level algorithms will be derived (such as simple raster drawing algorithms, pattern matching algorithms, finding the longest string of a certain type, an algorithm to solve the majority voting problem, etc). Finally, the method will be used to derive state-of-the-art algorithms to minimize finite automata and to construct formal concept lattices. The theory necessary to understand these topics will be provided. The value-objectives of the module are: to develop an appreciation that theory can be effectively deployed to solve practical problems; to value the elegance of the algorithmic solutions; and to value a correctness-by-construction mindset over one that is content with debugging into correctness. A basic understanding is assumed of first order predicate logic, as well as competency in mathematical reasoning.
Lecturer: Dr Stefan Gruner
The status of Computer Science, including software science, as a proper "science" is closely related with our ability to construct accurate and precise models of the structures and processes of computational systems. The precision of these models is closely related with our ability to express them in formal notations with mathematical rigour, such that it also becomes possible to reason formally about relevant and interesting properties of these models. Examples of such interesting properties are logical consistency (i.e. absence of inherent contradictions), or safety properties such as deadlock freeness. This modules focuses on formal languages and techniques which are suitable for such purposes. Of particular importance are process algebras with which systems of parallel and concurrent computation can be formally described. Other suitable formalisms may be discussed as well, such that the contents of this module may slightly vary from year to year.
Lecturer: Ms Linda Marshall
This module provides the foundation to evaluate and develop educational software. It will introduce didactic principles applicable to the discipline of Computer Science. Using these principles, educational software, such as tools for teaching programming, on-line testing software, and adaptive software to name a few, can be evaluated and developed. Computer Science topics of interest are: programming environments, persistence of information and knowledge, knowledge representation etc.
Lecturer: Mr Will van Heerden
Data mining is the extraction of novel knowledge, or hidden patterns, from large data bases. The focus of this course is on how the computational intelligence techniques (such as evolutionary algorithms, swarm algorithms and neural networks) can be used for knowledge extraction. In addition, traditional machine learning techniques (such as decision trees and rule induction) will be covered. The pre-processing of data in preparation for data mining algorithms, as well as the post-processing of results after data mining, will be discussed. Exploratory data analysis and statistical data mining methods are also investigated. Finally, some attention will be given to more modern problems, such as the extraction of hidden knowledge from unstructured data, such as text and images. It is highly recommended that students do COS710 and COS711, as knowledge of these modules are assumed.
Lecturer: Ms Linda Marshall
This module introduces the concepts of generic programming in order to generate code at compile-time. Of particular interest is the automatic generation of design pattern implementations at compile-time for use at run-time. To this end, design patterns and compile-time programming techniques such as: basic compile-time programming constructs, object allocation, generalised functors, smart pointer and multi-methods are discussed in detail and applied to design patterns.
Lecturer: Mr Michael Kohn
This module will teach the basic theoretical concepts of digital forensic investigations. This module is designed to prepare a student for a wide range of people including, but not limited to, law enforcers, crime investigators and people responsible for internal incident investigations in larger organisations. Digital forensics is a relatively new and upcoming field. It is a field that is not well known by most organisations and therefore, such organisations are ill informed about the digital forensic processes required to conduct a successful digital forensic investigation. The large number of digital devices used to commit crimes or other related incidents, such as fraud and corruption, proved motivation for this module in order to investigate and combat these incidents successfully. The main topics covered, but not limited to, include: An introduction to Digital Forensics; Digital forensic processes; Hardware forensics; Digital forensics tools (software forensics); Forensic readiness; A digital forensics laboratory/facility; Network forensics; Live forensics; Professionalism and ethics in digital forensics; Cyber forensics; Cyber law. Students will be challenged to contribute innovative research ideas in the field of Digital Forensics by completing a number of mini projects such as writing research papers and writing software programs.
Lecturer: Mr Jan Kroeze
This module is intended as an advanced module in real-time computer graphics and shader programming. The module includes the following topics: Advanced texture mapping, curves and curved surfaces, shadow mapping, skeletal animation, systems, ray tracing and collision detection. The module assumes prior knowledge of introductory graphics as presented in an undergraduate module and a working knowledge of linear algebra and calculus.
Lecturer: Dr Serena Coetzee
This module covers the major themes of spatial databases with application to geographic information systems (GIS), i.e. systems concerning data with an implicit or explicit reference to a location relative to the earth. Topics covered include an introduction to spatial databases and spatial data management systems, representation of geographic data, spatial data modelling, computational geometry, spatial data indexing, query processing and spatial data standards. For Computer Science students the module is an introduction to the ever increasing application field of geographics information systems (GIS), and for Geoinformatics students the module provides insight into the Computer Science foundations of the field.
From time to time, the department presents lectures on special topics within Computer Science. This module will be used to present such special topics.