Modern Software Engineering Technologies

by Samira Sadaoui

The quality of life in our 21st century depends heavily on software systems. Software affects almost every aspect of personal and professional life. Software engineering, which is still a young field compared to other engineering disciplines, is a multidisciplinary area including computer, mathematical, management, engineering, social and cognitive sciences. Software engineering was in response to the perceived software crisis: “the problem of building, large, reliable software systems in a controlled, cost-effective way.” Today, in North America, many exciting and challenging software engineering degree programs are offered for both undergraduate and graduate levels. For instance, in 1999, Auburn University, Alabama, changed its doctorate degree in Computer Science to “Computer Science and Software Engineering”. These programs are motivated by pressure from outside of academia with the goal of educating and training (with collaboration with industries) more people in software engineering. The number of such programs is expected to greatly accelerate in the near future.

Software development costs are a major factor in the world’s economy. Two techniques, software reuse and formal methods, offer the very real potential of dramatically increasing software productivity, while at the same time improving software quality. This is why software reuse and formal methods are both recommended courses in any software engineering curriculum model.

Software reuse can simply be defined as the systematic application of existing software artifacts during the process of building new software systems; an artifact is a piece of formalized knowledge that can contribute to the software engineering process. Artifacts should not be limited to code fragments but rather can be shared requirements, specifications, design architectures, documentation, transformation rules, processes and methodologies. Most of the impact of reuse research has been via black-box components, domain-specific architectures, component retrieval systems, program generators, and object oriented design and development. A large number of organizations have already invested in establishing reuse programs, and have demonstrated quantitative benefits.

In most other engineering disciplines the use of mathematics for specification and analysis is considered indispensable in ensuring that products are correct and reliable. Today, the use of formal, i.e. mathematically based methods, for software development is needed. Formal methods have many benefits: they are used to reveal ambiguities, incompleteness and inconsistencies in a system; to detect design errors early in the development process, that otherwise might be discovered only during the very costly testing and debugging phases; to prove the correctness of a system without the necessity of running it; to animate and simulate systems before their implementation; to generate automatically the source code and test cases; to build libraries so that the components can be reused based on their specifications, etc.

