The simultaneous explosion of information and integration of technology and the continuous evolution from software intensive systems to systems of systems to ultra-large-scale (ULS) systems requires new and innovative approaches for building, running and managing software systems. A consequence of this continuous evolution is that software systems must become more versatile, flexible, resilient, dependable, robust, continuously available, energy-efficient, recoverable, customizable, self-healing, configurable, or self-optimizing by adapting to changing contexts and environments. One of the most promising approaches to achieving such properties is to equip software systems with self-adaptation and self-managing mechanisms. The topic of self-adaptive and self-managing systems has been studied in a variety of application areas, including autonomic computing, robotics, control systems, programming languages, software architectures, fault-tolerant computing, and biological computing. In this course, we focus on the software engineering aspects, including the methods, architectures, algorithms, techniques and tools support self-adaptive and self-managing behavior and exciting application areas, including autonomic computing and ULS systems.
CSC 111 Fundamentals of Programming with Engineering Applications
Fall 2018
Fall 2017
Fall 2016
Fall 2015
Fall 2014
Fall 2013
Fall 2012
Fall 2011
Fall 2010
Computation is fundamental to the design, analysis and implementation of engineering systems. This course introduces the concepts of computer programming with particular attention to engineering examples. The C programming language is used but the course will stress fundamentals so that students will have a basis for understanding and using other programming languages.
Combines a range of topics integral to the analysis of requirements, design, implementation, and testing of a medium-scale software system with the practical experience of implementing such a project as a member of a software engineering team. Introduces requirements engineering, specifications, software life cycle models and formal methods for requirements engineering.
An introduction to algorithm design and analysis. Random access machine model. Time and space complexity, average and worst case analysis, upper and lower bounds. Application of correctness proof techniques. Algorithms: internal searching, merging, sorting, selection, hashing; graphs: traversals, topological sort, transitive closure, strongly connected components, shortest path, minimum spanning tree. The existence of intractable problems, heuristics. Data structures: B-trees, heaps and graphs.
CSC 225 Algorithms and Data Structures
Spring 2009
An introduction to algorithm design and analysis. Random access machine model. Time and space complexity, average and worst case analysis, upper and lower bounds. Application of correctness proof techniques. Algorithms: internal searching, merging, sorting, selection, hashing; graphs: traversals, topological sort, transitive closure, strongly connected components, shortest path, minimum spanning tree. The existence of intractable problems, heuristics. Data structures: B-trees, heaps and graphs.
Courses Offered in the Past
SENG 371 / SENG 420 / SENG 520 Software Evolution
Created this course at the University of Victoria in 1997
Taught it many times as a 3rd year, 4th year or graduate course.
CSC 480 Software Engineering Topics Courses
Software architecture
Software evolution
Software life cycle
Software process
Software methods
Software reverse engineering
Software reengineering
Software services
CSC 426 / CSC 526 Computational Geometry
Created this course at the University of Victoria in 1993
Taught it several times as a 4th year and graduate course
Several MSc theses resulted from this course
CSC 110 Programming I
Taught and redeveloped this course several times for different programming paradigms (i.e., imperative and object-oriented) programming languages (i.e., Pascal, C, C++ and Java), different programming environments, and different applications
CSC 115 Programming II
Taught and redeveloped this course several times for different programming paradigms (i.e., imperative and object-oriented) programming languages (i.e., Pascal, C, C++ and Java), different programming environments, and different applications
CSC 225 Algorithms and Data Structures
Taught this course almost every term between 1986 and 1992