0% found this document useful (0 votes)
42 views30 pages

Pm&Se 1st Module - Merged

Uploaded by

xcr6p6ysq7
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views30 pages

Pm&Se 1st Module - Merged

Uploaded by

xcr6p6ysq7
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

Software Engineering

• An engineering approach to develop software.


• It focuses systematic and cost-effective techniques to
software development.
• Software engineering is defined as the systematic
approach to the development, operation,
maintenance, and retirement of software.
Why Study Software Engineering?
• To acquire skills to develop large software
products.
• Can effectively handle complexity in a software
development problem.

• Learn techniques of:

– specification, design, interface development,


testing, project management, etc.

• To acquire skills to be a better programmer. 2

Emergence of Software Engineering


1) Early Computer Programming (1950s): –
Programs were being written in assembly
language.
– Programs were limited to about a few hundreds of
lines of assembly code.
– Every programmer developed his own style of
writing programs:
• according to his intuition (exploratory
programming – build and fix).
2) High-Level Language Programming (Early 60s)

- High-level languages such as FORTRAN,


ALGOL, and COBOL were introduced:
− This reduced software development efforts
greatly.
- Software development style was still
exploratory.
- Typical program sizes were limited to a few
thousands of lines of source code.
3) Control Flow-Based Design (late 60s)
- Size and complexity of programs increased
further:
– exploratory programming style proved to be
insufficient.
- Programmers found:
– very difficult to write cost-effective and
correct programs.
– programs written by others are very difficult to
understand and maintain.

• To cope up with this problem, experienced


programmers advised:
``Pay particular attention to the design of the
program's control structure.‘’
• A program's control structure indicates: –
the sequence in which the program's
instructions are executed.

• To help design programs having good control


structure:
– flow charting technique was developed.
• Using flow charting technique:
– one can represent and design a program's
control structure.
• Usually one understands a program:
- by mentally simulating the program's
execution sequence.

4) Data Structure Oriented Design (Early 70s)

It gives more attention to the design of data


structures of a program than to the design of its
control structure.
• Techniques which emphasize
– designing the data structure
– derive program structure from it

• Example of data structure-oriented design


technique:
– Jackson's Structured Programming(JSP)
methodology
∙ In JSP methodology:
− a program's data structures are first designed
using notations for
* sequence, selection, and iteration.
− Then data structure design is used :
* to derive the program structure.

5) Data Flow-Oriented Design (Late 70s)


• In Data flow-oriented technique
– the data items input to a system must first be
identified
– processing required on the data items to
produce the required outputs should be
determined.
• Data flow technique identifies:
– different processing stations (functions) in a
system
– the items (data) that flow between processing
stations.
• Data flow technique is a generic technique: –
can be used to model the working of any
system.
• A major advantage of the data flow technique is
its simplicity.

6) Object-Oriented Design (80s)

• In Object-oriented technique:
– natural objects (such as employees, pay
roll-register, etc.) occurring in a problem are first
identified.
• Relationships among objects:
– such as composition, reference, and
inheritance are determined.
• Each object essentially acts as
– a data hiding (or data abstraction) entity. 12

• Object-Oriented Techniques have gained wide


acceptance:
– Simplicity
– Reuse possibilities
– Lower development time and cost
– More robust code
– Easy maintenance

Phases of Software Development


▪ A software life cycle is a series of identifiable stages that a software
product undergoes during its lifetime.

▪ Software life cycle is also called Software Development Life Cycle


(SDLC)

▪ The first stage of life cycle is feasibility study.


▪ Subsequent stages are – requirement analysis and specification,
design, coding, testing, and maintenance.

▪ Each of these stages is called – life cycle phase. 17

1. Feasibility study

▪ Aim is to determine whether it would be financially and


technically feasible to develop the product.

▪ It involves analysis of the problem and collection of all


relevant information related to the product – input data items,
processing required, the output data, and various constraints.
After data collection, this phase arrives at:
•An abstract problem definition
•Formulation of different strategies for solving problem
•Evaluation of different solution strategies
– examine benefits and shortcomings. 18
2. Requirement analysis and specification
▪This phase determines exact requirements of customers and
to document them properly.
1. Requirement gathering and analysis – First gathering the
requirements and then analysing the gathered requirements.
The aim of requirement analysis is to remove the incompleteness
and inconsistencies in requirement.
2. Requirement specification – The requirements identified are
organised into Software Requirement Specification (SRS)
document.

3. Design
▪ Design transforms the requirements specified in SRS document
into structure suitable for implementation in programming
language.
▪ During this phase the software architecture is derived from the
SRS document.

4. Coding
▪ It translates the software design into source code. ▪
This phase is also called Implementation phase.
▪ Each component of the design is implemented as a program
module.
20

