In Computer Science, we often think about programs as ends in themselves. We ask the question of how to write a payroll program (cf Phoenix Pay example (new Canadian Federal payroll system circa 2016) ), often without giving much thought to the bigger question of how the pay system works and how we in tend to change it. While the payroll program may have many interacting parts, it is just a single component in the larger pay system. Ultimately the usefulness of the payroll program is derived from the success of the pay system in which it is embedded. While the need to change the payroll program sometimes comes from internal component problems, more often it comes from difficulties derived from its interaction with the rest of the pay system. Properties of the payroll program, such as security, derive from how it used in the wider pay system and are not internal properties of the software itself. A systems person would say that security is an emergent property of the payroll system itself and not a property of any particular component of the system.
The interface between the pay systems designer and the payroll program designer is the requirements (constraints) that the payroll program is supposed to satisfy in order to function properly in the pay system. Functional requirements are about what the program is supposed to do (such as withhold taxes properly). Nonfunctional requirements are usually about emergent properties of the system that the program is supposed to fit into (such as being `secure').
This particular course is interested in three particular nonfunctional requirements: safety, accessibility, and sustainability. Each of these clearly raises issues of how software components fit into larger socio-technical systems. Some of the basic questions that arise are what is meant by each of these requirements and how do you verify that you have actually met such requirements.
The wiki built of material to support this course has many parts. Four parts can be thought of as context components, i.e., providing information more general than the task at hand to provide background for the main goal of the course:
- Thinking about systems
- Overview of non-functional software requirements and requirements engineering
- How other non-functional requirements figure into software systems
- Writing papers in computer science
The material on the three focus topics of the course can be found in:
- How safety requirements figure into software systems
- How accessibility requirements figure into software systems
- How sustainability requirements figure into software systems