Module 3
Module 3
PHASE
MODULE 3
The software project management process begins with set of activities called
project planning.
It is the heart of project life cycle, and informs all involved where to go and
how to go.
It helps to manage time, cost, quality, changes, risk and related issues.
1
(c) Project schedule development: Listing the entire schedule of activities
and sequence of implementation.
(d) Resource planning: It specifies who will do what, at which time and
any special skill needed.
(g) Risk management: It includes possible risks and solutions for them.
2
(iii) Constraints: Limits placed over software like memory
restriction.
(iv) Interfaces: Interaction with user and other system.
(v) Reliability: Quantitative requirements for functional
performance like mean time between failures, acceptable error
rates.
3.1.4 Resources
3
(b) Full-experience components: It focus on use of in house
software already developed which requires less
modification, All the team members will be experienced
with the software.
(c) Partial-experience components: It focuses on use of in
house software already developed which requires major
modification. All the team members will be experienced
with the software.
(d) New Components: It focuses on building new softwares.
Basic COCOMO
5
Software
ab bb cb db
project
Semi-
3.0 1.12 2.5 0.35
detached
Intermediate COCOMO
6
(b) Hardware attributes
Run-time performance constraints
Memory constraints
Volatility of the virtual machine environment
Required turnabout time
7
The Intermediate Cocomo formula now takes the form:
E=ai(KLoC)(bi)(EAF)
8
The Development time D calculation uses E in the same way as in the Basic
COCOMO.
Detailed COCOMO
Software projec
ai bi
t Detailed
COCOMO
Organic 3.2 1.05
incorporates
all Semi-detached 3.0 1.12
10
Staffing a Software Project
Staffing must be done in a way that maximizes the creation of some value to
a project.
In this sense, the semantics of value must be addressed regarding project and
organizational characteristics.
Some projects are schedule driven: to create value for such project could
mean to act in a way that reduces its schedule or risks associated to it.
Other projects may be driven by budget, resource allocation, and so on.
Staff allocation optimizer cannot be fixed by a single utility function, but
several such functions should be available for the manager to decide which
best fit the project under analysis.
In our approach, we consider that a characteristic may be a skill, a
capability, an experience, some knowledge, a role in the organization or in
the project, and others.
Each characteristic is associated with a rating scale, with the intensity levels
the characteristic may assume.
Staffing is performed according to the following rules:
Personal Planning
11
This includes estimation or allocation of right persons or individuals for the
right type of tasks of which they are capable.
The capability of the individuals should always match with the overall
objective of the project.
In software Engineering, personnel planning should be in accordance to the
final development of the project.
12
g) Terminate project assignments
Transfer or separate project personnel as necessary
h) Document project staffing decisions
Record staffing plans, training plans and achievements, appraisal records,
and compensations recommendations.
There are three characteristics that serve as a guide for the evaluation of a
good design:
a) The design should implement all of the explicit requirements contained in
the requirements model, and it must accommodate all of the implicit
requirements desired by stakeholders.
b) The design should be a readable, understandable guide for those who
generate code and for those who test and subsequently support the
software.
13
c) The design should provide a complete picture of the software, addressing
the data, functional, and behavioral domains from an implementation
perspective.
In order to evaluate the quality of a design representation, the software team
must establish technical criteria for good design and few of the guidelines
are as follows:
a) A design should exhibit an architecture that (1) has been created using
recognizable architectural styles or patterns, (2) is composed of
components that exhibit good design, and (3) can be implemented in
an evolutionary fashion.
b) A design should be modular; that is, the software should be logically
partitioned into elements or subsystems.
c) A design should contain distinct representations of data, architecture,
interfaces, and components.
d) A design should lead to data structures that are appropriate for the
classes to be implemented and are drawn from recognizable data
patterns.
e) A design should lead to components that exhibit independent
functional characteristics.
f) A design should lead to interfaces that reduce the complexity of
connections between components and with the external environment.
g) A design should be derived using a repeatable method that is driven
by information obtained during software requirements analysis.
h) A design should be represented using a notation that effectively
communicates its meaning.
14
The quality attributes represent a target for all software design and few of
them are as follows:
a) Functionality is assessed by evaluating the feature set and capabilities of
the program, the generality of the functions that are delivered, and the
security of the overall system.
b) Usability is assessed by considering human factors, overall aesthetics,
consistency, and documentation.
c) Reliability is evaluated by measuring the frequency and severity of
failure, the accuracy of output results, the mean-time-to-failure (MTTF),
the ability to recover from failure, and the predictability of the program.
d) Performance is measured using processing speed, response time,
resource consumption, throughput, and efficiency.
e) Supportability combines extensibility, adaptability, and serviceability.
15
(iv) The design should “minimize the intellectual distance” between the
software and the problem as it exists in the real world.
(v) The design should exhibit uniformity and integration.
(vi) The design should be structured to accommodate change.
(vii) The design should be structured to degrade gently, even when
aberrant data, events, or operating conditions are encountered.
(viii) Design is not coding, coding is not design.
(ix) The design should be assessed for quality as it is being created, not
after the fact.
(x) The design should be reviewed to minimize conceptual (semantic)
errors.
A set of fundamental software design concepts has evolved over the history
of software engineering.
Each provides the software designer with a foundation from which more
sophisticated design methods can be applied.
Each helps you define criteria that can be used to partition software into
individual components, separate or data structure detail from a conceptual
representation of the software, and establish uniform criteria that define the
technical quality of a software design.
(a) Abstraction:
At the highest level of abstraction, a solution is stated in broad terms
using the language of the problem environment.
16
At lower levels of abstraction, a more detailed description of the
solution is provided.
As different levels of abstraction are developed, you work to create
both procedural and data abstractions.
A procedural abstraction refers to a sequence of instructions that have
a specific and limited function.
The name of a procedural abstraction implies these functions, but
specific details are suppressed.
A data abstraction is a named collection of data that describes a data
object.
(b) Architecture
Software architecture aims to the overall structure of the software and
the ways in which that structure provides conceptual integrity for a
system.
17
Given the specification of these properties, the architectural design
can be represented using one or more of a number of different models.
(c) Pattern
18
A pattern is a named nugget of insight which conveys the essence of a
proven solution to a recurring problem within a certain context amidst
competing concerns.
The intent of each design pattern is to provide a description that
enables a designer to determine:
(1) Whether the pattern is applicable to the current work,
(2) Whether the pattern can be reused, and
(3) Whether the pattern can serve as a guide for developing a
similar, but functionally or structurally different
pattern.
(d)Separation of concerns
Separation of concerns is a design concept that suggests that any complex
problem can be more easily handled if it is subdivided into pieces that
can each be solved and/or optimized independently.
A concern is a feature or behavior that is specified as part of the
requirements model for the software.
By separating concerns into smaller and therefore more manageable
pieces, a problem takes less effort and time to solve.
This leads to a divide-and-conquer strategy where it is easier to solve a
complex problem when you break it into manageable pieces.
Separation of concerns is manifested in other related design concepts:
modularity, aspects, functional independence, and refinement.
(e) Modularity
Modularity is the most common manifestation of separation of concerns.
19
Software is divided into separately named and addressable components,
sometimes called modules that are integrated to satisfy problem
requirements.
Modularity is the single attribute of software that allows a program to be
intellectually manageable.
You modularize a design (and the resulting program) so that:
i. Development can be more easily planned;
ii. Software increments can be defined and delivered;
iii. Changes can be more easily accommodated;
iv. Testing and debugging can be conducted more efficiently, and
v. Long-term maintenance can be conducted without serious side
effects.
20
Software with effective modularity, that is, independent modules, is
easier to develop because function can be compartmentalized and
interfaces are simplified.
Independent modules are easier to maintain (and test) because
secondary effects caused by design or code modification are limited,
error propagation is reduced, and reusable modules are possible.
Functional independence is a key to good design, and design is the
key to software quality.
Independence is assessed using two qualitative criteria: cohesion and
coupling.
Cohesion is an indication of the relative functional strength of a
module.
Cohesive module performs a single task, requiring little interaction
with other components in other parts of a program.
Coupling is an indication of the relative interdependence among
modules.
Coupling is an indication of interconnection among modules in a
software structure.
Coupling depends on the interface complexity between modules, the
point at which entry or reference is made to a module, and what data
pass across the interface.
(h)Refinement
Stepwise refinement is a top-down design strategy originally proposed
by Niklaus Wirth.
21
An application is developed by successively refining levels of
procedural detail.
Abstraction enables you to specify procedure and data internally but
suppress the need for outsiders to have knowledge of low-level
details.
Refinement helps you to reveal low-level details as design progresses.
(i) Refactoring
Refactoring is a reorganization technique that simplifies the design (or
code) of a component without changing its function or behavior.
Although the intent of refactoring is to modify the code in a manner
that does not alter its external behavior, inadvertent side effects can
and do occur.
As a consequence, refactoring tools are used to analyze changes
automatically and to generate a test suite suitable for detecting
behavioral changes.
22
A modular design reduces complexity, facilitates change, and results in
easier implementation by encouraging parallel development of different
parts of a system.
The concept of functional independence is a direct outgrowth of modularity
and the concepts of abstraction and information hiding.
Software with effective modularity, that is, independent modules, is easier to
develop because function may be compartmentalized and interfaces are
simplified.
Functional independence is a key to good design, and design is the key to
software quality.
Independence is measured using two qualitative criteria: cohesion and
coupling.
Cohesion is a measure of the relative functional strength of a module.
Coupling is a measure of the relative interdependence among modules.
3.3.1 Cohesion
23
c. When a module contains tasks that are related by the fact that all must
be executed with the same span of time, the module exhibits temporal
cohesion.
When processing elements of a module are related and must be executed in a
specific order, procedural cohesion exists.
When all processing elements concentrate on one area of a data structure,
communicational cohesion is present.
3.3.2 Coupling
24
Fig: Types of Coupling
As long as a simple argument list is present, i.e, simple data are passed low
coupling or data coupling is exhibited.
A variation of data coupling, called stamp coupling is found when a portion
of a data structure is passed via a module interface. This occurs between
modules b and a.
Control coupling is very common in most software designs where a
“control flag” is passed between modules like d and e.
25
High coupling occurs when a number of modules reference a global data
area and is called Common coupling like Modules c, g, and k each access a
data item in a global data area.
The highest degree of coupling, content coupling, occurs when one module
makes use of data or control information maintained within the boundary of
another module.
(i) It helps get the job done more efficiently because modules of code can be
worked on at the same time by different programmers
26
(iii) It helps program testing because it is easier to debug lots of smaller self-
contained modules than one big program.
In a bottom-up approach, the individual base elements of the system are first
specified in great detail.
These elements are then linked together to form larger subsystems, which
then in turn are linked, until a complete top-level system is formed.
This strategy often resembles a "seed" model, by which the beginnings are
small, but eventually grow in complexity and completeness.
27
28