Download - Spyware-ridden software development
![Page 1: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/1.jpg)
Romain RobbesMichele Lanza
Facoltàdi scienzeinformatiche
UniversitàdellaSvizzeraitaliana
ESUG2006
Spyware-ridden software
development
![Page 2: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/2.jpg)
Context
What is SpyWare?
Results & demo
Further possibilities
Romain Robbes Spyware-ridden software development
SpyWare is a research prototype built for my Ph.D.
2
SpyWare
75%
25%
?
?
![Page 3: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/3.jpg)
Romain Robbes Spyware-ridden software development
More than 3/4 of the cost of software is maintenance*
3
75%
25%
initial effortmaintenance
“A program that is used in a real-world environment must change, or become progressively less useful in that environment. ” – Lehman’s laws
* from: http://www.cs.jyu.fi/~koskinen/smcosts.htm
75%
25%
![Page 4: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/4.jpg)
Romain Robbes Spyware-ridden software development
The lifecycle of software
4
RequirementsGathering
Understanding &Reengineering
Design &Implementation
75%
25%
![Page 5: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/5.jpg)
Romain Robbes Spyware-ridden software development
Software development is incremental
5
Version 4Version 1 Version 2 Version 3
75%
25%
![Page 6: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/6.jpg)
Romain Robbes Spyware-ridden software development
Software development is incremental
5
Version 4Version 1 Version 2 Version 3
checkout
commit
debugadd feature
75%
25%
![Page 7: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/7.jpg)
Romain Robbes Spyware-ridden software development
Software development is incremental
5
Version 4Version 1 Version 2 Version 3
checkout
commit
debugadd feature
add method
add class
add method
75%
25%
![Page 8: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/8.jpg)
Romain Robbes Spyware-ridden software development
Languages and methodologies target this problem
6
The holy trinity?
75%
25%
![Page 9: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/9.jpg)
Romain Robbes Spyware-ridden software development
The change rate of the software increases
7
It is easier to lose reference points
Evolvability and understandability are at odds
XP states that the software is in maintenance 100% of the time ...
Are conventional reengineering tools adapted to agile development?
75%
25%
![Page 10: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/10.jpg)
Romain Robbes Spyware-ridden software development
Software evolution analysis helps reengineering
8
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
ConcreteA
- asdf: int+ bar(): void
ConcreteB
Bar
- stuff+ factory(): Bar
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
FooHistory holds useful information
Versioningsystem
Metrics &
trends
75%
25%
![Page 11: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/11.jpg)
Romain Robbes Spyware-ridden software development
Versioning systems lose information
9
75%
25%
![Page 12: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/12.jpg)
Romain Robbes Spyware-ridden software development
> cvs update
Versioning systems lose information
9
75%
25%
![Page 13: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/13.jpg)
Romain Robbes Spyware-ridden software development
> cvs update> vim Foo.cc
Versioning systems lose information
9
75%
25%
![Page 14: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/14.jpg)
Romain Robbes Spyware-ridden software development
> cvs update> vim Foo.cc(some work done...)
Versioning systems lose information
9
75%
25%
![Page 15: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/15.jpg)
Romain Robbes Spyware-ridden software development
> cvs update> vim Foo.cc(some work done...)> cvs commit
Versioning systems lose information
9
75%
25%
![Page 16: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/16.jpg)
Romain Robbes Spyware-ridden software development
> cvs update> vim Foo.cc(some work done...)> cvs commit ?
Versioning systems lose information
?9
75%
25%
![Page 17: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/17.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
10
75%
25%
![Page 18: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/18.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
1.Extract method
10
75%
25%
![Page 19: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/19.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
1.Extract method
10
75%
25%
![Page 20: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/20.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
1.Extract method2.Rename method
10
75%
25%
![Page 21: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/21.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
1.Extract method2.Rename method
10
75%
25%
![Page 22: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/22.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
1.Extract method2.Rename method3.Create accessors
10
75%
25%
![Page 23: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/23.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
1.Extract method2.Rename method3.Create accessors
10
75%
25%
![Page 24: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/24.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
1.Extract method2.Rename method3.Create accessors
+18 / -11CVS:
10
75%
25%
![Page 25: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/25.jpg)
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar(z);
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
Romain Robbes Spyware-ridden software development
Our paranoid programmer saves every 5 minutes
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
1.Extract method2.Rename method3.Create accessors
+18 / -11CVS:
10
75%
25%
![Page 26: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/26.jpg)
Romain Robbes Spyware-ridden software development
Recapitulation
11
Software evolution is hard but necessary
Agile practices make it change even faster
Versioning systems are inappropriate sources of information for SE tools
75%
25%
75%
25%
Versioningsystem
![Page 27: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/27.jpg)
Romain Robbes Spyware-ridden software development
The principles behind SpyWare
12
1.Model changes, not versions
2.Use the IDE, not the code repository
3.Provide tools in the IDE
?
![Page 28: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/28.jpg)
Romain Robbes Spyware-ridden software development
Modelling and capturing change information
Rather than storing versions, we record the semantic actions of the programmer
13
ConcreteA
- asdf: int+ bar(): void
ConcreteB
Bar
- stuff+ factory(): Bar
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
?
![Page 29: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/29.jpg)
Romain Robbes Spyware-ridden software development
Modelling and capturing change information
Rather than storing versions, we record the semantic actions of the programmer
13
ConcreteA
- asdf: int+ bar(): void
ConcreteB
Bar
- stuff+ factory(): Bar
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
add class
add method
rename class
add attribute
change method
change method
?
![Page 30: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/30.jpg)
Romain Robbes Spyware-ridden software development
The general architecture of SpyWare
14
IDESpyWare
pluginChange
repository
Tools
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
:
?
![Page 31: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/31.jpg)
Romain Robbes Spyware-ridden software development
How does SpyWare work?
15
?
![Page 32: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/32.jpg)
Romain Robbes Spyware-ridden software development
How does SpyWare work?
15
myNewMethod: foo
?
![Page 33: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/33.jpg)
Romain Robbes Spyware-ridden software development
How does SpyWare work?
15
myNewMethod: fooself bar: foo + 1.
?
![Page 34: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/34.jpg)
Romain Robbes Spyware-ridden software development
How does SpyWare work?
15
myNewMethod: fooself bar: foo + 1.self baz: foo - 1.
?
![Page 35: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/35.jpg)
Romain Robbes Spyware-ridden software development
How does SpyWare work?
15
myNewMethod: fooself bar: foo + 1.self baz: foo - 1.
Incremental compilation
Method compiled!
?
![Page 36: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/36.jpg)
Romain Robbes Spyware-ridden software development
How does SpyWare work?
15
myNewMethod: fooself bar: foo + 1.self baz: foo - 1.
?
![Page 37: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/37.jpg)
Romain Robbes Spyware-ridden software development
The change builder infers change information
16
?
![Page 38: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/38.jpg)
Romain Robbes Spyware-ridden software development
The change builder infers change information
16
Method compiled!
?
![Page 39: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/39.jpg)
Romain Robbes Spyware-ridden software development
The change builder infers change information
16
Is it a new one?
Yes!
Who? when?
Romain Robbes@ 21h32
?
![Page 40: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/40.jpg)
Romain Robbes Spyware-ridden software development
The change builder infers change information
16
create method
add to class
create variable
add to method
OK...
?
![Page 41: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/41.jpg)
Romain Robbes Spyware-ridden software development
The change builder infers change information
16
?
![Page 42: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/42.jpg)
Romain Robbes Spyware-ridden software development
Tools exploit the changes
17
Model maintainer
Bar
quux
baz:
?
![Page 43: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/43.jpg)
Romain Robbes Spyware-ridden software development
Tools exploit the changes
17
create method
add to class
create variable
add to method
Model maintainer
Bar
quux
baz:
?
![Page 44: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/44.jpg)
Romain Robbes Spyware-ridden software development
Tools exploit the changes
17
create method
add to class
create variable
add to method
Model maintainer
Bar
fooquux
baz: myNewMethod:
?
![Page 45: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/45.jpg)
Romain Robbes Spyware-ridden software development
SpyWare case studies:
18
SpyWare×9 ×1
![Page 46: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/46.jpg)
Romain Robbes Spyware-ridden software development
Short SpyWare demo
19
SpyWare
![Page 47: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/47.jpg)
Romain Robbes Spyware-ridden software development
Future possibilities
20
Several tools can be implemented on top of this mechanism: here are a few.
?
![Page 48: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/48.jpg)
Romain Robbes Spyware-ridden software development
Fine-grained software evolution analysis
21
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar();
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
class Foo {
private int x;
private int y;
public getX() { return x; }
public setX(newX) { x = newX; }
public getY() { return y; }
public setY(newY) { y = newY; }
public baz() {
blah.blah(blah);
z = getX() + getY();
return bar();
}
public quux() {
return getY() + 4;
}
public asdf() {
return getX() * 8 + getY();
}
private bar(z) {
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
}
f = new Foo();
f.baz();
print f.getX() + f.getY();
class Foo {
public int x;
public int y;
public doFoo() {
blah.blah(blah);
z = x + y;
blu = blu * 2;
t = blurg(z);
bli[t] = blu;
return t;
}
public quux() {
return y + 4;
}
public asdf() {
return x * 8 + y;
}
}
f = new Foo();
f.doFoo();
print f.x + f.y;
VersioningSystem
IDE
?
?
![Page 49: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/49.jpg)
Romain Robbes Spyware-ridden software development
Query and understand recent changes
22
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
?
![Page 50: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/50.jpg)
Romain Robbes Spyware-ridden software development
Query and understand recent changes
22
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
?
![Page 51: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/51.jpg)
Romain Robbes Spyware-ridden software development
Query and understand recent changes
22
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
?
![Page 52: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/52.jpg)
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
Romain Robbes Spyware-ridden software development
Find precise causes of bugs
23
?
![Page 53: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/53.jpg)
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
Romain Robbes Spyware-ridden software development
Find precise causes of bugs
23
?
![Page 54: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/54.jpg)
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
Romain Robbes Spyware-ridden software development
Find precise causes of bugs
23
?
![Page 55: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/55.jpg)
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
Romain Robbes Spyware-ridden software development
Find precise causes of bugs
23
:-)
?
![Page 56: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/56.jpg)
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
Romain Robbes Spyware-ridden software development
Find precise causes of bugs
23
:-)
?
![Page 57: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/57.jpg)
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
Bar
Foo
- asdf: int+ Foo(c: int)+ bar(): void
Quux
Romain Robbes Spyware-ridden software development
Find precise causes of bugs
23
:-)
?
![Page 58: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/58.jpg)
Romain Robbes Spyware-ridden software development
Find merge conflicts faster
24
?
![Page 59: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/59.jpg)
Romain Robbes Spyware-ridden software development
Find merge conflicts faster
24
!
!
?
![Page 60: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/60.jpg)
Romain Robbes Spyware-ridden software development
Conclusions
25
![Page 61: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/61.jpg)
Romain Robbes Spyware-ridden software development
SpyWare introduces a model of software changes
26
+ no information lost+ accuracy+ tool support
ConcreteA
- asdf: int+ bar(): void
ConcreteB
Bar
- stuff+ factory(): Bar
ConcreteA
- asdf: int+ bar(): void+ baz(): int
ConcreteB
AbstractBar
- stuff- other+ factory(): AbstractBar
Foo
- performance?- space?- validation?
![Page 62: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/62.jpg)
FOR SPYWARE NOWhttp://romain.robb.es/spyware
![Page 63: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/63.jpg)
![Page 64: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/64.jpg)
Entity- id
History- changes
Change- id- timestamp- author
EntityState- entity- parent- children- properties
1
1
1 *
1 *
1
*
Romain Robbes Spyware-ridden software development
Our model emphasizes changes over entities
29
![Page 65: Spyware-ridden software development](https://reader034.vdocuments.us/reader034/viewer/2022051513/545ad9ccaf7959755d8b5dd8/html5/thumbnails/65.jpg)
Romain Robbes Spyware-ridden software development
Spyware versus the change log
30
Ad-hoc format (a bunch of do-its)Not aware of refactoringsTied to one imageData loss because of purgesExporting with change sets only keeps the last version of a method