OOSAAD Topic 9 Complimentary System Analysis Methods

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 51

Object-Oriented

System Analysis and Design


Topic 9:
Complementary Analysis and Design
Methods

© NCC Education Limited


Complimentary System Analysis Methods Topic 9 -
92

Scope and Coverage

This topic will cover:


• CRC (Class, responsibility, Collaborations) Cards
• OCL (Object Constraint Language)
Object-Oriented System Analysis and Design
Topic 1 - 1.3

Unit Roadmap
This unit is separated to 12 lessons as below:
1. Introduction to Systems Analysis and Design
2. Requirements Elicitation
3. Introduction to Object-Oriented Analysis and Design (OOAD)
4. OO Methods, Methodologies and Tools; Use Case Modelling
5. Class Diagrams
6. Behavioural Models: State Diagrams; Activity Diagrams
7. Behavioural Models: Sequence Diagrams
8. Case Study
9. Complementary OO methods: CRC Cards and OCL
10. OO Design
11. Quality Management and Control/Software Quality Assurance
12. Unit Summary
Complimentary System Analysis Methods Topic 9 -
94

Learning Outcomes

By the end of this topic students will be able to:


• Use CRC cards to identify and represent Classes
• Enhance formality of constraints by using a popular
definition language
• Use software tools to create appropriate Object-Oriented
models
Topic 9: Complimentary System Analysis
Methods
Lecture 1:
Introduction to CRC Cards and Object
Constrained Language (OCL)
© NCC Education Limited
Complimentary System Analysis Methods Topic 9 -
96

Class-Responsibilities-Collaborator Cards
Agile Method created by Kent Beck and Ward Cunningham (1989)

• Responsibility Driven Design (RDD) approach for creating


Classes
• Record responsibility of classes – one card per class
- A CRC card represents a class of objects; defining its responsibilities,
behaviour and interactions.
- Shows which objects interact and how – helps identify associations
between Classes
• Created in group brainstorming sessions
- Walk-through scenarios are used to simulate the functions of the
application to be modelled
- Each team member can represent a card to nail down its
responsibilities
• The set of cards constitute an object oriented model of the
problem.
• Offer an inexpensive, informal and familiar way of
understanding the OOP paradigm
Not a part of UML – some refer to as Candidate, Responsibilities,
Collaborators
Complimentary System Analysis Methods Topic 9 -
97

CRC Card
Back of Card
data dictionary
Class Description:
type description
of class
Front of Card Attributes:
Class Name:
position Superclass:
in class Subclass:
hierarc
Responsibilitie Collaborators
hy
s: design focuses on behaviours
i.e. responsibilities, and not
attributes, thus attribute info
on back of card
• Can be written in Class(es) that help the class undertake its
structured English or use responsibilities
case style •Too many collaborators suggest high
coupling
Complimentary System Analysis Methods Topic 9 -
98

CRC Card for an ATM machine


Front of Card Back of Card
Class Name: ATM Class Description: One of the
ways for dispensing cash from
Superclass: CashDispenser
and depositing to a bank
Subclass: account.
Responsibilities: Collaborat Attributes:
Accept Card ors:
TransactionNumber
Verify Card Card
CardNumber
Display / Print Bank
TransactionDate
Balance Account
TransactionStartTime
Dispense Cash TransactionFinishTime
Accept Deposit TransactionAmount
Display / Print TranactionType
Transaction
Return Card
Complimentary System Analysis Methods Topic 9 -
99

CRC Card for a Dice


Front of Card Back of Card
Class Name: Dice Class Description: 6 sides
Superclass: None object that is thrown to
provide a random number
Subclass:
between 1 and 6.
Responsibilit Collaborator
ies: s:
Attributes:
Throw Dice game
diceValue
Show Value player
board
Complimentary System Analysis Methods Topic 9 -
910

Responsibility-Driven design (RDD) fundamentals

Two types of Responsibilities


responsibility are not methods
- But are implemented by
- Doing means of methods that
 Acting e.g creating and object or
act alone or in
performing a calculation (deriving) collaboration with other
 Initiating an action in other objects
 Controlling and coordinating activities methods and objects
other objects GRASP principles or
patterns can also be
- Knowing
 About private encapsulation data used to help assign
 About related objects responsibilities
 Things it can derive or calculate - Mainly applied when