5. Testing
The aim of testing is to identify all defects in a program.
▪ Testing a program involves providing a program with a set of test
inputs and observing whether the program behaves as
expected.

▪ Unit testing - testing each module, debugging, and documenting.


▪ Integration testing - different modules are integrated. After each
step, the resultant module is tested.
▪ System testing - System testing is designed to validate a fully
developed system to assure that it meets its requirements.21
6. Maintenance

▪ Software needs to be maintained because of the defects


remaining in the system. Developing software with zero defect is
not possible.
1. Corrective maintenance – correcting errors that were not
discovered during development.
2. Perfective maintenance – adding functionalities according to
customer’s requirement.
3. Adaptive maintenance – porting the software to work in a new
environment – new computer platform/operating system

22
5. Agile Process
Agile development approaches evolved as a reaction to
documentation based processes, particularly the waterfall
approach.

Agile approaches are based on some common principles,

⮚ Working software is the key measure of progress in a project.


⮚ For progress in a project, software should be developed and
delivered rapidly in small increments.
⮚ Even late changes in the requirements should be entertained. 43
⮚ Face-to-face communication is preferred over documentation.
⮚ Continuous feedback and involvement of customer is necessary
for developing good-quality software. ⮚ Simple design which
evolves and improves with time is a better approach than doing an
elaborate design for handling all possible scenarios.
⮚ The release dates are decided by teams of talented individuals.

44
625 | P a g e

Fig1. Software Development Life Cycle

III SOFTWARE DEVELOPMENT MODELS

3.1 Waterfall Model


The waterfall model is a sequential design process, used in software development processes, in which progress
is seen as flowing steadily downwards (like a waterfall) through the phases of Conception, Initiation, Analysis,
Design, Construction, Testing, Production / Implementation and Maintenance.

Fig2. Waterfall Model

1. Basic Principles
∙ Problems can be solved more easily if they are more clearly defined.
∙ Large amounts of code are more traceable if they are structured.
∙ A good project life-cycle plan improves the development process.
∙ System documentation is a byproduct of the development process, and is not done later, as an afterthought.
2. Advantages of Waterfall Model
∙ This model is simple and easy to understand and use.
∙ It is easy to manage due to the rigidity of the model – each phase has specific deliverables and a review
process.
∙ In this model phases are processed and completed one at a time. Phases do not overlap. ∙
Waterfall model works well for smaller projects where requirements are very well understood.
626 | P a g e
3. Disadvantages of Waterfall Model
∙ Once an application is in the testing stage, it is very difficult to go back and change something that was not
well-thought out in the concept stage.
∙ No working software is produced until late during the life cycle.
∙ High amounts of risk and uncertainty.
∙ Not a good model for complex and object-oriented projects.
∙ Poor model for long and ongoing projects.

3.2 Iterative Model


An iterative life cycle model does not attempt to start with a full specification of requirements. Instead,
development begins by specifying and implementing just part of the software, which can then be reviewed in
order to identify further requirements. This process is then repeated, producing a new version of the software for
each cycle of the model.
1. Basic Principles
∙ Manage requirements not tasks, based on use cases and nonfunctional requirements. ∙ Manage to meet
business goals, due dates and budgets. Be willing to change requirements to fit these, not the other way
around.

Fig3. Iterative Model


∙ Begin with a simple implementation of a subset of the requirements that demonstrates key aspects of the
system.
∙ Design around isolated, easy-to-find modules that group small sets of related requirements. Complete or
re-code one module per iteration.
∙ Work in short cycles (1-6 weeks) composed of overlapping phases: requirements, design, programming,
testing.
∙ During the iteration, the external customer or project manager cannot change the scope for that iteration,
but the development team may change the scope by dropping features if the end date will not be met.
∙ Any difficulty in design, coding and testing a module should signal the need for redesign or re-coding. ∙
Modifications should become easier to make as the iterations progress. If not, redesign is needed. 2.
Advantages of Iterative Model
∙ It is much better model of the software process.
∙ It allows feedback to proceeding stages.

627 | P a g e
∙ It can be used for project wherein the requirements are not well understood.
3. Disadvantages of Iterative Model
∙ Each phase of an iteration is rigid with no overlaps
∙ Costly system architecture or design issues may arise because not all requirements are gathered up front for
the entire lifecycle.
∙ No clear milestones in the development process.

3.3 Prototyping Model


The basic idea here is that instead of freezing the requirements before a design or coding can proceed, a
throwaway prototype is built to understand the requirements. This prototype is developed based on the currently
known requirements. By using this prototype, the client can get an “actual feel” of the system, since the
interactions with prototype can enable the client to better understand the requirements of the desired system.

Fig4. Prototyping Model


