Professional Documents
Culture Documents
Invisibility: Software remains invisible, until its development is complete and it is operational.
Anything that is invisible, is difficult to manage and control.
Changeability: Because the software part of any system is easier to change as compared to the
hardware part, the software part is the one that gets most frequently changed. This is especially
true in the later stages of a project. So upto here :- Frequent changes to the requirements and the
invisibility of software are possibly the two major factors making software project management a
complex task.
Uniqueness: Every software project is usually associated with many unique features or situations.
This makes every project much different from the others. This is unlike projects in other domains,
such as car manufacturing or steel manufacturing where the projects are more predictable
Exactness of the solution: Mechanical components such as nuts and bolts typically work
satisfactorily as long as they are within a tolerance of 1 per cent or so of their specified sizes.
However, the parameters of a function call in a program are required to be in complete conformity
with the function definition. This requirement not only makes it difficult to get a software product
up and working, but also makes reusing parts of one software product in another difficult. This
requirement of exact conformity of the parameters of a function introduces additional risks and
contributes to the complexity of managing software projects.
1
Project to success. This surely is a very hazy job description. In fact, it is very difficult to
objectively describe the precise job responsibilities of a project manager. The job responsibilities
of a project manager ranges from invisible activities like building up of team morale to highly
visible customer presentations. Most managers take the responsibilities for project proposal
writing, project cost estimation, scheduling, project staffing, software process tailoring, project
monitoring and control, software configuration management, risk management, managerial report
writing and presentation, and interfacing with clients. These activities are certainly numerous and
varied. We can still broadly classify these activities into two major types—project planning and
project monitoring and control.
Project planning: Project planning is undertaken immediately after the feasibility study phase
and before the starting of the requirements analysis and specification phase. Project planning
involves estimating several characteristics of a project and then planning the project activities
based on these estimates made. The initial project plans are revised from time to time as the
project progresses and more project data become available.
However, for effective project planning, in addition to a thorough knowledge of the various
estimation techniques, past experience is crucial. During project planning, the project manager
performs the following activities. Note that we have given only a very brief description of the
activities.
Project monitoring and control: Project monitoring and control activities are undertaken once
the development activities start. The focus of project monitoring and control activities is to ensure
that the software development proceeds as per plan.
Three skills that are most critical to successful project management are the following:
Project manager must posses these skills
• Knowledge of project management techniques.
• Decision taking capabilities.
• Previous experience in managing similar projects.
Project estimation
PROJECT ESTIMATION TECHNIQUES
Estimation of various project parameters is an important project planning activity. The different
parameters of a project that need to be estimated include—project size, effort required to
complete the project, project duration, and cost. Accurate estimation of these parameters is
important, since these not only help in quoting an appropriate project cost to the customer, but
also form the basis for resource planning and scheduling. A large number of estimation
techniques have been proposed by researchers. These can broadly be classified into three
main categories:
• Empirical estimation techniques
• Heuristic techniques
• Analytical estimation techniques
Heuristic Techniques
2
Heuristic techniques assume that the relationships that exist among the different project
parameters can be satisfactorily modelled using suitable mathematical expressions. Once the basic
(independent)
SCHEDULING
Scheduling the project tasks is an important project planning activity. The scheduling problem, in
essence, consists of deciding which tasks would be taken up when and by whom.
Once a schedule has been worked out and the project gets underway, the project manager
monitors the timely completion of the tasks and takes any corrective action that may be necessary
whenever there is a chance of schedule slippage. In order to schedule the project activities, a
software project manager needs to do the following:
1. Identify all the major activities that need to be carried out to Complete the project.
3
2. Break down each activity into tasks.
3. Determine the dependency among different tasks.
4. Establish the estimates for the time durations necessary to complete the tasks.
5. Represent the information in the form of an activity network.
6. Determine task starting and ending dates from the information represented in the activity
network.
7. Determine the critical path. A critical path is a chain of tasks that determines the duration of
the project.
8. Allocate resources to tasks.
After the project manager has broken down the activities into tasks, he has to find the
dependency among the tasks. Dependency among the different tasks determines the order in
which the different tasks would be carried out.
If a task A requires the results of another task B, then task A must be scheduled after task B and A
is said to be dependent on B.
The dependency among the activities are represented in the form of an activity network . Once
the activity network representation has been worked out, resources are allocated to each activity.
Resource allocation is typically done using a Gantt chart. After resource allocation is done, a
project evaluation and review technique (PERT) chart representation is developed. The PERT
chart representation is useful to a project manager to carry out project monitoring and control.
The end of each important activity is called a milestone. The project manager tracks the progress
of a project by monitoring the timely completion of the milestones. If he observes that some
milestones start getting delayed, he carefully monitors and controls the progress of the tasks, so
that the overall deadline can still be met. WBS provides a notation for representing the activities,
sub-activities, and tasks needed to be carried out in order to solve a problem. Each of these is
represented using a rectangle in fig .The root of the tree is labelled by the project name. Each
node of the tree is broken down into
smaller activities that are made the children of the node. To decompose an activity to a sub-
activity, a good knowledge of the activity can be useful.
Figure represents the WBS of a management information system (MIS) software.
Breaking down tasks to too coarse levels versus too fine levels Let us first investigate the
implications of carrying out the decompositions to very fine levels versus leaving the
decomposition at rather coarse grained. It is necessary to breakdown large activities into many
smaller tasks, because smaller tasks allow milestones to be placed at shorter distances. This
allows close monitoring of the project and corrective actions can be initiated as soon as any
problems are noticed. However, very fine subdivision means that a disproportionate amount of
time must be spent on preparing and revising various charts.
While breaking down an activity into smaller tasks, a manager often has to make some hard
decisions. If a activity is broken down into a large number of very small sub-activities, these can
be distributed to a larger number of developers. If the task ordering permits that solutions to these
can be carried out independently (parallelly), it becomes possible to develop the product faster.
4
Fig above : Work breakdown structure of an MIS problem
Activity Networks
An activity network shows the different activities making up a project, their estimated durations,
and their interdependencies. Two equivalent representations for activity networks are possible
and are in use:
Activity on Edge (AoE): In this representation tasks are associated with the edges. The edges are
also annotated with the task duration. The nodes in the graph represent project milestones.
Activity networks were originally represented using activity on edge (AoE) representation.
However, later activity on node (AoN) has become popular since this representation is easier to
understand and revise.
Managers can estimate the time durations for the different tasks in several ways.
5
Critical path schedules...
Helps us identify the activities that must be completed on time in order to complete the whole
project on time.
Show you which tasks can be delayed and for how long without impacting the overall project
schedule.
Calculate the minimum amount of time it will take to complete the project.
Tell you the earliest and latest dates each activity can start on in order to maintain the schedule.
The duration of each activity is listed above each node in the diagram. For each path, add the
duration of each node to determine it's total duration. The critical path is the one with the longest
duration.There are three paths through this project…
The Critical Path Method includes a technique called the Forward Pass which is used to
determine the earliest date an activity can start and the earliest date it can finish. These dates are
valid as long as all prior activities in that path started on their earliest start date and didn't slip.
Starting with the critical path, the Early Start (ES) of the first activity is one. The Early Finish
(EF) of an activity is its ES plus its duration minus one. Using our earlier example, Activity 2 is
the first activity on the critical path:
ES = 1, EF = 1 + 5 -1 = 5.
6
You then move to the next activity in the path, in this case Activity 3. Its ES is the previous
activity's EF + 1. Activity 3 ES = 5 + 1 = 6. Its EF is calculated the same as before: EF = 6 + 7 - 1
= 12.
A critical path in this graph is a path along which every milestone is critical to meeting the
project deadline. In other words, if any delay occurs along a critical path, the entire project would
get delayed. It is therefore necessary to identify all the critical paths in a schedule—adhering to
the schedules of the tasks
Gantt Chart
Gantt charts are mainly used to allocate resources to activities. The resources allocated to
activities include staff, hardware, and software. Gantt charts (named after its developer Henry
Gantt) are useful for resource planning. A Gantt chart is a special type of bar chart where each bar
represents an activity. The bars are drawn along a time line. The length of each bar is proportional
to the duration of time planned for the corresponding activity.
Gantt charts are used in software project management are actually an enhanced version of the
standard Gantt charts. In the Gantt charts used for software project management, each bar consists
7
of a white part and a shaded part. The shaded part of the bar shows the length of time each task is
estimated to take. The white part shows the slack time, that is, the latest time by which a task
must be finished. A Gantt chart representation for the MIS problem
PERT Chart
PERT (Project Evaluation and Review Technique) charts consist of a network of boxes and
arrows. The boxes represent activities and the arrows represent task dependencies. PERT chart
represents the statistical variations in the project estimates assuming a normal distribution. Thus,
in a PERT chart instead of making a single estimate for each task, pessimistic, likely, and
optimistic estimates are made. The boxes of PERT charts are usually annotated with the
pessimistic, likely, and optimistic estimates for every task. Since all possible completion times
between the minimum and maximum duration for every task has to be considered, there are not
one but many critical paths, depending on the permutations of the estimates for each task. This
makes critical path analysis in PERT charts very complex. A critical path in a PERT chart is
shown by using thicker arrows.
8
Organization structure
Usually every software development organization handles several projects at any time. Software
organizations assign different teams of engineers to handle different software projects. Each type
of organization structure has its own advantages and disadvantages so the issue “how is the
organization as a whole structured?” must be taken into consideration so that each software
project can be finished before its deadline.
In the project format, a set of engineers is assigned to the project at the start of the project and
they remain with the project till the completion of the project. Obviously, the functional format
requires more communication among teams than the project format, because one team must
understand the work done by the previous teams.
Functional Organisation
In the functional format, different teams of programmers perform different phases of a project.
For example, one team might do the requirements specification, another do the design, and so on.
9
The partially completed product passes from one team to another as the project evolves. This
requires good quality documentation to be produced after every activity.
Matrix format
A matrix organisation is intended to provide the advantages of both functional and project
structures. In a matrix organisation, the pool of functional specialists are assigned to different
projects as needed. Thus, the deployment of the different functional specialists in different
projects can be represented in a matrix
Two important problems that a matrix organisation often suffers from are:
Conflict between functional manager and project managers over allocation of workers.
Frequent shifting of workers in a firefighting mode as crises occur in different projects.
Team Structure
10
Team structure addresses the issue of organization of the individual project teams. There are some
possible ways in which the individual project teams can be organized.
There are mainly three formal team structures:
1. Chief programmer Team
2. Democratic Team
3. The mixed team organizations
Although several other variations to these structures are possible. Problems of different
complexities and sizes often require different team structures for chief solution.
1. Chief programmer Team In this team organization, a senior engineer provides the
technical leadership and is designated the chief programmer. The chief programmer
partitions the
task into many smaller tasks and assigns them to the team members. verifies and integrates the
products developed by different team members However, the chief programmer team leads to
lower team morale, since the team members work under the constant supervision of the chief
programmer.
Risk management: It is a study on how to manage risk in any software development . Every
project is susceptible to a large number of risks. Without effective
management of the risks, even the most meticulously planned project may go
hay ware.
A risk is any anticipated unfavourable event or circumstance that can occur while a project is
underway.
Risk Identification
The project manager needs to anticipate the risks in a project as early as possible. As soon as a
risk is identified, effective risk management plans are made, so that the possible impacts of the
risks is minimised. So, early risk identification is important. Risk identification is somewhat
similar to the project manager listing down his nightmares.
A software project can be affected by a large variety of risks. In order to be able to systematically
identify the important risks which might affect a software project, it is necessary to categorize
12
risks into different classes. The project manager can then examine which risks from each class are
relevant to the project. There are three main categories of risks which can affect a software
project:
Project risks. Project risks concern varies forms of budgetary, schedule, personnel, resource, and
customer-related problems. An important project risk is schedule slippage. Since, software is
intangible, it is very difficult to monitor and control a software project. It is very difficult to
control something which cannot be seen. For any manufacturing project, such as manufacturing of
cars, the project manager can see the product taking shape. He can for instance, see that the
engine is fitted, after that the doors are fitted, the car is getting painted, etc. Thus he can easily
assess the progress of the work and control it. The invisibility of the product being developed is
an important reason why many software projects suffer from the risk of schedule slippage.
Technical risks. Technical risks concern potential design, implementation, interfacing, testing,
and maintenance problems. Technical risks also include ambiguous specification, incomplete
specification, changing specification, technical uncertainty, and technical obsolescence. Most
technical risks occur due to the development team’s insufficient knowledge about the project.
Business risks. This type of risks include risks of building an excellent product that no one wants,
losing budgetary or personnel commitments, and issue of risk related to market etc.
13
This activity begins by collecting all relevant data regarding the product to be developed from the
user and from the customer through interviews and discussions.
For example, to perform the requirements analysis of a business accounting software required by
an organization, the analyst might interview all the accountants of the organization to ascertain
their requirements. The data collected from such a group of users usually contain several
contradictions and ambiguities, since each user typically has only a partial and incomplete view of
the system. Therefore it is necessary to identify all ambiguities and contradictions in the
requirements phase and resolve them through further discussions with the customer.
b) Requirements specification:-
After all ambiguities, inconsistencies, and incompleteness have been resolved and all the
requirements properly understood, the requirements specification activity can start. During this
activity, the user requirements are systematically organized into a Software Requirements
Specification (SRS) document. The customer requirements identified during the requirements
gathering and analysis activity are organized into a SRS document.
The important components of this document are:
-functional requirements of the system
-nonfunctional requirements of the system
-goal of implementation.
Functional requirements:-
The functional requirements part discusses the functionalities required from the
system. The system is considered to perform a set of high level functions {fi}. The
functional view of the system is shown in fig.3.1. Each function fi of the system can be
considered as a transformation of a set of input data (ii) to the corresponding set of
output data (oi). The user can get some meaningful piece of work done using a highlevel
function.
Nonfunctional requirements:-
Nonfunctional requirements deal with the characteristics of the system which cannot
be expressed as functions - such as the maintainability of the system, portability of the
system, usability of the system, etc. It may include:
# reliability issues,
# accuracy of results,
# human - computer interface issues,
for a software to evolve from the requirements specification stage to the design stage, the
developers need to elicit requirements from the customers, analyse those requirements, and
formally document the requirements in the form of an SRS document.
What are the main activities carried out during requirements analysis and specification
phase?
Requirements analysis and specification phase mainly involves carrying out the following two
important activities:
• Requirements gathering and analysis
• Requirements specification
The primary objective of the requirements gathering task is to collect the requirements from the
stakeholders.
Requirements Analysis
After requirements gathering is complete activity is to analyse the gathered requirements to
remove all ambiguities, incompleteness, and inconsistencies from the gathered customer
requirements and to obtain a clear understanding of the software to be developed.
15
User documentation writers: The user documentation writers need to read the SRS document to
ensure that they understand the features of the product well enough to be able to write the users’
manuals.
Project managers: The project managers refer to the SRS document to ensure that they can
estimate the cost of the project easily by referring to the SRS document and that it contains all the
information required to plan the project.
Maintenance engineers: The SRS document helps the maintenance engineers to under- stand the
functionalities supported by the system. A clear knowledge of the functionalities can help them to
understand the design and code. Also, a proper understanding of the functionalities supported
enables them to determine the specific modifications to the system’s functionalities
would be needed for a specific purpose. Many software engineers in a project consider the SRS
document to be a reference document. However, it is often more appropriate to think of the SRS
document as the documentation of a contract between the development team and the customer. In
fact, the SRS document can be used to resolve any disagreements between the developers and the
customers that may arise in the future. The SRS document can even be used as a legal document
to settle disputes between the customers and the developers in a court of law. Once the customer
agrees to the SRS document, the development team proceeds to develop the software and ensure
that it conforms to all the requirements mentioned in the SRS document.
16
Problems with an unstructured specification
• It would be very much difficult to understand that document.
• It would be very much difficult to modify that document.
• Conceptual integrity in that document would not be shown.
• The SRS document might be unambiguous and inconsistent.
Characteristics of a Good SRS Document
The skill of writing a good SRS document usually comes from the experience gained from writing
SRS documents for many projects. However, the analyst should be aware of the desirable
qualities that every good SRS document should possess. IEEE Recommended Practice
for Software Requirements Specifications[IEEE830] describes the content and qualities of a good
software requirements specification (SRS). Some of the identified desirable qualities of an SRS
document are the following:
Concise: The SRS document should be concise and at the same time unambiguous, consistent,
and complete. Verbose and irrelevant descriptions reduce readability and also increase the
possibilities of errors in the document.
Traceable: It should be possible to trace a specific requirement to the design elements that
implement it and vice versa. Similarly, it should be possible to trace a requirement to the code
segments that implement it and the test cases that test this requirement and vice versa.
Traceability is also important to verify the results of a phase with respect to the previous phase
and to analyse the impact of changing a requirement on the design elements and the code.
Modifiable: Customers frequently change the requirements during the software development
development due to a variety of reasons. Therefore, in practice the SRS document undergoes
several revisions during software development. Also, an SRS document is often modified after the
project completes to accommodate future enhancements and evolution. To cope up
with the requirements changes, the SRS document should be easily modifiable. For this, an SRS
document should be well-structured. A wellstructured document is easy to understand and
modify. Having the description of a requirement scattered across many places in the SRS
document may not be wrong—but it tends to make the requirement difficult to understand and
also any modification to the requirement would become difficult as it would require changes to
be made at large number of places in the document.
Identification of response to undesired events: The SRS document should discuss the system
responses to various undesired events and exceptional conditions that may arise.
Verifiable: All requirements of the system as documented in the SRS document should be
verifiable. This means that it should be possible to design test cases based on the description of
the functionality as to whether or not requirements have been met in an implementation. A
requirement such as “the system should be user friendly” is not verifiable. On the other hand, the
requirement—“When the name of a book is entered, the software should display whether the book
is available for issue or it has been loaned out” is verifiable. Any feature of the required system
that is not verifiable should be listed separately in the goals of the implementation section of the
SRS document.
Example: -
Consider Library Membership Automation Software (LMS) where it should support the following
three options:
-New member to join
-Renewal books
-Cancel membership
-New member option-
Decision:
When the 'new member' option is selected, the software asks details about the member like the
member's name, address, phone number, id etc. Action: If proper information is entered then a
membership record for the member is created and a bill is printed for the annual membership
charge plus the security deposit payable.
Renewal option-
Decision: If the 'renewal' option is chosen, the LMS asks for the member's name and
membership number to check whether he is a valid member or not.
Action: If the membership is valid then membership expiry date is updated and the
annual membership bill is printed, otherwise an error message is displayed.
Cancel membership option-
Decision: If the 'cancel membership' option is selected, then the software asks for
member's name and his membership number.
Action: The membership is cancelled, a cheque for the balance amount due to the
member is printed and finally the membership record is deleted from the database.
Decision tree representation of the above example -
The following tree (fig. 3.4) shows the graphical representation of the above example. After
getting information from the user, the system makes a decision and then performs the
corresponding actions. Ask for member’s name, address, etc. Create membership details Print
cheque.
18
Decision table
A decision table is used to represent the complex processing logic in a tabular or a
matrix form. The upper rows of the table specify the variables or conditions to be
evaluated. The lower rows specify the actions to be taken when the corresponding
conditions are satisfied. A column in a table is called a rule. A rule implies that if a
condition is true, then the corresponding action is to be executed.
Example: -
Consider the previously discussed LMS example. The following decision table (fig. 3.5)
shows how to represent the LMS problem in a tabular form. Here the table is divided
into two parts, the upper part shows the conditions and the lower part shows what
actions are taken. Each column of the table is a rule.
From
Cohesion
Most researchers and engineers agree that a good software design implies clean decomposition of
the problem into modules, and the neat arrangement of these modules in a hierarchy. The primary
characteristics of neat module decomposition are high cohesion and low coupling..
Another def : When function of one module cooperates with another to perform single objective
then module is said to be good cohesion. The primary characteristics of neat module
decomposition are high cohesion and low coupling. Cohesion is a measure of functional strength
of a module. A module having high cohesion and low coupling is said to be functionally
independent of other modules. By the term functional independence, we mean that a cohesive
module performs a single task or function. A functionally independent module has minimal
interaction with other modules. High cohesion has features of reliability, robustness and
reusability where as low cohesion has difficult to test, reuse even difficult to understand and
maintenance.
Logical cohesion: A module is said to be logically cohesive, if all elements of the module
perform similar operations, e.g. error handling, data input, data output, etc. An example of logical
cohesion is the case where a set of print functions generating different output reports are arranged
into a single module, such as module contain set of print functions to generate various type of
output report such as salary, grade sheet, manual report etc.
Temporal cohesion: When a module contains functions that are related with each other and all
the functions must be executed in the same time span, then module is said to exhibit temporal
cohesion. For example when computer booted several functions need to be performed at the same
time one by one such as initialization of memory, devices, loading OS etc. and The set of
functions in a single module responsible for initialization, start-up, shutdown of some process,
etc. exhibit temporal cohesion.
Another example we can consider as a functions which called after catching an exception which
closes opened files, give notification to user, create error log etc.
Procedural cohesion: A module is said to possess procedural cohesion, if the set of functions of
the module are all part of a procedure (algorithm)in which certain sequence of steps have to be
carried out for achieving an objective, e.g. the algorithm for decoding a message. As in the above,
the parts/functions of the modules always follow certain sequence of execution.
20
Functional cohesion: Functional cohesion is said to exist, if different elements/parts/functions of
a module cooperate to achieve a single task. For example, a module containing all the functions
required to manage employees’ pay-roll exhibits functional cohesion such as compute-overtime(),
compute-workhr(), computededuction()
etc . It is considered one of the most superior cohesion in the module but in certain cases not
achievable and instead communicational cohesion overcome the solution.
Coupling
Coupling between two modules/classes/components is a measure of the degree of
interdependence or interaction between the two modules or mutual interdependence between
modules. A module having high cohesion and low coupling is said to be functionally independent
of other modules. Two modules are said to be highly coupled when:
-function calls between two modules involve & shared large chunk of data.
-interaction occurs through shared data.
If two modules interchange large amounts of data, then they are highly interdependent. The
degree of coupling between two modules depends on their interface complexity. The interface
complexity is determined based on the parameter, no. of parameter etc. Module with low coupling
is better.
Data coupling: Two modules are data coupled, if they communicate through a parameter. An
example is an elementary data item passed as a parameter between two modules, e.g. an integer, a
float, a character, etc. This data item should be problem related and not used for the control
purpose.
Stamp coupling: Two modules are stamp coupled, if they communicate using a composite data
item such as a record in PASCAL or a structure in C.
Control coupling: Control coupling exists between two modules, if data from one module is used
to direct the order of instructions execution in another. An example of control coupling is a flag
set in one module and tested in another module.
Common coupling: Two modules are common coupled, if they share data through some global
data items.
Content coupling: Content coupling exists between two modules, if they share code, e.g. a
branch from one module into another module.
Function-oriented design
The following are the salient features of a typical function-oriented design approach:
1. A system is viewed as something that performs a set of functions. Starting at this high-level
view of the system, each function is successively refined into more detailed functions. For
example, consider a function create-new library- member which essentially creates the record for
a new member, assigns a unique membership number to him, and prints a bill towards his
membership charge. This function may consist of the following subfunctions:
• assign-membership-number
• create-member-record
• print-bill
Each of these sub-functions may be split into more detailed subfunctions and so on.
2. The system state is centralized and shared among different functions, e.g.
data such as member-records is available for reference and updation to several functions such as:
• create-new-member
• delete-member
• update-member-record
Object-oriented design
In the object-oriented design approach, the system is viewed as collection of objects (i.e. entities).
The state is decentralized among the objects and each object manages its own state information.
For example, in a Library Automation Software, each library member may be a separate object
with its own data and functions to operate on these data. In fact, the functions defined for one
21
object cannot refer or change data of other objects. Objects have their own internal data which
define their state. Similar objects constitute a class. In other words, each object is a member of
some class. Classes may inherit features from super class.
Conceptually, objects communicate by message passing.
22