Even formal methods continue to grow in popularity. Unfortunately many people misunderstand what constitutes a formal method, and how formal methods have been applied successfully in very complex systems in industry. Standardization bodies such as ISO and ITU have recognized the value of using formal methods in distributed and safety-critical systems. Today, formal techniques are important for many relevant areas such as hardware verification (specification, verification, and synthesis of microelectronics systems, VLSI testing, etc.), networking (communication protocols, telephony and telecom software engineering), and software engineering (software testing and verification). Also, may I point out that formal methods is one of the most relevant research topics in computer science mentioned by the recent NSERC reallocation report. An introduction to formal methods is the “Guidance on the use of formal methods in the development and assurance of high integrity industrial computer systems” (available at

I hope this will attract more undergraduate and graduate students to this area of software engineering, including software reuse and formal methods. For more information, please check out my website:, or send an e-mail to

A bon entendeur, je vous salut !


Constraint Solving and Programming

by Malek Mouhoub

Computational problems from many different application areas can be seen as constraint-based problems. For example, the problems of scheduling a collection of tasks, or interpreting a visual image, or laying out a silicon chip, can all be seen in this way. Because of the importance of these problems in so many different fields, a wide variety of techniques and programming languages from artificial intelligence, computational logic, operations research and discrete mathematics are being developed to tackle problems of this kind. The key idea of constraints is to compute with descriptions of data instead of computing with actual data items. More precisely, a constraint-based computation system involves:

a language of data descriptions, and means to compute with data descriptions,
and a computation formalism which operates on constraints by a well-defined set of operations. The choice of this set of operations is basically a compromise between what is desirable for the computation mechanism, and what is feasible for the constraint-based system.

Constraint-based systems became more popular after they were incorporated into constraint programming languages. Since constraints provide a declarative way of representing sets of data, predicate logic was the natural choice as a framework for expressing data descriptions. This motivates the scientific community to develop “PROLOG-like’’ constraint programming languages well known as constraint logic programming languages. Some of these languages are PROLOG IV,GNU PROLOG, CHIP and ECLiPSe. In recent years the logic programming paradigm for solving constraints has been combined with other programming paradigms to result in multi-paradigm languages such as Oz which is a high-level constraint programming language that is designed for modern advanced, concurrent, intelligent, networked, soft real-time, parallel, interactive and pro-active applications. Oz combines the salient features of object oriented, functional, logic and concurrent programming into a single coherent design.

In order to deal with a wide variety of real world applications, our research plan, in the area of constraints, is to extend the features of the current constraint-based systems in order to include the following:

On-line constraint solving: this consists of dealing with constraints in real time and in a dynamic environment. In the case of safety-critical applications and embedded systems, for example, the resolution mechanism should have the ability to react, at any time, to any new incident corresponding to constraint restrictions or relaxations. It should also be capable of providing an acceptable solution within a given deadline.
Managing numeric and symbolic temporal information: when dealing with applications such as scheduling, planning, data base design, computational linguistics and computational models for molecular biology, one important issue is to handle symbolic information, numeric information and time granularities in an efficient way.
Handling soft constraints: soft constraints augment the constraint-based framework by allowing constraints to be partially satisfied without making a solution unacceptable. The goal here is to find the preferred solution according to some preference criterion.

If you want to learn more about this area, check my web page at or contact me at



by Daryl Hepting

The Undergraduate Digital Media Lab (UDML) opened its doors for the Fall semester 2002. It is a joint venture of the Computer Science and Media Production and Studies Departments. It was funded by a grant from Western Economic Diversification and directed base- budget money from the Province of Saskatchewan.

After the official announcement in May, 2002, the CL135 lab (a.k.a. “the fishbowl”) was transformed into the UDML lab

showcasing 20 state-of-the-art computer systems (10 Mac G4’s running OS X and 10 Dell workstations running Windows), along with supporting peripherals, protected by state-of-the-art security.

In Fall 2002, I offered “Introduction to Multimedia Systems” (cross-listed as CS390AI, CS490BM and FILM385AB). I will offer this class again (without the CS490BM option) in Fall 2003. In future, the class will likely become known by the number CS325. The next offering of the course will benefit from experience gained last fall. The class will feature 2-hour labs, and coverage of software will be more focused. Students will get hands-on experience with many popular software packages and types of equipment to produce their own projects on Digital Versatile Disk (DVD).

Also using the lab last Fall was FILM208 (Introduction to Digital Media). Presently, CS405 (Computer Graphics), CS490BT (Animation Software Design), FILM202 (Production II), FILM306 (Post Production) and FILM388AA (Intermediate Animation) are using the UDML. Cross-disciplinary cooperation is continuing this Winter semester as Computer Science students are working taking the FILM388AA course.

We are working to keep the UDML as advanced as possible and we expect that the lab will serve students well for years to come, even though the state-of-the -art is a quickly moving target.

The UDML is key to a new Computer Science B.Sc. degree option in digital content development that is now being formulated. U of R graduates have done neat things in the realm of computer graphics, games, and new media,working

for companies like Pixar and Electronic Arts. We hope that many more of our students will now be able to follow this path.



by Daryl Hepting

The Computer Science Department now has a participant pool, modelled after the one in the Psychology Department. If a class is enrolled in the Participant Pool, students are eligible to receive a research credit of up to 2% of their final grade (over and above the normal marks in the class) for participating in departmental research conducted during that semester.

It was first used over the spring and summer last year, and was quite active in the fall semester. No experiments have used it this semester, but there are many in the planning stages at this point. Dr. Hepting is participant pool coordinator.


Exciting New Computer Animation Course

by Howard Hamilton

Hey, are you interested in Computer Animation? Here’s a chance to learn how computer animation is performed, and especially how to write the software that makes it possible. Starting this spring, the Department of Computer Science is offering a brand new course on Animation Software Design. This course will be taught as CS490BU in Spring/Summer 2003, but the Department is hoping that it will become a new permanent course called CS408. Extra funding was provided by Saskatchewan Learning to develop this new course as a technology enhanced course.

What would you learn if you took the course? First of all, you will practice creating some simple animations yourself using Maya, 3D Studio Max, Poser, and other leading edge animation software. Maya is used by most movie production companies, and has been used to create many of the thrilling computer-generated images you have seen in recent movies. Since these software products provide an incredible array of features, we will only have time to scratch the surface in this course. You will certainly make good use of the super hardware and software in the Undergraduate Digital Media Laboratory.

The interface to animation software requires a very well thought out design. So, you will spend some time analyzing the interface features and how they relate to both the animations that are produced and the underlying software. We’ll see libraries of objects and functions in Java or C++ that simplify the design of such interactive development environments for creating animations. The emphasis will be on using a library, such as Java 3D, OpenGL, DirectX, or Direct3D, to create the key features of an interactive interface.

You’ll also look at how the underlying animation software is organized. Typically, the software builds an internal model of the situation to be depicted in the animation. Each change specified by the user is translated into a change to the model. The model can be saved in a file for later changes or rendered to produce a digital movie.

A straightforward way to produce animation is perform a series of small movements of objects shown in images. Two ways of controlling such motions are keyframing and dynamic behavior. With keyframing, the user identifies the locations and properties of the objects at key timepoints, and then the software interpolates the positions and properties of the objects at the timepoints between these key timepoints. For example, a large blue oval could be gradually transformed into a small yellow circle via a series of interpolated changes to size, color, and shape. With dynamic behavior, the user identifies the location, properties, and behavior of objects at a key timepoints and then lets the behavior of the object direct the changes it undergoes over time. For example, an object might be specified as having mass and being in a gravitational field, and then an animation would be produced showing how it appears over time while it interacts with other objects.

The new Animation Software Design class won’t teach you all about computer animation or the software required to create computer animations, but it will give you a good introduction to both topics. For more information see:

To Top of Page