Unit - 1 Introduction To Software Engineering - New
Unit - 1 Introduction To Software Engineering - New
By
1
CA-C16T : SOFTWARE ENGINEERING
Software Process Improvement (SPI): Approaches to SPI; Maturity models; The SPI
process; The CMMI; The People CMM; Other SPI frameworks: SPICE, Bootstrap, PSP
and TSP, ISO; SPI return on investment. Software Configuration Management (SCM):
Basic concepts; SCM repository; The SCM process; Configuration management for
web applications; SCM standards.
2
SOFTWARE ENGINEERING
UNIT – 1
Software engineering has evolved significantly since its inception in the 1960s. Initially,
software development was a purely technical process, and there was no standardization
in terms of development methodologies or programming languages. However, as
software systems grew more complex, the need for formalized approaches to software
development became evident. This led to the development of various software
engineering methodologies, such as the Waterfall model, the Spiral model, and the
Agile model.
Evolution of Software Engineering:
1. Early Years (1940s-1950s): During this period, computers were primarily used for
scientific and military purposes. Software development was mostly done by engineers
who worked on hardware and wrote programs in low-level assembly languages.
5. Web-based Computing (1990s): The invention of the World Wide Web and the
growth of the internet transformed the software industry. The web enabled the creation
of new software applications, such as e-commerce websites, and it paved the way for
the development of cloud computing and software-as-a-service (SaaS) models.
3
their software to work on smaller screens and to take advantage of mobile-specific
features, such as GPS and touch screens. This has led to the development of mobile
apps and the growth of the app store ecosystem.
However, software engineering also has some negative impacts. The development of
software systems can be costly, and many projects fail due to budget overruns or
technical issues. In addition, the rapid pace of software development can lead to security
vulnerabilities, which can be exploited by cybercriminals. This has resulted in increased
concerns about data privacy and cybersecurity.
The impact of software engineering has been enormous. Software is now an essential
part of virtually every aspect of modern life, from communication and entertainment to
finance and healthcare. Software engineering has made it possible to create complex
and powerful software applications that can process vast amounts of data, automate
business processes, and improve decision-making. At the same time, software
engineering has also introduced new challenges, such as security and privacy concerns,
software complexity, and the need to continuously update and maintain software
applications.
Characteristic of software
Software products: These are software systems that are delivered to a customer with
documentation which describe how to install and use the system.
5
1. Generic Products: These are stand alone systems which are produced to sell in
open market to any customer. The requirements and specification are controlled
by the developer.
Generic s/w is also called commercial-off-the-self (COTS) s/w.
Ex: Word processor, Drawing packages.
Software process: A set of activities and associated result which produce a s/w product.
6
Software Engineering Challenges:
4. Software Management:
These are the methods and procedures to be followed for effective
software maintenance.
7
Software Development Life cycle[SDLC]:
In SDLC each phase of the software development take the input of previous phase
result.
8
5. Software Operation & Maintenance:
This phase describes modification to the system developed while operation.
Corrective maintenance defines modification as a result of error discover. It includes
improvements update to the new version and making the system error free.
The water fall model is also referred as linear sequential model or classical life cycle
model.
1. Requirement definition
All possible requirement of a system to be developed are captured in this phase and also
requirement specification document is created which serves as a guideline for the next
phases of the model.
2. System and software design
It is highly important to understand the requirements of the user how should end
product look like. System design helps in specifying hardware and system requirements
and also defining system architecture.
9
3. Implementation and unit testing:
The system is first developed and the work is divided into modules or units. Each unit is
developed and tested for its functionality and this is referred as unit testing. It mainly
verifies whether all the modules are working properly or not.
4. Integration and system testing.
The units are integrated into a complete system during integration phase and tested to
check all the modules are co-ordinating with each other.
5. Operation and maintenance
This phase is a never ending phase generally problem arises after its practical use only,
so the maintenance of the system comes into picture directly when it is used. Hence this
phase is referred to as Maintenance.
Advantages:
1) It is very easy to understand
2) Widely used in many development areas
3) Identifies the milestones of the software development.
4) There is a clear compartment regarding work and control of the model.
5) It is the model as defined before design and design before code.
6) This model is the easiest to implement in the eyes of the managers.
Disadvantages:
1) Difficult and expensive to make changes to document in the middle of the process.
2) Significant administration is required.
3) Software is delivered late in project.
4) Unrealistic to expect to accurate requirements in the starting phase.
Where it is applicable?
This model is applicable only when all the requirements are well defined and
understood.
SPIRAL MODEL
The spiral model was proposed by “Barry Boehm” in 1986, it combines the best features
of water fall model and prototype model. The Spiral Model is a risk-driven model,
meaning that the focus is on managing risk through multiple iterations of the software
development process. Each loop represents a phase of the s/w development process. The
exact number of loops of the spiral is unknown and can vary from project to project. The
inner most loop is concerned with the system analysis and system feasibility and the next
loop with requirement definition. The next loop with system design and so on. Each phase
of the Spiral Model is divided into four quadrants as shown in the figure below. The
functions of these four quadrants are:
3. Develop next version of the Product: During the third quadrant, the identified
features are developed and verified through testing. At the end of the third quadrant,
the next version of the software is available.
4. Review and plan for the next Phase: In the fourth quadrant, the Customers
evaluate the so far developed version of the software. In the end, planning for the
next phase is started.
Advantages:
• The high amount of risk analysis.
• Good for large and mission critical projects.
• Project monitoring is very easy because of transparency in the model.
• It is suitable for high risk projects where business needs are high.
• A highly customized product can be developed using this model.
Disadvantages:
• Cost involve is usually high.
• Doesn’t work for smaller project.
• Required for evaluating & reviewing the project time to time
11
• Risk analysis required highly specific experts.
• Scheduling requirement are very much tough.
INCREMENTAL MODEL
ITERATIVE MODEL
In this Model, we can start with some of the software specifications and develop
the first version of the software. After the first version if there is a need to change the
software, then a new version of the software is created with a new iteration. Every
release of the Iterative Model finishes in an exact and fixed period that is called
iteration.
The Iterative Model allows the accessing earlier phases, in which the variations are
made respectively. The final output of the project is renewed at the end of the Software
Development Life Cycle (SDLC) process.
13
The various phases of Iterative model are as follows:
1. Requirement gathering & analysis: In this phase, requirements are gathered from
customers and checked by an analyst whether requirements will fulfil or not. Analyst
checks whether the need will be achieved within budget or not. After all of this, the
software team skips to the next phase.
2. Design: In the design phase, team will design the software by the different diagrams
like Data Flow diagram, activity diagram, class diagram, state transition diagram, etc.
3. Implementation: In the implementation, requirements are written in the coding
language and transformed into computer programmes which are called Software.
4. Testing: After completing the coding phase, software testing starts using different
test methods. There are many test methods, but the most common are white box and
black box testing methods.
5. Deployment: After completing all the phases, software is deployed to its work
environment.
6. Review: In this phase, after the product deployment, review phase is performed to
check the behaviour and validity of the developed product. And if there are any errors
found, then the process starts again from the requirement gathering.
7. Maintenance: In the maintenance phase, after deployment of the software in the
working environment there may be some bugs, some errors or new updates are required.
Maintenance involves debugging and new addition options.
Advantages:
1. Testing and debugging during smaller iteration is easy.
14
2. A Parallel development can plan.
3. It is easily acceptable to ever-changing needs of the project.
4. Risks are identified and resolved during iteration.
5. Limited time spent on documentation and extra time on designing.
Disadvantages:
1. It is not suitable for smaller projects.
2. More Resources may be required.
3. Design can be changed again and again because of imperfect requirements.
4. Requirement changes can cause over budget.
5. Project completion date not confirmed because of changing requirements.
PROTOTYPE MODEL
The prototype model requires that before carrying out the development of actual
software, a working prototype of the system should be built. A prototype is a working
model implementation of the system. A prototype usually turns out to be a very crude
version of the actual system, possible exhibiting limited functional capabilities, low
reliability, and inefficient performance as compared to actual software. In many
instances, the client only has a general view of what is expected from the software
product. In such a scenario where there is an absence of detailed information regarding
the input to the system, the processing needs and the output requirement, the
prototyping model may be employed.
15
Steps of Prototype Model
EVOLUTIONARY MODEL
Evolutionary model is a combination of Iterative and Incremental model of software
development life cycle. Delivering your system in a big bang release, delivering it in
incremental process over time is the action done in this model. Some initial requirements
16
and architecture envisioning need to be done. It is better for software products that have
their feature sets redefined during development because of user feedback and other
factors. The Evolutionary development model divides the development cycle into smaller,
incremental waterfall models in which users are able to get access to the product at the
end of each cycle. Feedback is provided by the users on the product for the planning stage
of the next cycle and the development team responds, often by changing the product, plan
or process. Therefore, the software product evolves with time. All the models have the
disadvantage that the duration of time from start of the project to the delivery time of a
solution is very high. Evolutionary model solves this problem in a different approach.
Evolutionary model suggests breaking down of work into smaller units, prioritizing
them and then delivering those units to the customer one by one. The number of units is
huge and is the number of deliveries made to the customer. The main advantage is that
the customer’s confidence increases as he constantly gets quantifiable goods or services
from the beginning of the project to verify and validate his requirements. This model
allows for changing requirements as well as all work is broken down into maintainable
work units.
Application of Evolutionary Model:
1. It is used in large projects where you can easily find modules for incremental
implementation.
2. Evolutionary model is commonly used when the customer wants to start using the
core features instead of waiting for the full software.
3. Evolutionary model is also used in object oriented software development because
the system can be easily portioned into units in terms of objects.
Necessary conditions for implementing this model:
1. Customer needs are clear and been explained in deep to the developer team.
2. There might be small changes required in separate parts but not a major change.
3. As it requires time, so there must be some time left for the market constraints.
17
4. Risk is high and continuous targets to achieve and report to customer repeatedly.
5. It is used when working on a technology is new and requires time to learn.
Advantages:
1. In evolutionary model, a user gets a chance to experiment partially developed
system.
2. It reduces the error because the core modules get tested thoroughly.
Disadvantages:
1. Sometimes it is hard to divide the problem into several versions that would be
acceptable to the customer which can be incrementally implemented and
delivered.
FEASIBILITY STUDY
Feasibility Study in Software Engineering is a study to evaluate feasibility of proposed
project or system. Feasibility study is one of the stages among important four stages of
Software Project Management Process. As name suggests feasibility study is the
feasibility analysis or it is a measure of the software product in terms of how much
beneficial product development will be for the organization in a practical point of view.
Feasibility study is carried out based on many purposes to analyse whether software
product will be right in terms of development, implementation, contribution of project
to the organization etc.
Along with this, Feasibility study helps in identifying risk factors involved in
developing and deploying system and planning for risk analysis also narrows the
business alternatives and enhance success rate analysing different parameters associated
with proposed project development.
REQUIREMENTS ANALYSIS
Requirements analysis is a very critical process that enables the success of a
system or software project to be assessed. Requirements are generally split into
two types:
1. Functional requirements
2. Non-functional requirements
1. Functional Requirements: These are the requirements that the end user
specifically demands as basic facilities that the system should offer. All these
functionalities need to be necessarily incorporated into the system as a part of the
contract. These are represented or stated in the form of input to be given to the
system, the operation performed and the output expected. They are basically the
requirements stated by the user which one can see directly in the final product,
unlike the non-functional requirements.
19
2. Non-functional requirements: These are basically the quality constraints that
the system must satisfy according to the project contract. The priority or extent to
which these factors are implemented varies from one project to other. They are
also called non-behavioural requirements.
They basically deal with issues like:
➢ Portability
➢ Security
➢ Maintainability
➢ Reliability
➢ Scalability
➢ Performance
➢ Reusability
➢ Flexibility
20
REQUIREMENTS GATHERING
You should identify who the key stakeholders will be. These will be the people who
brainstorm, analyse, approve or deny project updates. They’re typically made up of
customers, team leads, department managers, board members, business partners or
manufacturers. They’ll have the most stay in the progress of the project overall.
Not only will this documentation be helpful at the end of the project when you reflect
back on goals achieved, updates accomplished, features added and bugs fixed, but it will
also act to help manage stakeholder expectations, and keep team members focused and
on track.
• How long will the project timeline be? Map out your timeline, and then map out
your requirements on that timeline. This will help in case some requirements are
contingent on dependencies.
• Who will be involved in the project? Will it be the entire design and development
teams, or just a select few from each? Which team members will be available?
Which team members specialize in the types of issues the project will tackle?
• What are the risks for the requirements-gathering process? Define all
assumptions, and document all risks that might impact your requirements.
Understand that your assumptions are typically divided into three categories:
time, budget and scope. They can range from assuming PTO, holidays and sick
days, to assuming stakeholders will provide feedback in a timely manner.
• What is our ultimate goal in understanding our project requirements? What is the
time-based goal, the budget goal and the scope goal? Will it be to compete in the
market more directly with a competitor? Will it be to solve a customer problem,
or fix a bug?
• By answering all of the questions above in a clear and concise manner, you’ll
have a full map of your requirements ready to present to stakeholders.
5. Monitor Progress
Once you’ve got an stakeholder approval on the requirements you’ve presented, you’ll
implement them into the project timeline and process. At this point, you’ll want to make
22
sure you have a method in place to monitor and track all of your requirements across all
teams to ensure that triggers for risk stay low.
You’ll also want to use this data to report project progress to stakeholders, give
feedback to department managers, and ensure the project is on track from a time, scope
and budget standpoint. Our free requirements traceability matrix is a great tool to keep
track of project requirements.
SOFTWARE REQUIREMENTS
The process of establishing the services that the customer requires from a system and
the constraints under which it operates and is developed.
Requirements may be functional or non-functional
• Functional requirements describe system services or functions
• Non-functional requirements is a constraint on the system or on the development
process.
Types of requirements
1. User requirements: Statements in natural language (NL) plus diagrams of the
services the system provides and its operational constraints written for customers.
2. System requirements: A structured document setting out detailed descriptions of
the system services. Written as a contract between client and contractor.
3. Software specification: A detailed software description which can serve as a
basis for a design or implementation. Written for developers.
FUNCTIONAL AND NON-FUNCTIONAL COMPONENTS:
a) Functional requirements:
• Functionality or services that the system is expected to provide.
• Functional requirements may also explicitly state what the system shouldn‘t do.
• Functional requirements specification should be:
➢ Complete: All services required by the user should be defined
➢ Consistent: should not have contradictory definition (also avoid ambiguity
don‘t leave room for different interpretations)
Examples:
• The LIBSYS system
• A library system that provides a single interface to a number of databases of
articles in different libraries.
• Users can search for, download and print these articles for personal study.
• The user shall be able to search either all of the initial set of databases or select a
subset from it.
23
• The system shall provide appropriate viewers for the user to read documents in
the document store.
• Every order shall be allocated a unique identifier (ORDER_ID) which the user
shall be able to copy to the account‘s permanent storage area.
b) Non-Functional requirements:
Requirements that are not directly concerned with the specific functions delivered by
the system. Typically, relate to the system as a whole rather than the individual
system features.
Often could be deciding factor on the survival of the system (e.g. reliability, cost,
response time)
Non-Functional requirements classifications:
We can see from this diagram that the non-functional requirements may come from
required characteristics of the software (product requirements), the organization
developing the software (organizational requirements) or from external sources.
The types of non-functional requirements are:
i) Product requirements:
• Specify the desired characteristics that a system or subsystem must possess.
• Most NFRs are concerned with specifying constraints on the behavior of the
executing system.
• Performance
• Capacity
• Others are more difficult to quantify and, consequently, are often stated informal.
• Usability
24
ii) Organisational requirements
Process requirements are constraints placed upon the development process of the
system. Process requirements include:
• Requirements on development standards and methods which must be followed
• CASE tools which should be used
• The management reports which must be provided
Examples of process requirements
• The development process to be used must be explicitly defined and must be
conformant with ISO 9000 standards
• The system must be developed using the XYZ suite of CASE tools
• Management reports setting out the effort expended on each identified system
component must be produced every two weeks
• A disaster recovery plan for the system development must be specified
iii) External requirements: May be placed on both the product and the process.
Derived from the environment in which the system is developed.
External requirements are based on:
• Application domain information
• Organizational considerations.
• The need for the system to work with other systems Health and safety or data
protection regulations
• Or even basic natural laws such as the laws of physics.
Examples of external requirements
Medical data system: The organization’s data protection officer must certify that all data
is maintained according to data protection legislation before the system is put into
operation.
Train protection system: The time required to bring the train to a complete halt is
computed using the function.
USER REQUIREMENT: The user requirement(s) document (URD) or user
requirement(s) specification is a document usually used in software engineering that
specifies the requirements the user expects from software to be constructed in a
software project.
Once the required information is completely gathered it is documented in a URD, which
is meant to spell out exactly what the software must do and becomes part of the
contractual agreement.
A customer cannot demand features not in the URD, while the developer cannot claim
the product is ready if it does not meet an item of the URD.
25
The URD can be used as a guide to planning cost, timetables, milestones, testing, etc.
The explicit nature of the URD allows customers to show it to various stakeholders to
make sure all necessary features are described.
Formulating a URD requires negotiation to determine what is technically and
economically feasible.
Preparing a URD is one of those skills that lies between a science and an art, requiring
both software technical skills and interpersonal skills.
Often a URD includes priority ranking for each requirement. A typical system might be
as follows:
• M Mandatory requirement. This feature must be built into the final system.
• D Desirable requirement. This feature should be built into the final system unless
the cost is too high.
• O Optional requirement.
• E Possible future enhancement.
SYSTEM REQUIREMENTS
SRS (Software Requirement Specification): It is a document that
outlines the requirements for a software project. It describes the
software’s functionality, performance and design.
Purpose of SRS: Official statement of what is required by the system developer. It
should include user requirements and specification of system requirements. It should
describe what the system should do.
Ways of writing an SRS:
1. Natural Language
2. Structured Natural Language
3. Design Description Language
4. Graphical Notations
5. Mathematical specification
Guidelines for Writing SRS:
1. Use standard formats
2. Use “shall” for mandatory requirements and “should” for desirable requirements.
3. Use text highlighting to identify key parts of requirements.
4. Include rationale of why a requirement is necessary
27
Qualities / Characteristics of SRS:
28
(2). There may be a reasonable or temporal conflict between the two specified actions.
For example,
(a) One requirement may determine that the program will add two inputs, and another
may determine that the program will multiply them.
(b) One condition may state that "A" must always follow "B," while other requires that
"A and B" co-occurs.
(3). Two or more requirements may define the same real-world object but use different
terms for that object. For example, a program's request for user input may be called a
"prompt" in one requirement's and a "cue" in another. The use of standard terminology
and descriptions promotes consistency.
4. Unambiguousness: SRS is unambiguous when every fixed requirement has only one
interpretation. This suggests that each element is uniquely interpreted. In case there is a
method used with multiple definitions, the requirements report should determine the
implications in the SRS so that it is clear and simple to understand.
5. Ranking for importance and stability: The SRS is ranked for importance and
stability if each requirement in it has an identifier to indicate either the significance or
stability of that particular requirement.
Typically, all requirements are not equally important. Some prerequisites may be
essential, especially for life-critical applications, while others may be desirable. Each
element should be identified to make these differences clear and explicit. Another way
to rank requirements is to distinguish classes of items as essential, conditional, and
optional.
6. Modifiability: SRS should be made as modifiable as likely and should be capable of
quickly obtain changes to the system to some extent. Modifications should be perfectly
indexed and cross-referenced.
7. Verifiability: SRS is correct when the specified requirements can be verified with a
cost-effective system to check whether the final software meets those requirements. The
requirements are verified with the help of reviews.
8. Traceability: The SRS is traceable if the origin of each of the requirements is clear
and if it facilitates the referencing of each condition in future development or
enhancement documentation.
There are two types of Traceability:
1. Backward Traceability: This depends upon each requirement explicitly referencing
its source in earlier documents.
2. Forward Traceability: This depends upon each element in the SRS having a unique
name or reference number.
The forward traceability of the SRS is especially crucial when the software product
enters the operation and maintenance phase. As code and design document is modified,
29
it is necessary to be able to ascertain the complete set of requirements that may be
concerned by those modifications.
9. Design Independence: There should be an option to select from multiple design
alternatives for the final system. More specifically, the SRS should not contain any
implementation details.
10. Testability: An SRS should be written in such a method that it is simple to generate
test cases and test plans from the report.
11. Understandable by the customer: An end user may be an expert in his/her explicit
domain but might not be trained in computer science. Hence, the purpose of formal
notations and symbols should be avoided to as much extent as possible. The language
should be kept simple and clear.
12. The right level of abstraction: If the SRS is written for the requirements stage, the
details should be explained explicitly. Whereas, for a feasibility study, fewer analysis
can be used. Hence, the level of abstraction modifies according to the objective of the
SRS.
IEEE suggests the following structure for requirements document
1. Introduction
1.1 Purpose of the requirements document
1.2 Scope of the product
1.3 Definitions, acronyms and abbreviations
1.4 Overview of the remainder of the document
2. General description
2.1 Product perspective
2.2 Product functions
2.3 User characteristics
2.4 General constraints
2.5 Assumptions and dependencies
3. Specific requirements cover functional, non-functional and interface
requirements.
i) This is obviously the most substantial part of the document but because of the
wide variability in organizational practice, it is not appropriate to define standard
structure for this section.
30
ii) The requirements may document external interfaces, describe system
functionality and performance, specify logical database requirements, design
constraints, emergent system properties and quality characteristics.
4. Appendices
5. Index
31
AGILE DEVELOPMENT
Each iteration is considered as a short time "frame" in the Agile process model, which
typically lasts from one to four weeks. The division of the entire project into smaller
parts helps to minimize the project risk and to reduce the overall project delivery time
requirements. Each iteration involves a team working through a full software
development life cycle including planning, requirements analysis, design, coding, and
testing before a working product is demonstrated to the client.
Phases of Agile Model: Following are the phases in the Agile model are as follows:
1. Requirements gathering
2. Design the requirements
3. Construction / Iteration
4. Testing / Quality assurance
5. Deployment
6. Feedback
1. Requirements gathering: In this phase, you must define the requirements. You
should explain business opportunities and plan the time and effort needed to build the
project. Based on this information, you can evaluate technical and economic feasibility.
2. Design the requirements: When you have identified the project, work with
stakeholders to define requirements. You can use the user flow diagram or the high-
32
level UML diagram to show the work of new features and show how it will apply to the
existing system.
3. Construction / Iteration: When the team defines the requirements, the work begins.
Designers and developers start working on their project, which aims to deploy a
working product. The product will undergo various stages of improvement, so it
includes simple, minimal functionality.
4. Testing: In this phase, the Quality Assurance team examines the product's
performance and looks for the bug.
5. Deployment: In this phase, the team issues a product for the user's work
environment.
6. Feedback: After releasing the product, the last step is feedback. In this, the team
receives feedback about the product and works through the feedback.
AGILITY:
Agility has become today’s buzzword when describing a contemporary software
method. Everyone is agile. An associate agile team could be a quick team able to
befittingly reply to changes. modification is what software development is extremely
abundant.
All changes can be represented as shown in the below diagram which is considered
according to Ivar Jacobson Agility process of Software.
Support for changes ought to be inherent everything we tend to kill software, one thing
we tend to embrace as a result of it’s the guts and soul of software. Associate in agile
team acknowledges that software is developed by people operating in groups which the
talents of those folks, their ability to collaborate is at the core for the success of the
project.
In Jacobson’s read, the generality of modification is that the primary driver for agility.
Software engineers should be fast on their feet if they’re to accommodate the speedy
changes that Jacobson describes. But agility is over an efficient response to alter.
33
1. It encourages team structures and attitudes that create communication (among
team members, between technologists and business folks, between software
engineers and their managers) additional facile.
2. It emphasizes speedy delivery of operational software Associate in emphasizes
the importance of intermediate work merchandise (not continuously a decent
thing);
3. It adopts the client as a vicinity of the event team and works to eliminate the “us
and them” angle that continues to perforate several software projects;
4. It acknowledges that coming up within an unsure world has its limits which a
project arrange should be versatile.
Agility is applied to any software method. However, to accomplish this, it’s essential
that the method be designed during a manner that enables the project team to adapt tasks
and to contour them, conduct coming up within a good manner that understands the
fluidity of an agile development approach, eliminate about the foremost essential work
products and keeps them lean, Associate in emphasize a progressive delivery strategy
that gets operating package to the client as apace as possible for the merchandise sort
and operational atmosphere.
An agile process reduces the agility and cost of change because software is released in
increments and change can be better controlled within an increment.
Agility argue that a well designed agile process “flattens” the cost of change curve
shown in following figure, allowing a software team to accommodate changes late in a
software project without dramatic cost and time impact.
When incremental delivery is coupled with other agile practices such as continuous unit
testing and pair programming, the cost of making a change is reduced.
Although debate about the degree to which the cost curve flattens is ongoing, there is
evidence to suggest that a significant reduction in the cost of change can be achieved.
The Agile process consists of several key practices and principles, including:
1. User Stories: Agile teams create user stories to capture the needs and
requirements of the end-users. User stories are short, simple descriptions of a
feature or functionality that a user needs to accomplish a specific task.
3. Prioritization: Agile teams prioritize their work based on business value and
customer needs. The most important features and functionality are developed
first, ensuring that the team delivers the highest value to the customer.
Overall, the Agile process is designed to be flexible and adaptable, allowing teams to
respond quickly to changing requirements and deliver software that meets the needs of
the customer.
35
Advantages:
Disadvantages:
1. The lack of formal documents creates confusion and important decisions taken
during different phases can be misinterpreted at any time by different team
members.
2. Agile development models often involve working in short sprints, which can
make it difficult to plan and forecast project timelines and deliverables. This can
lead to delays in the project and can make it difficult to accurately estimate the
costs and resources needed for the project.
3. Agile development models require a high degree of expertise from team
members, as they need to be able to adapt to changing requirements and work in
an iterative environment. This can be challenging for teams that are not
experienced in agile development practices and can lead to delays and difficulties
in the project.
4. Due to the absence of proper documentation, when the project completes and the
developers are assigned to another project, maintenance of the developed project
can become a problem.
1. Code Review: Code review detects and corrects errors efficiently. It suggests
pair programming as coding and reviewing of written code carried out by a pair
of programmers who switch their works between them every hour.
36
2. Testing: Testing code helps to remove errors and improves its reliability. XP
suggests test-driven development (TDD) to continually write and execute test
cases. In the TDD approach, test cases are written even before any code is
written.
3. Incremental development: Incremental development is very good because
customer feedback is gained and based on this development team comes up with
new increments every few days after each iteration.
4. Simplicity: Simplicity makes it easier to develop good quality code as well as to
test and debug it.
5. Design: Good quality design is important to develop good quality software. So,
everybody should design daily.
6. Integration testing: It helps to identify bugs at the interfaces of different
functionalities. Extreme programming suggests that the developers should
achieve continuous integration by building and performing integration testing
several times a day.
Applications of Extreme Programming (XP): Some of the projects that are suitable to
develop using the XP model are given below:
1. Extreme Programming:
a) Relies on object-oriented approach
b) Key activities
• Planning (user stories created and ordered by customer value)
• Design (simple designs preferred, CRC cards and design prototypes are only
work products, encourages use of refactoring)
• Coding (focuses on unit tests to exercise stories, emphasizes use of pairs
programming to create story code, continuous integration and smoke testing is
utilized)
• Testing (unit tests created before coding are implemented using an automated
testing framework to encourage use of regression testing, integration and validation
testing done on daily basis, acceptance tests focus on system features and functions
viewable by the customer)
4. Scrum:
a) Scrum principles
• Small working teamed used to maximize communication, minimize overhead,
and maximize sharing of informal knowledge
• Process must be adaptable to both technical and business challenges to ensure
bets product produced
• Process yields frequent increments that can be inspected, adjusted, tested,
documented and built on
• Development work and people performing it are partitioned into clean, low
coupling partitions
• Testing and documentation is performed as the product is built
• Provides the ability to declare the product done whenever required
5. Crystal:
a) Development approach that puts a premium on maneuverability during a resource-
limited game of invention and communication with the primary goal of delivering
useful software and a secondary goal of setting up for the next game
39
b) Crystal principles
• Its always cheaper and faster to communicate face-to-face
• As methodologies become more formal teams become weighed down and have
trouble adapting to project work vagaries
• As projects grow in size, teams become larger and methodologies become heavier
• As projects grow in criticality some degree of formality will need to be
introduced in parts of the methodology
• As feedback and communication become more efficient the need for intermediate
work products is reduced
• Discipline, skills, and understanding counter process, formality, and
documentation
• Team members not on the critical project path can spend their excess time
improving the product or helping people who are on the critical path
c) Incremental development strategy used with 1 to 3 month time lines
d)Reflection workshops conducted before project begins, during increment development
activity, and after increment is delivered
e)Crystal methodologies
• Clear (small, low criticality projects)
• Orange (larger, moderately critical projects)
• Orange Web (typical e-business applications)
41