Posts Tagged ‘requirements’
Case studies in requirements engineering research
I maintain (occasionally) a list of common case studies in the RE literature. These are extended examples or model problems, really, which can be used to compare various formalisms. I have links to the data and academic literature.
A common complaint in reviewing research papers is lack of real-world evaluation. But before we get to the thousands of requirements common in industry, we ought to also verify our approach with frequently used examples from the existing literature. I feel that ‘real-world’ is a substitute for voluminous; but often the problem is not (just) the sheer scale, but the interesting edge cases. For that job, I prefer we evaluate our work on smaller, easily understandable model problems.
The page is maintained at the software group’s web page, here.
Future directions of Agile
I just watched an excellent presentation by David Anderson at the Agile 08 conference. He talked about moving agile to more complex, enterprise-scale projects, and how the current agile practices work.
My big take-away was his characterization of requirements as ‘perishable’. In his view, unmet requirements are like unsold inventory, essentially liabilities until they can be turned into working systems. He borrows from the just-in-time philosophy of Lean manufacturing to emphasize how unsatisfied requirements ought to be taken off the shelf and implemented as soon as possible.
In his view, future software/system architecture decisions will be much higher-level, business-value decisions. He mentioned software product lines as an example: the architect is someone who can separate product variability and encapsulate common behaviour, rather than over-specifying lower-level designs. There will be an increased need for ‘customer intimacy’ to generate unique systems that capture a core competency or competitive advantage.
There’s a lot more in this talk, including some interesting ideas on community evolution, so it’s well worth the time to watch.
On "Capabilities Engineering"
“Improving change tolerance through Capabilities-based design: an empirical analysis“, by Ramya Ravichandar, James D. Arthur, Shawn A. Bohner and David P. Tegarden. J. Softw. Maint. Evol.: Res. Pract. 2008; 20:135–170
The scope of this paper is building software systems that are change tolerant, where “the term ‘change tolerance’ connotes the ability of software to evolve within the bounds that it was designed”. It’s important to keep in mind the phrase “within the bounds” — this limits this technique to de novo design, rather than adaptive design (i.e., design that admits new components after the initial implementation). Any design that is designed to be change tolerant necessarily requires identification of potential changes up-front. And the authors acknowledge this with a small dig at agile techniques as being ‘unconventional’ (not anymore) and unproven (unlike the enormous body of evidence supporting waterfall processes
.
It would seem the focus of the paper is on complex, emergent systems: “requirements and technology often evolve during the extended development periods of complex emergent systems, and thereby, inhibit a comprehensive up-front solution specification” (agreed); yet the empirical assessment is of a course evaluation system. They measure how many classes are impacted by each change to assess how CE reduces change impact.
There are several problems with their empirical assessment. First, they compare “RE-based design” with their technique. They obtain the RE-design by reverse engineering an existing system, but they have not validated it as a ‘good’ design (we need to compare apples and apples, right — both designs should have been created using the same amount of effort and skill). Second, the selection of change events is questionable; that the authors chose the change events implies bias in choosing those the CE-design is suited for. Finally, this system seems excessively trivial for a complex emergent system, as I mentioned before. Of course, it isn’t easy to evaluate truly complex systems.
Capability engineering is a combination of abstraction, reduced coupling, and high cohesion design (which really tells us nothing — who out there is designing systems that have high coupling and low cohesion? Possibly a few embedded systems, but not much else, I would wager). The key to the whole thing seems to be the functional decomposition, which is independent of system architecture/specification, and derived from user requirements. This commits the process fairly heavily to up-front requirements elicitiation, which is odd, since they claim to be concerned with complex, emergent systems, where (to my mind) requirements are never completely known from the beginning.
Complaints:
- no reference is made to feature modeling, which seems nearly identical;
- a bad case of EMS (Excessive Math Syndrome): too much detail about cohesion metrics, or algorithms for system design, when the real issue is coming up with the source numbers (anyone remember GIGO?);
- conclusion marred by the confounding factor that the RE-system might just be poorly designed;
- no reference to work on autonomic monitoring and correction (see Yiqiao‘s work).
Full marks:
- acknowledging the issue of change in software systems (although I’m biased)
- actually proposing a theory and testing it!
- discussing threats to validity
What I liked the most about this paper was its fairly scientific setup. I don’t agree that capability engineering is the panacea, but at least I can make concrete objections thanks to their well-structured paper.
Requirements, agility, and stability
Having returned from the Requirements Engineering conference in Barcelona, I’ve been pondering where my own research fits with the talks I listened to. One of my concerns, perhaps needless, is the relevance of my research to practice (both current and potential). The RE conference has parallel streams of industrial reports and academic papers, to emphasize the purpose of research, I suppose (although other fields don’t seem as concerned as we are with relevance).
Many of the tools I’ve worked on are fairly heavyweight, and assume a fairly large degree of co-operation from the user regarding his/her commitment to the modeling process. But is such a tool important for most users?
Siemens, for example, presents numerous reports each year at the conference arguing for heavy process around requirements engineering, but since it is the RE department presenting the research, it’s hard to tell how much these tools and methodologies are appreciated internally.
Microsoft, apparently, uses documentation extensively in development (security analysis, i18n analysis, performance analysis, etc), but one might argue that this is hardly an endorsement. I’m not familiar with what Google tries, but my sense is that they are much more about the competitive environment for new ideas (and have many fewer challenges with respect to legacy systems support).
Cringely has a good post about organizational support for innovation. In it, he quotes the following: “You wouldn’t need “change management” if you made continuous improvements at the functional level the responsibility of every individual and team cluster (Janna Raye),” So it would seem that in the industrial context, there is a big difference in how, and what, requirements practices are used.
The questions that one must consider is clearly one of future directions. Jorge Aranda‘s paper suggests that for many small and medium-sized companies, at least, the use of requirements models (and associated tooling) will be (is) negligible. The business analysts, who are probably also programmers, generally understand the environment very well, and tweak their product to accommodate new clients, rather than doing revolutionary design.
Greg Wilson characterizes one dimension of software systems according to how agile or stable they are. An agile system to him is one that tries to duck the punches of unanticipated evolutionary changes; a stable system tries to build itself so solidly that these changes cannot affect it.
Martin Fowler, in turn, characterizes these as evolving or planned designs. Clearly for planned designs tools and models become more important (though arguably still not necessary). Evolving designs focus more on working code, code as documentation, and testing as the way to verify the match between requirements and implementation.
A colleague of Fowler’s at Thoughtworks proposes Consumer-driven contracts, essentially user stories for web services: “To recognise the specific benefits and outcomes supported by a service, we need to understand that service in its collaborative context.” How they help with change management: “consumer-driven contracts help contextualise compatibility issues based on extant obligations and relationships. A change to a mandatory element need not always be considered a breaking change; rather, changes that require some form of versioning can be identified with reference to the consumer contracts they break. If existing consumers aren’t using a mandatory message element, then changing or removing that element need no longer be considered a breaking change.”
This turns the burden of change management over to the client, requiring him/her to determine his/her needs, and then managing the change in that context. Previously, a new release from, for example, Oracle, required a fairly binary decision from the IT department: thumbs up or thumbs down on the new product update. In the service world, the promise is that such monolithic upgrades will be a thing of the past.
The requirements problem doesn’t disappear, of course. Indeed, a consumer-driven contract is a form of customer requirement, which should be (largely) satisfied to build a successful project. What is changing is the form these requirements take: rather than large, static, possibly stale models, the requirements might take the form of acceptance tests, behavioural checks, or quality of service policies.
In terms of my research, which focuses on unanticipated changes to a system domain, the relevant questions surround a) understanding how this type of evolution might be best characterized (yes, yet another taxonomy) and b) what type of tool support might help manage these situations. My current thinking is that while change is always unanticipated in some form, we should attempt to support processes for deciding how to adapt to that change.
The requirements problem defined
Here’s a useful way of thinking about how requirements, implementation, and preferences interact:
Below are the ways these things are defined. Essentially, we are seeking a set of plans, P, that will satisfy the functional requirements, G, the qualities, Q, according to stakeholder attitudes, A, without violating the domain assumptions, K.
- Definition 1. Believed content, i.e., ϕ in Bϕ, communicated by way of assertive, declarative, or representative declarative speech acts is a domain assumption, denoted generically k.
- Definition 2. Desired content, i.e., ϕ in Dϕ, communicated by way of a directive speech act is a quality constraint, denoted q, if and only if ϕ describes qualities and constrains quality values. Described qualities must have quality space with a well-defined and shared structure.
- Definition 3. Desired content, i.e., ϕ in Dϕ, communicated by way of a directive speech act is a goal, denoted g, if and only if ϕ neither describes qualities nor constrains quality values.
- Definition 4. Desired content, i.e., ϕ in Dϕ, communicated by way of a directive speech act is a softgoal, denoted ˆq, if and only if ϕ describes qualities or constrains quality values, whereby the described qualities must have a quality space with a subjective and/or ill-defined structure.
- Definition 5. There is a justified approximation, denoted jApprox(ˆq; q) if and only if there is a justification for the claim “q approximates ˆq” and there is sufficient correlation between values in the quality space of q and the quality space of ˆq.
- Definition 6. Intended content, i.e., ϕ in Iϕ, communicated by way of a commissive speech act is a plan, denoted p.
- Definition 7. Attitudinal content communicated by way of an expressive speech act, i.e., ϕ in Aϕ, is an attitude, denoted a, if and only if it evaluates in terms of favor or disfavor one or more elements constituting K, P, G, Q, or ˆQ.
This is from Jureta, Mylopoulos and Faulkner, 2008, ‘Revisiting the Core Ontology and Problem in Requirements Engineering“.