1. Basic Principles
∙ Prototype model should be used when the desired system needs to have a lot of interaction with the end
users.
∙ Not a standalone, complete development methodology, but rather an approach to handling selected parts of
a larger, more traditional development methodology.
∙ Attempts to reduce inherent project risk by breaking a project into smaller segments and providing more
ease-of-change during the development process.
∙ Prototyping ensures that the end users constantly work with the system and provide a feedback which is
incorporated in the prototype to result in a useable system.
2. Advantages of Prototyping Model
∙ Users are actively involved in the development.
∙ Since in this methodology a working model of the system is provided, the users get a better understanding
of the system being developed.
∙ Errors can be detected much earlier.
∙ Confusing or difficult functions can be identified.
3. Disadvantages of Prototyping Model
∙ Possibility of causing systems to be left unfinished.
∙ Possibility of implementing systems before they are ready.

628 | P a g e
3.4 Spiral Model
The spiral model is a risk-driven processmodel generator for software projects. Based on the unique risk patterns
of a given project, the spiral model guides a team to adopt elements of one or more process models, such as
incremental, waterfall, or evolutionary prototyping.
1. Basic Principles
∙ Focus is on cost and risk assessment throughout the life cycle.
∙ Useful for Long-term project commitment unwise because of potential changes to economic priorities. ∙
Users are unsure of their needs.
∙ Requirements are complex.
2. Advantages of Spiral Model
∙ High amount of risk analysis hence, avoidance of Risk is enhanced.

Fig5. Spiral Model

∙ Good for large and mission-critical projects.


∙ Strong approval and documentation control.
∙ Additional Functionality can be added at a later date.
∙ Software is produced early in the software life cycle.
3. Disadvantages of Spiral Model
∙ Can be a costly model to use.
∙ Risk analysis requires highly specific expertise.
∙ Project’s success is highly dependent on the risk analysis phase.
∙ Doesn’t work well for smaller projects.

629 | P a g e
4. Comparative Analysis of SDLC Models
Features Waterfall Model Iterative Model Prototyping Spiral Model
Model

Requirements Beginning Beginning Frequently Beginning


Specification Changed

Cost Low Low High Expensive

Simplicity Simple Intermediate Simple Intermediate

Expertise Required High High Medium High

Risk Involvement High Easily Manage Low Low

Overlapping No No Yes Yes


Phases

Flexibility Rigid Less Flexible Highly Flexible Flexible

Maintenance Least Glamorous Promoted Routine Typical


Maintainability Maintenance

Reusability Limited Yes Weak High

Documentation Vital Yes Weak Yes


Required

User Involvement Only At Intermediate High High


Beginning

Cost Control Yes No No Yes

Resource Control Yes Yes No Yes

Guarantee of Less High Good High


success

Table1. Comparison of SDLC Models


V model
It is also a structured model, because it has v shaped structure. In this model system
requirement and system testing run along with each other, software requirement
runes with software testing, software design along with integration testing, and
software implementation with unit testing.
Advantages
a) It is very versatile model and flexible.
b) Consume less time.
c) Required more skilled and experienced employee
d) Requirements may change during development phase.
Disadvantages
a) Not flexible rigid like waterfall
b) Not suitable for small projects.
c) Stages and phased are not so clear and well understood.
c) Required skilled developers

Table 1. Comparison Table


Model\ Classic Iterativ Spiral V Prototype
feature al e Model model model
Waterfa waterf
ll all

flexibility No No Few Highl Fully


y

Cost Low Low High Mediu High


m

Risk High High No Less Less


factor
9

Simplicity Very Very Compl Little Little


ex

Develop Little Little More High High


ment
Time

Expertise No Not Highly Little Little


required

Phase Yes Yes No Little No


contain
ment of
error

Success Low Low High Mediu High


and m
failure
ratio

Client one One Some Freque Frequent


interactio time time nt
n

Time Few Few More More More


required

Resource Few Few More More More


required

10
AGILE MODEL

• It is based on iterative and incremental development, where requirements and


solutions evolve through collaboration between cross-functional teams.
• Usually less formal and reduced scope.
• Used for time-critical applications.

• An Agile software life cycle is much different ascompared to traditional


software development frameworks like Waterfall.

• In Agile, more emphasis is given to sustained andquick development of


product features rather than spending more time during the initial project
planning, and analyzing the actual requirements.

• The Agile team develops the product through a series of iterative cycles
known as sprints.

• Besides development activity, other aspects pertainingto development such as


product analysis, designing the product features,

developing the functionality, and “testing” the development for bugs are
alsocarried out during the sprints.

• Agile processes make extensive use of events such as the daily scrum
meetings, sprint review meeting, and the sprint retrospective meeting to
identify and self-correct the development carried out by the team.

