Se Unit Iii
Se Unit Iii
Se Unit Iii
1. Conflict Management: Conflict management is the process to restrict the negative features of
conflict while increasing the positive features of conflict. The goal of conflict management is to
improve learning and group results including efficacy or performance in an organizational setting.
Properly managed conflict can enhance group results.
2. Risk Management: Risk management is the analysis and identification of risks that is followed
by synchronized and economical implementation of resources to minimize, operate and control the
possibility or effect of unfortunate events or to maximize the realization of opportunities.
3. Requirement Management: It is the process of analyzing, prioritizing, tracking, and
documenting requirements and then supervising change and communicating to pertinent
stakeholders. It is a continuous process during a project.
4. Change Management: Change management is a systematic approach for dealing with the
transition or transformation of an organization’s goals, processes, or technologies. The purpose of
1
Software Engineering (R15)
change management is to execute strategies for effecting change, controlling change, and helping
people to adapt to change.
5. Software Configuration Management: Software configuration management is the process of
controlling and tracking changes in the software, part of the larger cross-disciplinary field of
configuration management. Software configuration management includes revision control and the
inauguration of baselines.
6. Release Management: Release Management is the task of planning, controlling, and
scheduling the build-in deploying releases. Release management ensures that the organization
delivers new and enhanced services required by the customer while protecting the integrity of
existing services.
The list of focus areas it can tackle and the broad upsides of the Software Project. Management are:
1. Planning: The software project manager lays out the complete project’s blueprint. The
project plan will outline the scope, resources, timelines, techniques, strategy,
communication, testing, and maintenance steps. SPM can aid greatly here.
2. Leading: A software project manager brings together and leads a team of engineers, strategists,
programmers, designers, and data scientists. Leading a team necessitates exceptional
communication, interpersonal, and leadership abilities. One can only hope to do this effectively if
one sticks with the core SPM principles.
3. Execution: SPM comes to the rescue here also as the person in charge of software projects (if
well versed with SPM/Agile methodologies) will ensure that each stage of the project is completed
successfully. measuring progress, monitoring to check how teams function, and generating status
reports are all part of this process.
4. Time management: Abiding by a timeline is crucial to completing deliverables successfully.
This is especially difficult when managing software projects because changes to the original project
charter are unavoidable over time. To assure progress in the face of blockages or changes, software
project managers ought to be specialists in managing risk and emergency preparedness. This Risk
Mitigation and
management is one of the core tents of the philosophy of SPM.
5. Budget: Software project managers, like conventional project managers, are responsible
for generating a project budget and adhering to it as closely as feasible, regulating spending
and reassigning funds as needed. SPM teaches us how to effectively manage the monetary
aspect of projects to avoid running into a financial crunch later on in the project.
6. Maintenance: Software project management emphasizes continuous product testing to find and
repair defects early, tailor the end product to the needs of the client, and keep the project on track.
The software project manager makes ensuring that the product is thoroughly tested, analyzed, and
adjusted as needed. Another point in favour of SPM.
2
Software Engineering (R15)
Downsides of Software Project Management:
Numerous issues can develop if a Software project manager lacks the necessary expertise or knowledge.
Software Project management has several drawbacks, including resource loss, scheduling difficulty,
data protection concerns, and interpersonal conflicts between Developers/Engineers/Stakeholders.
Furthermore, outsourcing work or recruiting additional personnel to complete the project may result in
hefty costs for one’s company.
1. Costs are high: Consider spending money on various kinds of project management tools,
software, & services if ones engage in Software Project Management strategies. These initiatives
can be expensive and time-consuming to put in place. Because your team will be using them as well,
they may require training. One may need to recruit subject matter experts or specialists to assist
with a project, depending on the circumstances. Stakeholders will frequently press for the inclusion
of features that were not originally envisioned. All of these factors can quickly drive up a project’s
cost.
2. Complexity will be increased: Software Project management is a multi-stage, complex
process. Unfortunately, some specialists might have a propensity to over complicate everything,
which can lead to confusion among teams and lead to delays in project completion. They may also
become dogmatic and specific in their ideas, resulting in a difficult work atmosphere. Projects
having a larger scope are typically more arduous to complete, especially if there isn’t a dedicated
team committed completely to the project. Members of cross-functional teams may lag far
behind their daily tasks, adding to the overall complexity of the project being worked on.
3. Overhead in Communication: Recruits enter your organisation when we hire software project
management personnel. This provides a steady flow of communication that may or may not match a
company’s culture. As a result, it is advised that you maintain your crew as
small as feasible. The communication overhead tends to skyrocket when a team becomes large
3
Software Engineering (R15)
enough. When a large team is needed for a project, it’s critical to identify software project
managers who can conduct effective communication with a variety of people.
4. Lack of originality: Software Project managers can sometimes provide little or no space
for creativity. Team leaders either place an excessive amount of emphasis on
management processes or impose hard deadlines on their employees, requiring them to develop and
operate code within stringent guidelines. This can stifle innovative thought and innovation that
could be beneficial to the project. When it comes to Software project management, knowing when
to encourage creativity and when to stick to the project plan is crucial. Without Software project
management personnel, an organization can perhaps build and ship code more quickly. However,
employing a trained specialist to handle these areas, on the other hand, can open up new doors and
help the organisation achieve its objectives more
quickly and more thoroughly.
Feasibility Study: A feasibility study explores system requirements to determine project feasibility.
There are several fields of feasibility study including economic feasibility, operational feasibility, and
technical feasibility. The goal is to determine whether the system can be implemented or not. The
process of feasibility study takes as input the required details as specified by the user and other
domain-specific details. The output of this process simply tells whether the project should be
4
Software Engineering (R15)
undertaken or not and if yes, what would the constraints be. Additionally, all the risks and their
potential effects on the projects are also evaluated before a decision to start the project is taken.
Project Planning: A detailed plan stating a stepwise strategy to achieve the listed objectives is an
integral part of any project. Planning consists of the following activities:
Set objectives or goals
Develop strategies
Develop project policies
Determine courses of action
Making planning decisions
Set procedures and rules for the project
Develop a software project plan
Prepare budget
Conduct risk management
Document software project plans
This step also involves the construction of a work breakdown structure(WBS). It also includes size,
effort, schedule, and cost estimation using various techniques.
Principles of effective project planning:
Project should be effective so that the project begins with well-defined tasks. Effective project planning
helps to minimize the additional costs incurred on the project while it is in progress.
1. Planning is necessary: Planning should be done before a project begins.
2. Risk analysis: Before starting the project, senior management and the project management team
should consider the risks that may affect the project.
3. Tracking of project plan: Once the project plan is prepared, it should be tracked and modified
accordingly.
4. Most quality standards and produce quality deliverable: The project plan should identify
processes by which the project management team can ensure quality in software.
5. Description of flexibility to accommodate changes: The result of project planning is recorded in
the form of a project plan, which should allow new changes to be accommodated when the project
is in progress
Project Execution: A project is executed by choosing an appropriate software development lifecycle
model(SDLC). It includes a number of steps including requirements analysis, design, coding, testing
and implementation, testing, delivery, and maintenance. There are a number of factors that need to be
considered while doing so including the size of the system, the nature of the project, time and budget
constraints, domain requirements, etc. An inappropriate SDLC can lead to the failure of the project.
Project Termination: There can be several reasons for the termination of a project. Though expecting
a project to terminate after successful completion is conventional, at times, a project may also
terminate without completion. Projects have to be closed down when the requirements are not fulfilled
according to given time and cost constraints.
Some of the reasons for failure include:
Fast-changing technology
Project running out of time
5
Software Engineering (R15)
Organizational politics
Too much change in customer requirements
Project exceeding budget or funds
Once the project is terminated, a post-performance analysis is done. Also, a final report is published
describing the experiences, lessons learned, and recommendations for handling future projects.
Project management is a systematic approach to planning, organizing, and controlling the resources
required to achieve specific project goals and objectives. The project management process involves a
set of activities that are performed to plan, execute, and close a project. The project management
process can be divided into several phases, each of which has a specific purpose and set of tasks.
1. Initiation: This phase involves defining the project, identifying the stakeholders, and
establishing the project’s goals and objectives.
2. Planning: In this phase, the project manager defines the scope of the project, develops a detailed
project plan, and identifies the resources required to complete the project.
3. Execution: This phase involves the actual implementation of the project, including the
allocation of resources, the execution of tasks, and the monitoring and control of project progress.
4. Monitoring and Control: This phase involves tracking the project’s progress, comparing actual
results to the project plan, and making changes to the project as necessary.
5. Closing: This phase involves completing the project, documenting the results, and closing out
any open issues.
6. Effective project management requires a clear understanding of the project management process
and the skills necessary to apply it effectively. The project manager must have the ability to plan
and execute projects, manage resources, communicate effectively, and handle risks and issues.
Function Points: This technique involves estimating the project size based on the functionality
provided by the software. Function points consider factors such as inputs, outputs, inquiries, and files
to arrive at the project size estimate.
7
Software Engineering (R15)
Use Case Points: This technique involves estimating the project size based on the number of use cases
that the software must support. Use case points consider factors such as the complexity of each use
case, the number of actors involved, and the number of use cases.
Each of these techniques has its strengths and weaknesses, and the choice of technique depends on
various factors such as the project’s complexity, available data, and the expertise of the team.
Estimation of the size of the software is an essential part of Software Project Management. It helps the
project manager to further predict the effort and time which will be needed to build the project. Various
measures are used in project size estimation. Some of these are:
Lines of Code
Number of entities in ER diagram
Total number of processes in detailed data flow diagram
Function points
1. Lines of Code (LOC): As the name suggests, LOC counts the total number of lines of source code
in a project. The units of LOC are:
KLOC- Thousand lines of code
NLOC- Non-comment lines of code
KDSI- Thousands of delivered source instruction
The size is estimated by comparing it with the existing systems of the same kind. The experts use it to
predict the required size of various components of software and then add them to get the total size.
It’s tough to estimate LOC by analyzing the problem definition. Only after the whole code has been
developed can accurate LOC be estimated. This statistic is of little utility to project managers because
project planning must be completed before development activity can begin.
Two separate source files having a similar number of lines may not require the same effort. A file with
complicated logic would take longer to create than one with simple logic. Proper estimation may not be
attainable based on LOC.
The length of time it takes to solve an issue is measured in LOC. This statistic will differ greatly from
one programmer to the next. A seasoned programmer can write the same logic in fewer lines than a
newbie coder.
Advantages:
Universally accepted and is used in many models like COCOMO.
Estimation is closer to the developer’s perspective.
Both people throughout the world utilize and accept it.
At project completion, LOC is easily quantified.
It has a specific connection to the result.
Simple to use.
Disadvantages:
Different programming languages contain a different number of lines.
No proper industry standard exists for this technique.
It is difficult to estimate the size using this technique in the early stages of the project.
When platforms and languages are different, LOC cannot be used to normalize.
8
Software Engineering (R15)
2. Number of entities in ER diagram: ER model provides a static view of the project. It describes the
entities and their relationships. The number of entities in ER model can be used to measure the
estimation of the size of the project. The number of entities depends on the size of the project. This is
because more entities needed more classes/structures thus leading to more coding.
Advantages:
Size estimation can be done during the initial stages of planning.
The number of entities is independent of the programming technologies used.
Disadvantages:
No fixed standards exist. Some entities contribute more to project size than others.
Just like FPA, it is less used in the cost estimation model. Hence, it must be converted to LOC.
3. Total number of processes in detailed data flow diagram: Data Flow Diagram(DFD) represents
the functional view of software. The model depicts the main processes/functions involved in software
and the flow of data between them. Utilization of the number of functions in DFD to predict software
size. Already existing processes of similar type are studied and used to estimate the size of the process.
Sum of the estimated size of each process gives the final estimated size.
Advantages:
It is independent of the programming language.
Each major process can be decomposed into smaller processes. This will increase the accuracy
of the estimation
Disadvantages:
Studying similar kinds of processes to estimate size takes additional time and effort.
All software projects are not required for the construction of DFD.
4. Function Point Analysis: In this method, the number and type of functions supported by the
software are utilized to find FPC(function point count). The steps in function point analysis are:
Count the number of functions of each proposed type.
Compute the Unadjusted Function Points(UFP).
Find the Total Degree of Influence(TDI).
Compute Value Adjustment Factor(VAF).
Find the Function Point Count(FPC).
The explanation of the above points is given below:
Count the number of functions of each proposed type: Find the number of functions
belonging to the following types:
External Inputs: Functions related to data entering the system.
External outputs: Functions related to data exiting the system.
External Inquiries: They lead to data retrieval from the system but don’t change the
system.
Internal Files: Logical files maintained within the system. Log files are not included here.
External interface Files: These are logical files for other applications which are used by
our system.
Compute the Unadjusted Function Points(UFP): Categorise each of the five function types
like simple, average, or complex based on their complexity. Multiply the count of each function
9
Software Engineering (R15)
type with its weighting factor and find the weighted sum. The weighting factors for each type based
on their complexity are as follows:
Function type Simple Average Complex
External Inputs 3 4 6
External Output 4 5 7
External Inquiries 3 4 6
Find Total Degree of Influence: Use the ’14 general characteristics’ of a system to find the
degree of influence of each of them. The sum of all 14 degrees of influence will give the TDI. The
range of TDI is 0 to 70. The 14 general characteristics are: Data Communications, Distributed Data
Processing, Performance, Heavily Used Configuration, Transaction Rate, On-Line Data Entry, End-
user Efficiency, Online Update, Complex Processing Reusability, Installation Ease, Operational
Ease, Multiple Sites and Facilitate Change.
Each of the above characteristics is evaluated on a scale of 0-5.
Compute Value Adjustment Factor(VAF): Use the following formula to calculate VAF
VAF = (TDI * 0.01) + 0.65
Find the Function Point Count: Use the following formula to calculate FPC
FPC = UFP * VAF
Advantages:
It can be easily used in the early stages of project planning.
It is independent of the programming language.
It can be used to compare different projects even if they use different technologies(database,
language, etc).
Disadvantages:
It is not good for real-time systems and embedded systems.
Many cost estimation models like COCOMO use LOC and hence FPC must be converted to
LOC.
11
Software Engineering (R15)
below: A
change request (CR) is submitted and evaluated to assess technical merit, potential side effects,
overall impact on other configuration objects and system functions, and the projected cost of the
change. The results of the evaluation are presented as a change report, which is used by a change
control board (CCB) —a person or group who makes a final decision on the status and priority of
the change. An engineering change Request (ECR) is generated for each approved change. Also
CCB notifies the developer in case the change is rejected with proper reason. The ECR describes
the change to be made, the constraints that must be respected, and the criteria for review and audit.
The object to be changed is “checked out” of the project database, the change is made, and then the
object is tested again. The object is then “checked in” to the database and appropriate version
control mechanisms are used to create the next version of the software.
4. Configuration auditing – A software configuration audit complements the formal technical
review of the process and product. It focuses on the technical correctness of the configuration
object that has been modified. The audit confirms the completeness, correctness and consistency of
items in the SCM system and track action items from the audit to closure.
5. Reporting – Providing accurate status and current configuration data to developers, tester, end
users, customers and stakeholders through admin guides, user guides, FAQs, Release notes, Memos,
Installation Guide, Configuration guide etc .
System Configuration Management (SCM) is a software engineering practice that focuses on managing
the configuration of software systems and ensuring that software components are properly controlled,
tracked, and stored. It is a critical aspect of software development, as it helps to ensure that changes
made to a software system are properly coordinated and that the system is always in a known and
stable state.
12
Software Engineering (R15)
SCM involves a set of processes and tools that help to manage the different components of a software
system, including source code, documentation, and other assets. It enables teams to track changes made
to the software system, identify when and why changes were made, and manage the integration of these
changes into the final product.
1. Control the evolution of software systems: SCM helps to ensure that changes to a software
system are properly planned, tested, and integrated into the final product.
2. Enable collaboration and coordination: SCM helps teams to collaborate and coordinate their
work, ensuring that changes are properly integrated and that everyone is working from the same
version of the software system.
3. Provide version control: SCM provides version control for software systems, enabling teams to
manage and track different versions of the system and to revert to earlier versions if necessary.
4. Facilitate replication and distribution: SCM helps to ensure that software systems can be easily
replicated and distributed to other environments, such as test, production, and customer sites.
5. SCM is a critical component of software development, and effective SCM practices can help to
improve the quality and reliability of software systems, as well as increase efficiency and reduce
the risk of errors.
1. Improved productivity and efficiency by reducing the time and effort required to manage
software changes.
2. Reduced risk of errors and defects by ensuring that all changes are properly tested and validated.
3. Increased collaboration and communication among team members by providing a central
repository for software artifacts.
4. Improved quality and stability of software systems by ensuring that all changes are properly
controlled and managed.
COCOMO Model
Cocomo (Constructive Cost Model) is a regression model based on LOC, i.e number of Lines of Code.
It is a procedural cost estimate model for software projects and is often used as a process of reliably
predicting the various parameters associated with making a project such as size, effort, cost, time, and
quality. It was proposed by Barry Boehm in 1981 and is based on the study of 63 projects, which
makes it one of the best-documented models.
13
Software Engineering (R15)
The key parameters which define the quality of any software products, which are also an outcome of
the Cocomo are primarily Effort & Schedule:
Effort: Amount of labor that will be required to complete a task. It is measured in person-
months units.
Schedule: Simply means the amount of time required for the completion of the job, which is, of
course, proportional to the effort put in. It is measured in the units of time such as weeks, and
months.
Different models of Cocomo have been proposed to predict the cost estimation at different levels,
based on the amount of accuracy and correctness required. All of these models can be applied to a
variety of projects, whose characteristics determine the value of the constant to be used in subsequent
calculations.
These characteristics pertaining to different system types are mentioned below. Boehm’s definition of
organic, semidetached, and embedded systems:
1. Organic – A software project is said to be an organic type if the team size required is adequately
small, the problem is well understood and has been solved in the past and also the team members have
a nominal experience regarding the problem.
2. Semi-detached – A software project is said to be a Semi-detached type if the vital characteristics
such as team size, experience, and knowledge of the various programming environment lie in between
that of organic and Embedded. The projects classified as Semi-Detached are comparatively less
familiar and difficult to develop compared to the organic ones and require more experience and better
guidance and creativity. Eg: Compilers or different Embedded Systems can be considered Semi-
Detached types.
3. Embedded – A software project requiring the highest level of complexity, creativity, and experience
requirement fall under this category. Such software requires a larger team size than the other two
models and also the developers need to be sufficiently experienced and creative to develop such
complex models.
1. Basic COCOMO Model
2. Intermediate COCOMO Model
3. Detailed COCOMO Model
1. Basic Model –
The above formula is used for the cost estimation of for the basic COCOMO model, and also is used in
the subsequent models. The constant values a,b,c, and d for the Basic Model for the different categories
of the system:
Software Projects a b c d
14
Software Engineering (R15)
Software Projects a b c d
The effort is measured in Person-Months and as evident from the formula is dependent on Kilo-Lines
of code. The development time is measured in months. These formulas are used as such in the Basic
Model calculations, as not much consideration of different factors such as reliability, and expertise is
taken into account, henceforth the estimate is rough.
15
Software Engineering (R15)
Since, new technologies and organizational practices emerge rapidly, the organizations should
continually improve their practices and develop the abilities of people.
Shortcomings of SEI/CMM:
It encourages the achievement of a higher maturity level in some cases by displacing the true
mission, which is improving the process and overall software quality.
It only helps if it is put into place early in the software development process.
It has no formal theoretical basis and in fact is based on the experience of very knowledgeable
people.
It does not have good empirical support and this same empirical support could also be
constructed to support other models.
Difficulty in measuring process improvement: The SEI/CMM model may not provide an
accurate measure of process improvement, as it relies on self-assessment by the organization and
may not capture all aspects of the development process.
Focus on documentation rather than outcomes: The SEI/CMM model may focus too much on
documentation and adherence to procedures, rather than on actual outcomes such as software
quality and customer satisfaction.
May not be suitable for all types of organizations: The SEI/CMM model may not be suitable for
all types of organizations, particularly those with smaller development teams or those with less
structured development processes.
May not keep up with rapidly evolving technologies: The SEI/CMM model may not be able to
keep up with rapidly evolving technologies and development methodologies, which could limit its
usefulness in certain contexts.
Lack of agility: The SEI/CMM model may not be agile enough to respond quickly to changing
business needs or customer requirements, which could limit its usefulness in dynamic and rapidly
changing environments.
Key Process Areas (KPA’s): Each of these KPA’s defines the basic requirements that should be met
by a software process in order to satisfy the KPA and achieve that level of maturity.
Conceptually, key process areas form the basis for management control of the software project and
establish a context in which technical methods are applied, work products like models, documents, data,
reports, etc. are produced, milestones are established, quality is ensured and change is properly
managed.
16
Software Engineering (R15)
The 5 levels of CMM are as follows:
Level-1: Initial –
No KPA’s defined.
Processes followed are Adhoc and immature and are not well defined.
Unstable environment for software development.
No basis for predicting product quality, time for completion, etc.
Limited project management capabilities, such as no systematic tracking of schedules, budgets,
or progress.
Limited communication and coordination among team members and stakeholders.
No formal training or orientation for new team members.
Little or no use of software development tools or automation.
Highly dependent on individual skills and knowledge rather than standardized processes.
High risk of project failure or delays due to lack of process control and stability.
Level-2: Repeatable –
Focuses on establishing basic project management policies.
Experience with earlier projects is used for managing new similar natured projects.
17
Software Engineering (R15)
Project Planning- It includes defining resources required, goals, constraints, etc. for the project.
It presents a detailed plan to be followed systematically for the successful completion of good
quality software.
Configuration Management- The focus is on maintaining the performance of the software
product, including all its components, for the entire lifecycle.
Requirements Management- It includes the management of customer reviews and feedback
which result in some changes in the requirement set. It also consists of accommodation of those
modified requirements.
Subcontract Management- It focuses on the effective management of qualified software
contractors i.e. it manages the parts of the software which are developed by third parties.
Software Quality Assurance- It guarantees a good quality software product by following
certain rules and quality standard guidelines while developing.
Level-3: Defined –
At this level, documentation of the standard guidelines and procedures takes place.
It is a well-defined integrated set of project-specific software engineering and management
processes.
Peer Reviews- In this method, defects are removed by using a number of review methods like
walkthroughs, inspections, buddy checks, etc.
Intergroup Coordination- It consists of planned interactions between different development
teams to ensure efficient and proper fulfillment of customer needs.
Organization Process Definition- Its key focus is on the development and maintenance of the
standard development processes.
Organization Process Focus- It includes activities and practices that should be followed to
improve the process capabilities of an organization.
Training Programs- It focuses on the enhancement of knowledge and skills of the team
members including the developers and ensuring an increase in work efficiency.
Level-4: Managed –
At this stage, quantitative quality goals are set for the organization for software products as well
as software processes.
The measurements made help the organization to predict the product and process quality within
some limits defined quantitatively.
Software Quality Management- It includes the establishment of plans and strategies to
develop quantitative analysis and understanding of the product’s quality.
Quantitative Management- It focuses on controlling the project performance in a quantitative
manner.
Level-5: Optimizing –
This is the highest level of process maturity in CMM and focuses on continuous process
improvement in the organization using quantitative feedback.
Use of new tools, techniques, and evaluation of software processes is done to prevent recurrence
of known defects.
Process Change Management- Its focus is on the continuous improvement of the
organization’s software processes to improve productivity, quality, and cycle time for the software
product.
18
Software Engineering (R15)
Technology Change Management- It consists of the identification and use of new technologies
to improve product quality and decrease product development time.
Defect Prevention- It focuses on the identification of causes of defects and prevents them from
recurring in future projects by improving project-defined processes.
1. Preliminary Analysis
This step is very important for a clear understanding of customer expectations and requirements. Thus
it is very important to conduct this phase with utmost care and given due time as any possible error will
19
Software Engineering (R15)
cause the failure of the entire process. Following are the series of steps that are conducted during this
stage.
End-user requirements are obtained through documentation, client interviews, observation, and
questionnaires
Pros and cons of the current system are identified so as to avoid the cons and carry forward the
pros in the new system.
Any Specific user proposals are used to prepare the specifications and solutions for the
shortcomings discovered in step two are found.
Identify assets that need to be protected and assign their criticality in terms of confidentiality,
integrity, and availability.
Identify threats and resulting risks to those assets.
Determine existing security controls to reduce that risks.
Feasibility Study: This is the first and most important phase. Often this phase is conducted as a
standalone phase in big projects not as a sub-phase under the requirement definition phase. This phase
allows the team to get an estimate of major risk factors cost and time for a given project. You might be
wondering why this is so important. A feasibility study helps us to get an idea of whether it is worth
constructing the system or not. It helps to identify the main risk factors.
Risk Factors: Following is the list of risk factors for the feasibility study phase.
Project managers often make a mistake in estimating the cost, time, resources, and scope of the
project. Unrealistic budget, time, inadequate resources, and unclear scope often lead to project
failure.
Unrealistic Budget: As discussed above inaccurate estimation of the budget may lead to the
project running out of funds early in the SDLC. An accurate estimation budget is directly related to
correct knowledge of time, effort, and resources.
Unrealistic Schedule: Incorrect time estimation lead to a burden on developers by project
managers to deliver the project on time. Thus compromising the overall quality of the project and
thus making the system less secure and more vulnerable.
Insufficient resources: In some cases, the technology, and tools available are not up-to-date to
meet project requirements, or resources(people, tools, technology) available are not enough to
complete the project. In any case, it is the project will get delayed, or in the worst case it may lead
to project failure.
Unclear project scope: Clear understanding of what the project is supposed to do, which
functionalities are important, which functionalities are mandatory, and which functionalities can be
considered as extra is very important for project managers. Insufficient knowledge of the system
may lead to project failure.
Requirement Elicitation: It starts with an analysis of the application domain. This phase requires the
participation of different stakeholders to ensure efficient, correct, and complete gathering of system
services, their performance, and constraints. This data set is then reviewed and articulated to make it
ready for the next phase.
Risk Factors: Following is the list of risk factors for the Requirement Elicitation phase.
Incomplete requirements: In 60% of the cases users are unable to state all requirements in the
beginning. Therefore requirements have the most dynamic nature in the complete SDLC (Software
20
Software Engineering (R15)
Development Life Cycle) Process. If any of the user needs, constraints, or other functional/non-
functional requirements are not covered then the requirement set is said to be incomplete.
Inaccurate requirements: If the requirement set does not reflect real user needs then in that
case requirements are said to be inaccurate.
Unclear requirements: Often in the process of SDLC there exists a communication gap
between users and developers. This ultimately affects the requirement set. If the requirements stated
by users are not understandable by analysts and developers then these requirements are said to be
unclear.
Ignoring nonfunctional requirements: Sometimes developers and analysts ignore the fact that
nonfunctional requirements hold equal importance as functional requirements. In this confusion,
they focus on delivering what the system should do rather than how the system should be like
scalability, maintainability, testability, etc.
Conflicting user requirements: Multiple users in a system may have different requirements. If
not listed and analyzed carefully, this may lead to inconsistency in the requirements.
Gold plating: It is very important to list out all requirements in the beginning. Adding
requirements later during development may lead to threats in the system. Gold plating is nothing
but adding extra functionality to the system that was not considered earlier. Thus inviting threats
and making the system vulnerable.
Unclear description of real operating environment: Insufficient knowledge of real operating
environment leads to certain missed vulnerabilities thus threats remain undetected until a later stage
of the software development life cycle.
Requirement Analysis Activity: In this step requirements that are gathered by interviewing users or
brainstorming or by another means will be: first analyzed and then classified and organized such as
functional and nonfunctional requirements groups and then these are prioritized to get a better
knowledge of which requirements are of high priority and need to be definitely present in the system.
After all these steps requirements are negotiated.
Risk Factors: Risk management in this Requirement Analysis Activity step has the following task to
do.
Nonverifiable requirements: If a finite cost-effective process like testing, inspection, etc is not
available to check whether the software meets the requirement or not then that requirement is said
to be nonverifiable.
Infeasible requirement: if sufficient resources are not available to successfully implement the
requirement then it is said to be an infeasible requirement.
Inconsistent requirement: If a requirement contradicts any other requirement then the
requirement is said to be inconsistent.
Nontraceable requirement: It is very important for every requirement to have an origin source.
During documentation, it is necessary to write the origin source of each requirement so that it can
be traced back in the future when required.
Unrealistic requirement: If a requirement meets all the above criteria like it is complete,
accurate, consistent, traceable, verifiable, etc then that requirement is realistic enough to be
documented and implemented.
Requirement Validation Activity: This involves validating the requirements that are gathered and
analyzed till now to check whether they actually define what users want from the system.
Risk Factors: Following is the list of risk factors for the Requirement Validation Activity phase.
21
Software Engineering (R15)
Misunderstood domain-specific terminology: Developers and Application specialists often
use domain-specific terminology or we can say technical terms which are not understandable for
the majority of end users. Thus creating a misunderstanding between end users and developers.
Using natural language to express requirements: Natural language is not always the best way
to express requirements as different users may have different signs and conventions. Thus it is
advisable to use formal language for expressing and documenting.
Requirement Documentation Activity: This step involves creating a Requirement Document (RD) by
writing down all the agreed-upon requirements using formal language. RD serves as a means of
communication between different stakeholders.
Risk Factors: Following is the list of risk factors for the Requirement Documentation Activity phase.
Inconsistent requirements data and RD: Sometimes it might happen, due to glitches in the
gathering and documentation process, actual requirements may differ from the documented ones.
Nonmodifiable RD: If during RD preparation, structuring of RD with maintainability is not
considered then it will become difficult to edit the document in the course of change without
rewriting it.
Software Maintenance
Software Maintenance refers to the process of modifying and updating a software system after it has
been delivered to the customer. This can include fixing bugs, adding new features, improving
performance, or updating the software to work with new hardware or software systems. The goal of
software maintenance is to keep the software system working correctly, efficiently, and securely, and
to ensure that it continues to meet the needs of the users.
Software maintenance is a continuous process that occurs throughout the entire life cycle of the
software system. It is important to have a well-defined maintenance process in place, which
includes testing and validation, version control, and communication with stakeholders.
26
Software Engineering (R15)
Adaptive maintenance: This includes modifications and updations when the customers need
the product to run on new platforms, on new operating systems, or when they need the product to
interface with new hardware and software.
Perfective maintenance: A software product needs maintenance to support the new features
that the users want or to change different types of functionalities of the system according to the
customer’s demands.
Preventive maintenance: This type of maintenance includes modifications and updations to
prevent future problems with the software. It goals to attend to problems, which are not significant
at this moment but may cause serious issues in the future.
Advantages of Software Maintenance
Improved Software Quality: Regular software maintenance helps to ensure that the software is
functioning correctly and efficiently and that it continues to meet the needs of the users.
Enhanced Security: Maintenance can include security updates and patches, helping to ensure
that the software is protected against potential threats and attacks.
Increased User Satisfaction: Regular software maintenance helps to keep the software up-to-
date and relevant, leading to increased user satisfaction and adoption.
Extended Software Life: Proper software maintenance can extend the life of the software,
allowing it to be used for longer periods of time and reducing the need for costly replacements.
Cost Savings: Regular software maintenance can help to prevent larger, more expensive
problems from occurring, reducing the overall cost of software ownership.
Better Alignment with business goals: Regular software maintenance can help to ensure that
the software remains aligned with the changing needs of the business. This can help to improve
overall business efficiency and productivity.
Competitive Advantage: Regular software maintenance can help to keep the software ahead of
the competition by improving functionality, performance, and user experience.
Compliance with Regulations: Software maintenance can help to ensure that the software
complies with relevant regulations and standards. This is particularly important in industries such as
healthcare, finance, and government, where compliance is critical.
Improved Collaboration: Regular software maintenance can help to improve collaboration
between different teams, such as developers, testers, and users. This can lead to better
communication and more effective problem-solving.
Reduced Downtime: Software maintenance can help to reduce downtime caused by system
failures or errors. This can have a positive impact on business operations and reduce the risk of lost
revenue or customers.
Improved Scalability: Regular software maintenance can help to ensure that the software is
scalable and can handle increased user demand. This can be particularly important for growing
businesses or for software that is used by a large number of users.
Disadvantages of Software Maintenance
Cost: Software maintenance can be time-consuming and expensive, and may require significant
resources and expertise.
Schedule disruptions: Maintenance can cause disruptions to the normal schedule and
operations of the software, leading to potential downtime and inconvenience.
Complexity: Maintaining and updating complex software systems can be challenging, requiring
specialized knowledge and expertise.
27
Software Engineering (R15)
Risk of introducing new bugs: The process of fixing bugs or adding new features can introduce
new bugs or problems, making it important to thoroughly test the software after maintenance.
User resistance: Users may resist changes or updates to the software, leading to decreased
satisfaction and adoption.
Compatibility issues: Maintenance can sometimes cause compatibility issues with other
software or hardware, leading to potential integration problems.
Lack of documentation: Poor documentation or lack of documentation can make software
maintenance more difficult and time-consuming, leading to potential errors or delays.
Technical debt: Over time, software maintenance can lead to technical debt, where the cost of
maintaining and updating the software becomes increasingly higher than the cost of developing a
new system.
Skill gaps: Maintaining software systems may require specialized skills or expertise that may
not be available within the organization, leading to potential outsourcing or increased costs.
Inadequate testing: Inadequate testing or incomplete testing after maintenance can lead to
errors, bugs, and potential security vulnerabilities.
End-of-life: Eventually, software systems may reach their end-of-life, making maintenance and
updates no longer feasible or cost-effective. This can lead to the need for a complete system
replacement, which can be costly and time-consuming.
DESIGN CONCEPTS
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 answer the following questions:
• What criteria can be used to partition software into individual components?
• How is function or data structure detail separated from a conceptual representation of
the software?
• What uniform criteria define the technical quality of a software design?
28
Software Engineering (R15)
The following brief overview of important software design concepts that span both traditional
and object-oriented software development.
Abstraction
Abstraction is the act of representing essential features without including the background
details or explanations. the abstraction is used to reduce complexity and allow efficient design
and implementation of complex software systems. Many levels of abstraction can be posed. At
the highest level of abstraction, a solution is stated in broad terms using the language of the
problem environment. 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.
Architecture
Software architecture alludes to “the overall structure of the software and the ways in
which that structure provides conceptual integrity for a system” Architecture is the structure or
organization of program components (modules), the manner in which these components interact,
and the structure of data that are used by the components.
Shaw and Garlan describe a set of properties that should be specified as part of an architectural
design:
Structural properties. This aspect of the architectural design representation defines the
components of a system (e.g., modules, objects, filters) and the manner in which those
components are packaged and interact with one another.
Extra-functional properties. The architectural design description should address how
the design architecture achieves requirements for performance, capacity, reliability,
security, adaptability, and other system characteristics.
Families of related systems. The architectural design should draw upon repeatable
patterns that are commonly encountered in the design of families of similar systems. In
essence, the design should have the ability to reuse architectural building blocks.
The architectural design can be represented using one or more of a number of different models.
29
Software Engineering (R15)
Structural models: Represent architecture as an organized collection of program components.
Framework models: Increase the level of design abstraction by attempting to identify repeatable
architectural design frameworks that are encountered in similar types of applications.
Dynamic models : Address the behavioral aspects of the program architecture, indicating how
the structure or system configuration may change as a function of external events.
Process models :Focus on the design of the business or technical process that the system must
accommodate.
Functional models can be used to represent the functional hierarchy of a system.
A number of different architectural description languages (ADLs) have been developed
to represent these models.
Patterns
Brad Appleton defines a design pattern in the following manner: “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”
A design pattern describes a design structure that solves a particular design problem
within a specific context and amid “forces” that may have an impact on the manner in which the
pattern is applied and used.
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 (hence, saving design time), and (3) whether the pattern can serve as a guide for
developing a similar, but functionally or structurally different pattern.
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.
Separation of concerns is manifested in other related design concepts: modularity,
aspects, functional independence, and refinement. Each will be discussed in the subsections that
follow.
Modularity
Modularity is the most common manifestation of separation of concerns. Software is
divided into separately named and addressable components, sometimes called module.
30
Software Engineering (R15)
Modularity is the single attribute of software that allows a program to be intellectually
manageable
The use of information hiding as a design criterion for modular systems provides the
greatest benefits when modifications are required during testing and later during software
maintenance. Because most data and procedural detail are hidden from other parts of the
software, inadvertent errors introduced during modification are less likely to propagate to other
locations within the software.
Functional Independence
The concept of functional independence is a direct outgrowth of separation of concerns,
modularity, and the concepts of abstraction and information hiding. Functional independence is
achieved by developing modules with “single minded” function and an “aversion” to excessive
interaction with other modules.
Independence is assessed using two qualitative criteria: cohesion and coupling.
Cohesion is an indication of the relative functional strength of a module. Coupling is an
31
Software Engineering (R15)
indication of the relative interdependence among modules.
Cohesion is a natural extension of the information-hiding concept. A cohesive module
performs a single task, requiring little interaction with other components in other parts of a
program. Stated simply, a cohesive module should do just one thing. Although you should
always strive for high cohesion (i.e., single-mindedness).
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. In software design, you
should strive for the lowest possible coupling.
Refinement
Stepwise refinement is a top-down design strategy originally proposed by Niklaus Wirth.
Refinement is actually a process of elaboration. You begin with a statement of function that is
defined at a high level of abstraction.
Abstraction and refinement are complementary concepts. 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.
Aspects
An aspect is a representation of a crosscutting concern. A crosscutting concern is some
characteristic of the system that applies across many different requirements.
Refactoring
An important design activity suggested for many agile methods, refactoring is a reorganization
technique that simplifies the design (or code) of a component without changing its function or
behavior. Fowler defines refactoring in the following manner: “Refactoring is the process of
changing a software system in such a way that it does not alter the external behavior of the
code [design] yet improves its internal structure.”
Object-Oriented Design Concepts
The object-oriented (OO) paradigm is widely used in modern software engineering. OO
design concepts such as classes and objects, inheritance, messages, and polymorphism, among
others.
Design Classes
The requirements model defines a set of analysis classes. Each describes some element of the
problem domain, focusing on aspects of the problem that are user visible. A set of design classes
32
Software Engineering (R15)
that refine the analysis classes by providing design detail that will enable the classes to be
implemented, and implement a software infrastructure that supports the business solution.
Five different types of design classes, each representing a different layer of the design
architecture, can be developed:
• User interface classes define all abstractions that are necessary for human computer
interaction (HCI). The design classes for the interface may be visual representations of
the elements of the metaphor.
• Business domain classes are often refinements of the analysis classes defined earlier.
The classes identify the attributes and services (methods) that are required to implement
some element of the business domain.
• Process classes implement lower-level business abstractions required to fully manage
the business domain classes.
• Persistent classes represent data stores (e.g., a database) that will persist beyond the
execution of the software.
• System classes implement software management and control functions that enable the
system to operate and communicate within its computing environment and with the
outside world.
Arlow and Neustadt suggest that each design class be reviewed to ensure that it is “well-
formed.” They define four characteristics of a well-formed design class:
Complete and sufficient. A design class should be the complete encapsulation of all
attributes and methods that can reasonably be expected to exist for the class. Sufficiency
ensures that the design class contains only those methods that are sufficient to achieve the
intent of the class, no more and no less.
Primitiveness. Methods associated with a design class should be focused on
accomplishing one service for the class. Once the service has been implemented with a
method, the class should not provide another way to accomplish the same thing.
High cohesion. A cohesive design class has a small, focused set of responsibilities and
single-mindedly applies attributes and methods to implement those responsibilities.
Low coupling. Within the design model, it is necessary for design classes to collaborate
with one another. If a design model is highly coupled, the system is difficult to
implement, to test, and to maintain over time.
THE DESIGN MODEL
33
Software Engineering (R15)
The design model can be viewed in two different dimensions. The process dimension
indicates the evolution of the design model as design tasks are executed as part of the software
process. The abstraction dimension represents the level of detail as each element of the analysis
model is transformed into a design equivalent and then refined iteratively. The design model has
four major elements: data, architecture, components, and interface.
Data Design Elements
Data design (sometimes referred to as data architecting) creates a model of data and/or
information that is represented at a high level of abstraction (the customer/user’s view of data).
This data model is then refined into progressively more implementation-specific representations
that can be processed by the computer-based system. The structure of data has always been an
important part of software design. At the program component level, the design of data structures
and the associated algorithms required to manipulate them is essential to the creation of high-
quality applications. At the application level, the translation of a data model into a database is
pivotal to achieving the business objectives of a system. At the business level, the collection of
information stored in disparate databases and reorganized into a “data warehouse” enables data
mining or knowledge discovery that can have an impact on the success of the business itself.
36
Software Engineering (R15)
37
Software Engineering (R15)