drawing interaction
- Some include 3rd: Deciding diagrams

Responsibility = Obligation
to perform a task or know
information
Complimentary System Analysis Methods Topic 9 -
911

Identifying Responsibilities
• Object role stereotypes RDD Principles
and purpose statements 1.Maximise
• Use cases and scenarios abstraction: Hide
• Conditional chains distinction
• Relationships and between data and
dependencies behaviour
• Class Life events 2.Distribute
Behaviour:
• Technical aspects of Delegated control
software environment architecture with
smart objects
3.Preserve
Flexibility
Complimentary System Analysis Methods Topic 9 -
912

Reviewing CRC cards


• Give each review participant a subset of the CRC cards
(collaborating cards must be separated)
• Organise use-case scenarios and use-case diagrams into
categories
• Choose a use-case scenario and read it out loud
• Each time a named object is read, pass a token to the reviewer
holding the object's card
• When the reviewer receives the token, he or she must describe the
responsibilities listed on the card
• The group determines whether one of the responsibilities on the
card satisfy the use-case
• If the responsibilities and collaborations on the index card cannot
accommodate the use-case requirements then modifications need
to be made to the card set
Complimentary System Analysis Methods Topic 9 -
913

Checkpoint Summary
• CRC Cards promote Responsibility driven design
- Helpful for identifying class relationships/collaborations
- Provide useful links between Class diagrams, Use case
and Interaction Diagrams
• Component Diagrams and Package Diagrams
can also be used to show sets of collaborating
classes (not covered at this level)

• We now introduce Object Constrained Language


(OCL)
Complimentary System Analysis Methods Topic 9 -
914

Introduction to Object Constraint Language (OCL)

General purpose (textual) formal language


 Originated in Steve Cook and John Daniels’ Syntropy
 Developed at IBM by Jos Warmer as a Business
Development Language
 Adopted as standard add-on to UML by OMG – see
OMG for specification document
 Now also key part of Model-driven engineering
Is formal and unambiguous, easy to read
 Allows consistent descriptions that can be migrated to code
 Has mathematical foundations but is not mathematical:
based on set theory, predicate logic, formal maths semantics
Is not procedural language so cannot specify
control flow
Complimentary System Analysis Methods Topic 9 -
915

Why Use OCL


Ensure consistent and unambiguous description of
constraints /rules /restrictions also referred to
as contracts or assumptions and other
expressions attached to UML models or other
models
 Specify signatures and visibility
 Describe post and pre conditions e.g as defined by Guards
 Other expressions also define initial values of attributes or association
ends, computations or calculations
 As a query language i.e extract data views but not change data

Used on Classifiers:
 types, classes, interfaces, associations acting as types, data types,
attributes, association ends, methods

To formalise annotations / comments


Complimentary System Analysis Methods Topic 9 -
916

OCL Characteristics
Strongly typed language (Like java, Eiffel, C#,
Delphi…)
 Each expression evaluates to a type:
‒ Predefined types
• Primitive / Basic Types: integer, real, boolean, string, date
• Collection types: Set, Bag, OrderedSet, Sequence
‒ User defined type
 Conforms to rules of the type

Declarative
 They specify and evaluate facts (i.e. what is true) not what
must be done
 Similar operators to most Development Environments

Has no side effects i.e. can query or constrain but


not modify
Complimentary System Analysis Methods Topic 9 -
917

Main OCL Keywords/Stereotypes

Body As a query language


Inv Describe <<invariant>> stereotype: most
commonly used
Pre / Post Describe Contract stereotypes:
<<precondition>>
<<postcondition>>
Init Initialise class properties. Assumes value
can change later.
Derive Show how values must be computed
/calculated
Complimentary System Analysis Methods Topic 9 -
918

OCL Usage Examples


• Can be attached to diagrams using notes
• Added direct to an element such as an association
line, state transition or message line, next to an
attribute – expressions is placed in curly brackets
{}
• As an expression in a fragment of a Sequence or
Communication diagram
• In a Specification Document

Example of StarUML
prompts
Complimentary System Analysis Methods Topic 9 -
919

