Professional Documents
Culture Documents
2 Softwareengeneering
2 Softwareengeneering
techniques
Software Engineering
11 avril 2022
1 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
2 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
En pratique
console.log('saved Image');
})
3 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software engineering
console.log('saved Image');
})
Main concepts
Software engineering
console.log('saved Image');
})
• Code snippets
• Libraries
• Functions
• Framework
5 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software engineering
console.log('saved Image');
})
• Prototype development
6 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software types
console.log('saved Image');
})
• S-type (static-type)
• P-type (practical-type)
• E-type (embedded-type)
7 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software types
console.log('saved Image');
})
S-type
8 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software types
console.log('saved Image');
})
P-type
9 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software types
console.log('saved Image');
})
E-type
10 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software types
console.log('saved Image');
})
11 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software types
console.log('saved Image');
})
12 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
13 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Programming languages
console.log('saved Image');
})
14 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
• Problems :
◦ heterogeneous network of applications of different design and
developers −→ slowly react on new requirements
◦ Some requirements (health domain) evolve faster (new drugs,
treatment protocols, etc.) −→ Software frequent update :
• Time consuming
• Expensive
• Software regression
15 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
16 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Models
console.log('saved Image');
})
• Blueprint :
◦ Diagrams that show most of the details of a system in order to foster
its understanding or to provide views of the code in a graphical form
◦ widely used in Model-Based Development (MBD) practices such as
the ones promoted by frameworks such as the Rational Unified
Process (RUP)
17 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Models
console.log('saved Image');
})
• Programming language :
◦ Can be used to fully characterize the application
◦ The diagrams replace the code, and they are compiled directly into
executable binaries
◦ Used at the core of Web Engineering Model-Driven Development
(MDD) approaches
18 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
• Reduces the gap between the business level and the information
technology level
• Improve software development process
20 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
• Portability :
◦ Separates the models and the transformations
◦ Height level models do not contain low level platform and technical
details
◦ Model can move across different tools environments
21 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Main concepts
22 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
23 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Models
• Composed of :
◦ Elements : which are the concepts of the domain
◦ Relationships between these elements
• Allows to :
◦ Well described problems using the terms familiar to people working in
the domain
◦ People involved to communicate and understand each other
25 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Models
26 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Models pyramid
- MOF
M3 - DL logic
Metametamodel
- UML
M2 - OWL
- BNF2, EBNF3
Metamodel
- UML models
- Ontologies
M1 - Grammarware
Model
- Executable source code
M0 - Knowledge base
- Model ware
Real world
27 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Development approaches
28 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Development process
29 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Development process
30 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
31 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Summary
32 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
MDA tools
33 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
• Eclipse software :
◦ Compound plug-in for graphical and textual model development
◦ Modeling categories involved tools : model development tools, model
transformation tools, concrete syntax development, abstract syntax
development
◦ Modeling standards involved : UML, SysML, OCL, etc.
34 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
35 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
• etc.
36 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Summary
Software
Generation tools source code
Models
Evolution / complements
• Requirement gathering
• System design
• Coding
• Testing
39 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
40 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Requirement gathering
41 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
System analysis
• The use of actors, use cases and class diagrams are good tools
42 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Testing
43 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
44 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Waterfall Model
The whole phases of SDLC will function one after another in linear
manner
45 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
V Model
At every stage, test plan and case are created to validate the product
46 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Iterative Model
47 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Spiral Model
48 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
49 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Agile Model
50 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Agile Model
51 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Problems
• For instance :
◦ The development team need agility : the design, build, code is done
continuously
◦ The operational team need stability : but the deployment is linear
−→ consequence :
◦ Conflicts between the dev and the op team of the company
◦ The code works on the developer laptop and bugs on the production
52 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Problems
53 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
54 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Useful tools
• Framework : Spring
55 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Useful tools
• BIRT / JASPER-iReport
56 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Quality software :
• Productivity : ratio of what is produced to what is required to
produce it
• Satisfaction :
57 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Design pattern
console.log('saved Image');
})
Design pattern
console.log('saved Image');
})
• Singleton
• Facade
• Adapter
• Decorator
• Dependency Injection
59 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
• Software creation
In progress
60 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Structured programming
61 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Structured programming
62 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Structured programming
63 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Functional programming
64 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Programming style
console.log('saved Image');
})
65 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software Documentation
console.log('saved Image');
})
66 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software Documentation
console.log('saved Image');
})
• Key tool for software designer, developer and the test team
• Contains all the functional, non-functional and behavioral
description of the software
• Obtained from :
◦ Previously stored data about the software
◦ Already running software at the client’s end
◦ Client’s interview
◦ Questionnaires and research
• Used in the analysis, design development and mainly used in
verification and validation
67 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software Documentation
console.log('saved Image');
})
Design documentation
68 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software Documentation
console.log('saved Image');
})
Technical documentation
69 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software Documentation
console.log('saved Image');
})
User documentation
• Explains how the software should work and how it should be used
• Involve :
◦ Software installation and uninstallation procedure
◦ User guidelines
◦ Software licence
◦ Updation
◦ etc.
70 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Code reuse
• Questions :
◦ How much code to re-use ?
◦ How to check the compatibility ?
71 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Version Management
72 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Target-Host
73 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software maintenance
console.log('saved Image');
})
74 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software maintenance
console.log('saved Image');
})
Types of maintenance
75 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software maintenance
console.log('saved Image');
})
Maintenance activities
Software Re-engineering
console.log('saved Image');
})
• Keep the functionality of the software and change the design and
the programs
77 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software Re-engineering
console.log('saved Image');
})
78 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Software Re-engineering
console.log('saved Image');
})
Main concepts
Reverse Engineering
• Achieve system specification by thoroughly analyzing,
understanding the existing system
• Designer looks at the code and get the design
• Use the design to conclude the specifications
Program Restructuring :
• use to facilitate maintenance and remove obsolete components
• re-structure and re-construct the existing software
• Involve source code, data or both
EDI
console.log('saved Image');
})
80 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
EDI
console.log('saved Image');
})
• Regroupe généralement :
◦ un éditeur de texte,
◦ un compilateur,
◦ des outils automatiques de fabrication,
◦ un débogueur,
◦ un système de gestion de versions,
◦ outils facilitant la création des interfaces graphiques
81 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
EDI
console.log('saved Image');
})
• Un débogueur
82 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
EDI
console.log('saved Image');
})
Quelques fonctionnalités
◦ Modélisation UML
83 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
EDI
console.log('saved Image');
})
Quelques EDI
84 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
EDI
console.log('saved Image');
})
Quelques EDI
• Eclipse :
◦ Originellement dédié à Java
◦ Ses extensions (plug-in) permettent de développer avec un grand
nombre de langages et de technologies (C, C++, PHP, modélisation
UML ...)
• Kdevelop :
◦ Environnement de développement du projet KDE (environnement de
bureau graphique sous Linux)
◦ Initialement dédié à C++ et Qt
◦ Peut gérer Java, PHP, Perl, Python etc.
• Microsoft Visual Studio :
◦ Conçut à l’origine pour le langage C++ et le langage Visual Basic
◦ Devenu l’environnement de référence de la plateforme .Net
◦ Une version gratuite existe : ”Visual Studio Express”
85 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
EDI
console.log('saved Image');
})
Quelques EDI
• NetBeans :
◦ développé par Sun Microsystems pour Java
◦ le paquetage officiel inclut en plus des technologies JAVA (Java SE,
Java EE, Java FX ...)
◦ intègre le support pour le développement en C++, Ruby et PHP
• phpDesigner :
◦ orienté utilisateur
◦ gère tous les langage Internet reconnus
◦ regroupe en natif tous les outils de développement Internet : html,
Tidy, phpDocumentor, XDebug, SVN ...
• Kompozer : permet de monter les pages web avec le principe
WYSIWYG
86 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
EDI
console.log('saved Image');
})
87 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Frameworks
console.log('saved Image');
})
Frameworks
console.log('saved Image');
})
89 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Frameworks
console.log('saved Image');
})
Frameworks
console.log('saved Image');
})
Exemples de frameworks
91 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
APIs
console.log('saved Image');
})
In progress
92 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Servers
console.log('saved Image');
})
93 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Servers
console.log('saved Image');
})
94 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Ant
console.log('saved Image');
})
95 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Ant
console.log('saved Image');
})
96 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Ant
console.log('saved Image');
})
97 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Ant
console.log('saved Image');
})
In progress
98 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Maven
console.log('saved Image');
})
• Il permet :
◦ D’automatiser certaines tâches : compilation, tests unitaires et
déploiement des applications qui composent le projet
99 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Git
102 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
git
103 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Outils de stockage
console.log('saved Image');
})
• Les fichiers
104 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Outils de stockage
console.log('saved Image');
})
SGBD
105 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Outils de stockage
console.log('saved Image');
})
SGBD
106 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Outils de stockage
console.log('saved Image');
})
SGBD
107 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
108 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
Outils de reporting
console.log('saved Image');
})
109 / 110
fun cases(obj: Any) {
when (obj) { int addSomeNums(int x, int y, [int z]) {
1 -> println("One") int sum = x + y;
"Hello" -> println("Greeting") if (z != null) {
is Long -> println("Long") sum += z;
!is String -> println("Not a string") }
else -> println("Unknown") return sum;
} }
}
En pratique
console.log('saved Image');
})
110 / 110