• Feedback is solicited frequently, as and when needed, to collaborate, and speed


up the development process through sharing of ideas and self management.

• The feedback system helps to support the self-correction features of Agile


frameworks, and is very important.

• The roles played in the Agile process constitute of the product owner, scrum
master, and the development team. The product owner “owns” the project on
behalf of the stakeholders and ensures that the entire project is developed
successfully keeping in mind the stakeholders vision of the product as
itshould “appear” in the market. The scrum master ensures that the Agile
process is followed at all times, and does his or her best to resolve
anydifficulties or technical issues arising during the development process. The
team members participate actively in the daily sprints and make sure
meaningful and useful development of product features is presented at all
times.


Advantages Disadvantages

Decrease the time required to avail Scalability


some system features

Face to face communication Skill of the software developers


and continuous inputs from
customer representative leaves
no space for
guesswork.

The end result is the high quality Ability of customer to express user
software needs.

in least possible time duration


and satisfied customer

Produces business value early in Documentation is one at later stages.


the development life cycle

Reduce the usability of components

Needs special skills for the team.

• Explain the agile lifecycle model.

• The Agile software development life cycle is based upon the iterative and
incremental process models, and focuses upon adaptability to changing product
requirements and enhancing customer satisfaction through rapid delivery of
working product features and client participation.
• Agile development model is also a type of Incremental model. Software is
developed in incremental, rapid cycles. This results in small incremental releases
with each release building on previous functionality. Each release is thoroughly
tested to ensure software quality is maintained. It is used for time critical
applications.

• Extreme Programming (XP) is currently one of the most well known agile
development life cycle model.

Advantages of Agile model:


• Customer satisfaction by rapid, continuous delivery of useful software.
• People and interactions are emphasized rather than process and tools. Customers,
developers and testers constantly interact with each other.
• Working software is delivered frequently (weeks rather than months).
• Face-to-face conversation is the best form of communication.
• Close, daily cooperation between business people and developers.
• Continuous attention to technical excellence and good design.
• Regular adaptation to changing circumstances.
• Even late changes in requirements are welcomed
Disadvantages of Agile model:
• In case of some software deliverables, especially the large ones, it is difficult to assess the
effort required at the beginning of the software development life cycle.
• There is lack of emphasis on necessary designing and documentation.
• The project can easily get taken off track if the customer representative is not clear
whatfinal outcome that they want.
• Only senior programmers are capable of taking the kind of decisions required during the
development process. Hence it has no place for newbie programmers, unless combined
with experienced resources.
There are various types of software projects based on different criteria. Here
are some common types of software projects:

1. Web Development Projects: These projects involve the development of


web-based applications, websites, or web services. They may include
front-end development using HTML, CSS, and JavaScript, as well as
back-end development using frameworks like Node.js, Django, or Ruby
on Rails.
2. Mobile App Development Projects: These projects focus on creating
applications for mobile devices, such as smartphones and tablets. They
can be developed for specific platforms like iOS (using Swift or
Objective-C) or Android (using Java or Kotlin), or using cross-platform
frameworks like React Native or Flutter.
3. Desktop Application Projects: These projects involve building
applications that run on desktop computers or laptops. They can be
developed for specific operating systems like Windows, macOS, or Linux,
using programming languages like C++, Java, C#, or Python.
4. Enterprise Software Projects: These projects involve developing software
solutions for large organizations or businesses. They often include
complex functionalities, integration with existing systems, and scalability
to handle large amounts of data. Examples include customer
relationship management (CRM) systems, enterprise resource planning
(ERP) software, and human resources management systems (HRMS).
5. Game Development Projects: These projects focus on creating video
games for various platforms, including consoles, PCs, or mobile devices.
They involve designing game mechanics, graphics, audio, and user
interfaces, and often require specialized knowledge in game engines or
frameworks like Unity or Unreal Engine.
6. Open Source Projects: Open source projects are developed
collaboratively by a community of volunteers. The source code is
publicly available, and anyone can contribute to the project. Examples of
open-source projects include the Linux operating system, the Apache
web server, and the WordPress content management system.
7. Research and Development Projects: These projects aim to explore new
technologies, concepts, or methodologies. They often involve
prototyping, experimentation, and testing of novel ideas. Research and
development projects can be found in various domains, such as artificial
intelligence, machine learning, natural language processing, and
robotics.
8. Custom Software Development Projects: These projects involve
developing software solutions tailored to the specific needs of a client
or organization. The software is designed and built from scratch,
considering the unique requirements and business processes of the
client.
9. Maintenance and Enhancement Projects: These projects involve
maintaining and updating existing software systems. They may include
bug fixes, performance optimization, security patches, or the addition of
new features to meet changing requirements.

You might also like