Using notes
Notes can be used to maintain readability of
diagrams {init: today()}
e.g
Customer derive: if getCategory() = “Education” or
”Charity” then 15% else 25%
StartDate: date
Inv: {getAge(dob)=>17
custDiscount: real
dob body: getAge(dob)=>17 and p.CanSee(eyes)
getAge(dob): - - These constraints are based on
companies operation code
integer
CanSee(eyes): }
Boolean
Comments: The note above includes an example of a
canDrive(): Boolean
comment
Add comments as development notes for yourself and
other developer
• added by preceding them with two dashes - - This is a
comment
Complimentary System Analysis Methods Topic 9 -
920

Directly on Element: Class Diagram Example

{self.Bus.disc=10%
Pensioner Customer
and
{customer.age>67} self.Dom.disc=15%}
customerid:string
{unique}
Predefined startDate: date
Constraint Assum
=today
es init
disc:real

Dom
Bus {getAge(dob)=>17 } Assumes
derive
BusinessName:stri {XOR} DoB:date also
ng /Age:int = {today-dob} implied
BusinessType:busty {readOnly}
by /
pes CanSee(eyes): Boolean
canDrive(): Boolean
Complimentary System Analysis Methods Topic 9 -
921

Directly on Element: Sequence Diagram Fragment Example

Other Fragment/Operator Types

In above examples pre and post are


redundant i.e. would have been assumed
Complimentary System Analysis Methods Topic 9 -
922

Directly on Element using {}: State Diagram Example


Topic 9: Lecture 2
More on Object Constrained
Language (OCL)

© NCC Education Limited


Complimentary System Analysis Methods Topic 9 -
924

OCL expressions: Context


• Each Ocl expression is evaluated in the context of an
instance of a specific classifier
• context typeName::operationName(arg:type…): returnType keyword:
constraint expression
• context typeName::attributeName(arg:type…): returnType keyword:
constraint expression
• If constraint is tagged to the relevant element then
context is not required – the expression would
normally be in curly brackets{}
• TypeName can refer to:
- A class as context ClassName e.g context Student
- An operation as
context ClassName::OperationName(param1:type1..):TypeReturned
e.g context Student calcAge(dob,date):Integer
- An attribute as context Classname::AttributeName:AttributeType
e.g context Student::age:integer
Complimentary System Analysis Methods Topic 9 -
925

Other Reserved Words / common practice


Self
 Refers to the element itself i.e. contextual instance / typeName
e.g context Student::inv: self.modules:integer = 6
 can be omitted if no ambiguity e.g. context Student::inv: modules = 6
 Can also be replaced by a name for the context
e.g context s:Student::inv: s.modules:integer = 6
 Constraint can also have name placed after keyword
e.g context s:Student ::inv moduleCount: s.modules:integer = 6

. (dot) accesses properties i.e. navigation from object using attribute or


operation object.property – called a navigation operator e.g
context Car::inv: getColor(car.color)
Result
Denotes result of an operation
e.g context Student::modules(n):integer post: result = 6
Complimentary System Analysis Methods Topic 9 -
926

Operations for Primitive/Basic Types

Simple type Values Valid Operations


Integer {Whole abs(), div() *, +, -, /, =, <>, <,
numbers} >, <=, >=,
Real {Decimal floor(), max(),min(), mod(),
Numbers} round()
Boolean {True, false} and, or, xor, not, implies, if then
else, =, <>
String {ASCII, concat(), size(), substring(),
unicode} toLower, toUpper, =, <>
Date Not included in OCL but can inherit relevant
features
OCLinvalid Invalid
OCLVoid Null, invalid
UnlimitedNat *, +, /
Complimentary System Analysis Methods Topic 9 -
927

What do these expressions mean?

Context ClientId::inv: ClientId.allInstances()-> isUnique(y)

Context Student::inv: age:self.value > 16

Context ClientName::getName(x) pre: n<getMaxClients()

Context StartDate::getDate() post: StartDate>=Today()

Context StartDate::getDate() init: today()

Context Client:: derive self.personName=self.firstname+’


‘+self.lastname
Complimentary System Analysis Methods Topic 9 -
928

Further Notation Examples


Context StartDate::getDate():date init: today()
Primitive Types

Context Customer:: custDiscount : string


derive: if getCategory() = “Education” or ”Charity”
then 15% else 25%
Derivation rule Logical Operators
states that
custDiscount is fixed

Context Driver:: canDrive(): Boolean body:


