one “shadow” of an artifact to another “shadow” of
another artifact to find inconsistencies between these
artifacts. We call such a “shadow” of a software engi-
neering artifact as QSM (Quality Specific Model) in
this paper. If some inconsistencies about some quality
features are found through such comparison, we may
put emphasis on the features and use existing trace-
ability techniques only for the parts of the artifacts
where the features are related.
The rest of this paper is organized as follows. In
the next section, we review current techniques for
traceability and categorize them into two types. We
also review techniques for measuring quality require-
ments. To complement problems of current traceabil-
ity techniques, we propose another type of traceabil-
ity techniques called “projection traceability” in sec-
tion 3. In section 4, we concretely implemented a
method that can be categorized as projection trace-
ability based on spectrum analysis for quality require-
ments. An example for applying the method is shown
in section 5 to confirm the usefulness of the method.
Finally, we summarize our current results and show
the future issues.
2 RELATED WORKS
Software quality requirements are widely focused in
the field of software, and we can find its special
issue in 2008 IEEE Software (Blaine and Cleland-
Huang, 2008). In the issue, importance and chal-
lenges about software quality requirements were sum-
marized, and one of challenges is measurement and
traceability for software quality requirements. In this
section, we briefly review researches about measure-
ment and traceability for software quality require-
ments to clarify the importance of software qual-
ity requirements. We use NFR (Non-Functional Re-
quirements) as a synonym of quality requirements
even though NFR contains more things than qual-
ity requirements (Blaine and Cleland-Huang, 2008),
(Glinz, 2008).
First, we focus on traceability links among differ-
ent kinds of software engineering artifacts. Managing
explicit links among different artifacts is normal idea.
For example, links between a section in a require-
ments document and classes and packages in design
documents help us to find change impacts on design.
Figure 1 shows a general example using traceability
links. However, maintaining such links takes a lot
of efforts in general. To mitigate such effort, several
kinds of ideas are proposed. Lucia et al. used an infor-
mation retrieval technique to mange such links (Lucia
et al., 2009). Mandelin et al. used a probability model
Stop Machine
Toll Machine
Num Machine
Manager
Unit Price
IN
OUT
Stop Machine
Toll Machine
Num Machine
Manager
Unit Price
IN
OUT
<<bound ary>>
Admin
+ down() : void
+ gettime() : int
<<bound ary>>
Stop
+ message (param1 : String) : void
<<bound ary>>
TenKey
+ setPrice(price : int) : void
<<bound ary>>
Register
+ get() : int
+ set(p : int) : void
UnitPr ice
+ remov eTransaction(lot :i nt) : void
+ getTransactio n(lot : int) : Transaction
+ enter(lot :in t) : v oid
<<control>>
Enter
+ getLot () : int
+ set(lot : int, ti me : int) : void
+ term(exittime : int) : int
-entertime : int
-l ot : int
Transact ion
0..*
+ notifyPaid() : void
+ setLot(lot :i nt ) : void
<<control>>
Exit
<<bound ary>>
Admin
+ down() : void
+ gettime() : int
<<bound ary>>
Stop
+ message (param1 : String) : void
<<bound ary>>
TenKey
+ setPrice(price : int) : void
<<bound ary>>
Register
+ get() : int
+ set(p : int) : void
UnitPr ice
+ remov eTransaction(lot :i nt) : void
+ getTransactio n(lot : int) : Transaction
+ enter(lot :in t) : v oid
<<control>>
Enter
+ getLot () : int
+ set(lot : int, ti me : int) : void
+ term(exittime : int) : int
-entertime : int
-l ot : int
Transact ion
0..*
+ notifyPaid() : void
+ setLot(lot :i nt ) : void
<<control>>
Exit
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
ti me++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
ti me++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
ti me++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
ti me++;
return time;
}
}
Figure 1: Traceability links.
Stop Machine
Toll Machine
Num Machine
Manager
Unit Price
IN
OUT
Stop Machine
Toll Machine
Num Machine
Manager
Unit Price
IN
OUT
<<boundary> >
Admin
+ down() : void
+ gettime () : int
<<boundary> >
Stop
+ message (param1 : String) : void
<<boundary> >
TenKey
+ setPrice(price :i nt) : void
<<boundary> >
Register
+ get() : int
+ set(p : int) : void
UnitPr ice
+ remov eTransaction(lot :i nt ) : void
+ getTransactio n(lot : int) : Transaction
+ enter(lot :in t) : void
<<control>>
Enter
+ getLot () : int
+ set(lot : int, ti me :int ) : void
+ term(exittime : int) :int
- entertime: in t
- lot : int
Transaction
0..*
+ notifyPaid() : void
+ setLot(lot : int ) : void
<<control>>
Exit
<<boundary> >
Admin
+ down() : void
+ gettime () : int
<<boundary> >
Stop
+ message (param1 : String) : void
<<boundary> >
TenKey
+ setPrice(price :i nt) : void
<<boundary> >
Register
+ get() : int
+ set(p : int) : void
UnitPr ice
+ remov eTransaction(lot :i nt ) : void
+ getTransactio n(lot : int) : Transaction
+ enter(lot :in t) : void
<<control>>
Enter
+ getLot () : int
+ set(lot : int, ti me :int ) : void
+ term(exittime : int) :int
- entertime: in t
- lot : int
Transaction
0..*
+ notifyPaid() : void
+ setLot(lot : int ) : void
<<control>>
Exit
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
time++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
time++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
time++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
time++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
time++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
time++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
time++;
return time;
}
}
public class Stop {
private int time=0;
private Enter enter;
public void setEnter(Enter enter) {
this.enter = enter;
}
public int gettime() {
time++;
return time;
}
}
Figure 2: Central model.
Stop Machine
Toll Machine
Num Machine
Manager
Unit Price
IN
OUT
Stop Machine
Toll Machine
Num Machine
Manager
Unit Price
IN
OUT
<<boundary>>
Admin
+ down() : void
+ gettime() : int
<<boundary>>
Stop
+ message(param1 : String) : void
<<boundary>>
TenKey
+ setPrice(price :i nt) : void
<<boundary>>
Register
+ get() : int
+ set(p : int) : void
UnitPrice
+ removeTransaction(lot :int ) : void
+ getTransaction(lot : int) : Transaction
+ enter(lot :in t) : void
<<control>>
Enter
+ getLot() : int
+ set(lot : int, ti me :int ) : void
+ term(exittime : int) : int
-entertime :i nt
-lot : int
Transaction
0..*
+ notifyPaid() : void
+ setLot(lot : int) : void
<<control>>
Exit
<<boundary>>
Admin
+ down() : void
+ gettime() : int
<<boundary>>
Stop
+ message(param1 : String) : void
<<boundary>>
TenKey
+ setPrice(price :i nt) : void
<<boundary>>
Register
+ get() : int
+ set(p : int) : void
UnitPrice
+ removeTransaction(lot :int ) : void
+ getTransaction(lot : int) : Transaction
+ enter(lot :in t) : void
<<control>>
Enter
+ getLot() : int
+ set(lot : int, ti me :int ) : void
+ term(exittime : int) : int
-entertime :i nt
-lot : int
Transaction
0..*
+ notifyPaid() : void
+ setLot(lot : int) : void
<<control>>
Exit
public clas s Stop {
private int time=0;
private Ent er enter;
public void setEnter(Enter enter) {
this.enter = ent er;
}
public int gettime() {
ti me++;
return ti me;
}
}
public clas s Stop {
private int time=0;
private Ent er enter;
public void setEnter(Enter enter) {
this.enter = ent er;
}
public int gettime() {
ti me++;
return ti me;
}
}
public clas s Stop {
private int time=0;
private Ent er enter;
public void setEnter(Enter enter) {
this.enter = ent er;
}
public int gettime() {
ti me++;
return ti me;
}
}
public clas s Stop {
private int time=0;
private Ent er enter;
public void setEnter(Enter enter) {
this.enter = ent er;
}
public int gettime() {
ti me++;
return ti me;
}
}
public clas s Stop {
private int time=0;
private Ent er enter;
public void setEnter(Enter enter) {
this.enter = ent er;
}
public int gettime() {
ti me++;
return ti me;
}
}
public clas s Stop {
private int time=0;
private Ent er enter;
public void setEnter(Enter enter) {
this.enter = ent er;
}
public int gettime() {
ti me++;
return ti me;
}
}
public clas s Stop {
private int time=0;
private Ent er enter;
public void setEnter(Enter enter) {
this.enter = ent er;
}
public int gettime() {
ti me++;
return ti me;
}
}
public clas s Stop {
private int time=0;
private Ent er enter;
public void setEnter(Enter enter) {
this.enter = ent er;
}
public int gettime() {
ti me++;
return ti me;
}
}
Convert
(Projection)
Convert
(Projection)
Convert
(Projection)
Figure 3: Projection traceability.
to do that (Mandelin et al., 2005). Ratanotayanon et
al. used differences between different versions of ar-
tifacts to manage traceability links efficiently (Ratan-
otayanon et al., 2009). Lopez et al. used techniques
of NLP (Natural Language Processing) and ML (Ma-
chine Learning) to trace quality requirements to archi-
tecture (Gokyer et al., 2008).
ICSOFT 2010 - 5th International Conference on Software and Data Technologies
188