Software architects have techniques to deal with many quality attributes such as performance, reliability, and maintainability. Usability, however, has traditionally been concerned...
When performing a program evolution task, developers typically spend a significant amount of effort investigating and re-investigating source code. To reduce this effort, we prop...
Design patterns are applied in software development to decouple individual concerns, so that a change in a design decision is isolated to one location of the code base. However, m...
Formal models of rational user behaviour are essential for user-centred reasoning about interactive systems. At an level, planned behaviour and reactive behaviour are two importan...
The association between the description of a concern (e.g., a feature) and the code that implements it is valuable information that can degrade as the code of a system evolves. We...