p.getAge(dob)=>17 and p.CanSee(eyes)
A context named p
Complimentary System Analysis Methods Topic 9 -
929

Referring to a value as at a point


For <<postcondition>>, suffix @pre can be
used to refer to a value as at the point
e.g ClientName::getName(custname) post:
getNumClients()[email protected]()+1

The keyword can also be followed by a


contractname
Syntax: context typeName::attributeName(arg:type…): returnType
keyword contractName: constraint expression
Example: context Student inv: fee:integer = LevelCharge*(1-discount)
Complimentary System Analysis Methods Topic 9 -
930

Enumeration Type can also be expressed using OCL

• Define literals that can be values of an


enumeration
• Student
Can be defined by <<enumeration>>
<<enumerati <<enumerati
stereotype
gender : Gender on>> on>>
name: String Gender FemaleTitle
title: string female Ms
Dob: Date male Mrs
favouriteRainbowColor: non-binary Miss
RainbowColor Dr
Prof

OCL Examples
gender: enum {female, male, non-binary}

context Student::inv: gender=Gender::male implies title = #Mr


context Student::inv: gender=Gender::female implies title = FemaleTitle
Complimentary System Analysis Methods Topic 9 -
931

Operations for Collections/Record sets


Based largely on set theory for expressions relating
to records
A Collection is an abstract supertype for all set
types:
 set
 bag
 sequence
 orderedSet

General Syntax: v-> operation(…)


e.g {1,2,3} -> size() or collectionName->size()

Syntax for set: operation(setA:set(T)):Set(T)

Syntax for Bag: operation(setA:Bag(T)):Bag(T)


Complimentary System Analysis Methods Topic 9 -
932

Example Operations for Collections


For more examples see OMG OCL Spec
Type Example Meaning
Size Size():Integer Number of elements in
collection
including Including(objectName) Add element to collection
unless collection is a Set and
element exists
Includes Includes(objectName:OclAny):B True if object is in collection
IncludesAl oolean True if all objects are in
l IncludesAll(collectionName) collection
Excludes False if object is in collection
ExcludesA False if all objects are in
ll collection
Excluding Excluding(objectNAme) Removes element – if Bag,
removes all instances
Isempty isEmpty:Boolean True, if collection contains no
elements
NotEmpty context student inv: self.studentid->select(age>24)-
>notEmpty()
Sum Sum(): T Sum of elements in collection
Complimentary System Analysis Methods Topic 9 -

Iteration-Based Operations
933

Loop expression i.e. applied to each element in collection

CollectionName ->select Subset of collection including


(expression) elements where expression is
true
CollectionName ->reject Subset of collection including
(expression) elements where expression is
false
BagName ->collect (expression) New collection (bag) from
BagName ->collectNested existing collection
(expression)
CollectionName ->forAll Checks if all elements of
(booleanExpression) collection evaluate to true
CollectionName ->exists Checks if at least one
(booleanExpression) element of collection
evaluate to true
CollectionName ->isUnique Checks if element is unique
(expression) within a collection
CollectionName - Results in orderedSet
Complimentary System Analysis Methods Topic 9 -
934

Navigation Operators
Two navigation operators
. (dot) described earlier: navigation/pathname
from an object
-> navigation from collection using property,
operation or iteration
e.g bagName->elemenType
setName->union(anotherSet)
setName->collect

Also can be shorthand


Shorthand forfor each other
Self.student.birthdate Self.student->collect(birthdate)
setName.name setName->collect(name)
Name->union(setName) objectName.oclAsSet()-
>union(setName)
Complimentary System Analysis Methods Topic 9 -
935

Example Collection expressions


Context Student inv:
clients->size() <= 100 and clients->forAll(c: Customer |c.age >= 40)

Context student inv: stud->collect(DoB)->asBag()


Inv: stud->forAll(yearofstudy=1)
Inv: stud->sortedBy(DoB)
Distributive functions: max, min, sum, count
distinct…
e.g Context Collection:: max():T countDistinct():Integer
pre: self->notEmpty()
Holistic functions: mode, rank, percentile, median
Algebraic functions: avg, variance, stdev, covariance
e.g post: let avgX1:Real = X1−>avg() in
Complimentary System Analysis Methods Topic 9 -
936

More common expression:


Let..in and Def stereotypes
• Let expression defines a variable that can be
used in a constraint
- e.g let avgSelf:Real = self−>avg() in

- Is used in the constraint below


- result = (1/self−>size()) * self−>iterate(e; acc:Real=0 | acc
+((e - avgSelf) * (Y−>at(self−>indexOf(e)) - avgY))

- DEF <<definition>> allows definition of


variables/operations that can be used over
multiple OCL expressions
‒ e.g context Student def: fee:integer = self.payment-
>sum()
Complimentary System Analysis Methods Topic 9 -
937

If then else and Let in

Example including use of let

context Student inv: let fee:integer = self.payment->sum() in

If self.nationality=‘UK’ then
fee = 9000
else
fee = 14000
endif
Complimentary System Analysis Methods Topic 9 -
938

OCL Rules of precedence for operations


• literal and variable expressions, brackets, if-then-else-endif
• let-in
• @pre
• call expressions: ^, ^^, . (dot) and ->
• unary not and unary -
• * (multiply) and / (divide)
• + (plus) and – (minus)
• <, >, <=, >=
• =, <>
• and
• or
• xor
• implies
• in
Complimentary System Analysis Methods Topic 9 -
939

OCL Tools/Integrated Development Environments

Main
 OCL Eclipse plug-in (OCLInEcore)
 USE, open source tool which supports UML class diagrams and OCL
 Eclipses’ Model Development Tools (MDT) OCL component
 Oclarity
 iOCL (interactive OCL tool)
 SimpleOCL
 Object Constrained Language Environment (OCLE)

Also supported in some UML tools


 ArgoUML
 Enterprise Architect
 MagicDraw
 StarUML – example of add constraints
Complimentary System Analysis Methods Topic 9 -
940

Alternatives to OCL
• Structured English
• Alloy: Open source declarative specification
language
• FOL (First Order Logic)
• SQL (Structured Query Language)
• Domain Specific Languages: specialised to
specific business rule patterns or problem
domain
• Semantics Of Business Vocabulary And Busin
ess Rules (SBVR)
• etc
Complimentary System Analysis Methods Topic 9 -
941

Topic Summary
This topic has covered CRC cards and OCL, both of which
are complimentary tools for UML
OCL can be difficult to write but is easy to understand
 OCL lacks ambiguity: good when tools are used to automatically translate
models into code
 Has no Maths but is mathematical in its formality of expression
OCL statements include
 A context denoting the given situation,
 A property representing characteristics of the context
 Keywords: Avoid using OCL reserved words, like these, to describe user
defined elements but if unavoidable then enclose them in quotes
There are many other languages besides OCL
 We have chosen it because it is adopted by OMG as a UML standard
 Structured English can be used instead or development teams can come to
some agreements on custom syntax
 When choosing a language consider its simplicity, maintainability, modularity
Complimentary System Analysis Methods Topic 9 -
942

Summary of OCL Reserved Words


and endpackage invalid pre
body FALSE let self
context if not static
def implies null then
derive in or TRUE
else init package xor
endif inv post

Can be used as the name of a package, type, feature, variable or


constraint by enclosing the word in underscore-prefixed single quotes.
Object-Oriented System Analysis and Design
Topic 4- 4.43

Recommended Reading
• Braude, E. J. & Bernstein, M. E., 2011. Software Engineering: Modern
Approaches. 2nd ed. John Wiley and Son.
• Dennis, A., Wixom, B. & Tegarden, D., 2020. Systems Analysis and Design:
An Object-Oriented Approach with UML. 6th ed. John Wiley and Sons.
• Kung, D., 2013. Object-Oriented Software Engineering: An Agile Unified
Methodology. 1st ed. McGraw-Hill Education.
• Pressman, R. & Maxim, B., 2020. Software Engineering: A Practitioner's
Approach. 9th ed. McGraw Hill.
• Sommerville, I., 2021. Engineering Software Products: An Introduction to
Modern Software Engineering. Pearson.
• Stephens, R., 2022. Beginning Software Engineering. 2nd ed. Wiley and
Sons.
• Stevens, P. & Pooley, R., 2006. Using UML: Software engineering with
objects and components. 2nd ed. Addison-Wesley -
https://homepages.inf.ed.ac.uk/perdita/book/ .
• Warmer, J. & Kleppe, A., 2003. The Object Constrained Language:
Getting your models , 2nd Ed, Pearson Education. 2nd ed. Pearson
Education, Object Technology Series.
• Weisfeld , M., 2019. Object-Oriented Thought Process. 5th ed. Addison-
Wesley.
• Wirfs-Brock, R. B. & McKean, A., 2003. Object Design: Roles,
Object-Oriented System Analysis and Design
Topic 4- 4.44

Weblinks
• Object Management Group (OMG). (2015). OMG UML 2.5.1
specification, Available at:
https://www.omg.org/spec/UML/2.5.1/About-UML/ [Accessed 6
March 2024].

Stevens (2006), Using UML Software engineering with objects and
components
, Available at: https://www.google.co.uk/books/edition/Using_UML/
rDRE54yiwSUC?hl=en&gbpv=1&dq=stevens+Perdita [Accessed
6 March 2024].
• Object Management Group (OMG). (2015). OMG Object
Constraint Language (OCL) 2.4. Available at:
https://www.omg.org/spec/OCL/2.4/PDF
• Wirfs-Brock, R. (2006). A Brief Tour of Responsibility-Driven
Design. Available at: www.wirfs-brock.com;
https://www.wirfs-brock.com/PDFs/A_Brief-Tour-of-RDD.pdf:
articles and presentations. [Accessed 6 March 2024].
Object-Oriented System Analysis and Design
Topic 4- 4.45

Quiz 1
1. Which of the following items does not appear on a CRC card?
A) class collaborators B) class name
C) class reliability D) class responsibilities
2. Class responsibilities are defined by
A) its attributes only B) its collaborators
C) its operations only D) both its attributes and
operations
3. OCL can be used for:
A) Specifying invariants on classes and stereotypes and
types in the class model
B) Describing pre- and post conditions on Operations
and Methods
C) Describing Guards
D) All the above
E) None of the above
4. An OCL context can name a:
A) A class as nameClass e.g context patient
B) A use case as nameUsecase e.g context Complete
Object-Oriented System Analysis and Design
Topic 4- 4.46

Quiz 2: What does the following mean in OCL?

1. x.y
2. c->func1()
3. x implies y
4. x->size()
5. x->includesAll(y)
6. x->excluding(elem1)
7. x->last()
8. Student self.registration=”yes”
9. [email protected]
Object-Oriented System Analysis and Design
Topic 4- 4.47

Quiz 3: True or False

1. Software engineer to use a formal grammar to


construct unambiguous statements about design
model elements.
2. OCL is not strong enough to be used to describe pre-
or post- conditions for design actions.
3. OCL can be used to specify constraints on
operations.
4. OCL is a navigation language.
Complimentary System Analysis Methods Topic 9 -
948

Discussion Session/Group Activity


1. Do CRC Cards add any value to system specification?
2. What are some of the merits and challenges of using OCL?
3. In OCL what is an invariant?
4. What is a derived element?
5. What is the difference between a set and a bag?
6. What is the difference between and orderedSet and a
Sequence?
7. What is the relevance of collections in OCL
Complimentary System Analysis Methods Topic 9 -
949

Class Activity
1. Declare an enumeration for colours of the rainbow and
explain that if car colour must match one of the colours. Add
an OCL constraint that Red cars have a 10% surcharge.
2. Draw a Venn diagrams to depict the union and intersection
for the following data: SetA{1,4,7,9,2,3,20}
SetB{8,1,7,3,40,50,60}
Declare the OCL statements that would extract the data.
3. Declare a calculated field to calculate the fee for lateness of
returning a library book at 50pence a day.
4. Medical Clinic Example
a) Produce a CRC Card for the Doctor Class in the earlier Medical Clinic
example that kept track of In-patient and Out-patient doctor-patient
appointments for private and public funded patients.
b) Modify the diagram and add OCL statements to declare that each doctor is
assigned a maximum number of patients
c) Consider three more constraints that could be added to the Clinic example
Topic 9:
Complementary OO methods:
CRC Cards and OCL

Any Questions?
Complimentary System Analysis Methods Topic 9 -
951

What’s Next?

Topic 10: OO Design


• Design Fundamentals: From Analysis to Design
- ­ ystem Architecture
S
- ­Reuse including Design Patterns
- ­Design models
- ­Interfaces
- ­Implementation/Deployment
• Estimation

You might also like