Unit I Software Engineering
Unit I Software Engineering
• The normal approach is just to go out and catch the bus/train that is available.
• A systematic approach is constructed as Firstly check on Google Maps about
distance and after analyzing the timing of trains and buses online and after
that, match user’s preference suppose user have some work till 4:00 PM and
trains slot are: 1:00 PM, 6:00 PM then the user will choose 6:00 PM time slot
and reach Delhi.
• Software engineering has evolved over time from being considered an
art to becoming a recognized engineering discipline.
• In the early days of computing, software development was primarily
done by individuals or small teams who wrote code based on their
own experiences and knowledge.
• This approach was often referred to as “hacking” or “programming by
intuition.”
• As the field of computing grew, it became apparent that this approach
was not sustainable and that a more structured and systematic
approach was needed.
• In the 1960s and 1970s, the field of software engineering began to
take shape.
• Researchers and practitioners began to develop formal methods for
software design and development, such as structured programming
and the use of flowcharts to represent algorithms.
• In 1968, a conference on software engineering was held, and the
term “software engineering” was officially coined.
• In the following decades, software engineering continued to evolve and
mature.
• The introduction of object-oriented programming in the 1980s led to a shift
in how software was designed and developed.
• The 1990s saw the emergence of the Agile software development
methodologies, which emphasized flexibility and responsiveness to change.
• Today, software engineering is a well-established field with its own set of
best practices, methodologies, and tools.
• It is considered as a discipline of engineering and follows the same
principles like any other engineering field.
• In summary, software engineering has evolved from an art to a
discipline with its own set of best practices, methodologies, and tools.
• The field has grown and matured over time, with new technologies
and approaches being developed to improve the design and
development of software.
• Software Engineering principles have evolved over the last sixty years
with the contributions of various researchers and software
professionals.
• From the beginning period Software Engineering acts as an Art after
that with time, it transformed into a craft and finally to Engineering
Discipline.
• Initially, Programmers used an Ad Hoc programming style.
• Ad Hoc programming is an approachable solution in an unplanned or
unorganized manner.
• In this type of Programming Style, no plan is created on how to create
Structure and Steps to complete the programming task but without
having any systematic approach the problem needs to be solved in
the required time.
• This style is now referred to as exploratory, build and fix, and code
and fix styles.
Benefits of Software Engineering
• Improved quality: By following established best practices and
methodologies, software engineers are able to produce higher quality
software that is more reliable and less prone to errors.
• Increased productivity: Formal methods and tools can help software
engineers work more efficiently and effectively, leading to increased
productivity.
• Greater predictability: By following a structured and systematic approach,
software engineers can make more accurate predictions about the time
and resources required to complete a project.
• Better communication: Software engineering practices can help ensure
that all stakeholders, including developers, managers, and clients, have a
clear understanding of the project’s goals and requirements.
Benefits of Software Engineering
• Greater maintainability: Software engineering practices can help
ensure that the software is designed in a way that makes it easy to
maintain and update over time.
• Better cost management: By following established best practices and
methodologies, software engineers can reduce the cost of
development, testing and maintenance of software.
• Better Scalability: Software engineering provides the process and
methodologies to design the software in a way that it is easy to scale
up or down as per the requirement.
Software Life cycle models
• A software life cycle model (also termed process model) is a pictorial
and diagrammatic representation of the software life cycle. A life
cycle model represents all the methods required to make a software
product transit through its life cycle stages. It also captures the
structure in which these methods are to be undertaken.
Waterfall Model
• It is a simple model that is easy to use as
well as understand where the execution
happens in the sequence order, which means
that the outcome of the one-stage is equal to
the input of another stage. That's why it is
also known as the Linear-sequential life cycle
model.
• Each stage of the waterfall model involves
the deliverable of the previous stage, like
requirements, are transferred to the design
phase, design moved to development, and so
on.
• When we have the Life critical (hospital
application) and Machine critical (Military
project), we will widely use the waterfall
model.
When to use?
• When the requirements are constant and not changed regularly.
• A project is short
• The situation is calm
• Where the tools and technology used is consistent and is not
changing
• When resources are well prepared and are available to use.
Advantages of Waterfall model
• This model is simple to implement also the number of resources that
are required for it is minimal.
• The requirements are simple and explicitly declared; they remain
unchanged during the entire project development.
• The start and end points for each phase is fixed, which makes it easy
to cover progress.
• The release date for the complete product, as well as its final cost,
can be determined before development.
• It gives easy to control and clarity for the customer due to a strict
reporting system.
Disadvantages of Waterfall model
• In this model, the risk factor is higher, so this model is not suitable for
more significant and complex projects.
• This model cannot accept the changes in requirements during
development.
• It becomes tough to go back to the phase. For example, if the
application has now shifted to the coding phase, and there is a
change in requirement, It becomes tough to go back and change it.
• Since the testing done at a later stage, it does not allow identifying
the challenges and risks in the earlier phase, so the risk reduction
strategy is difficult to prepare.
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 toy 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.
Steps of Prototype Model
1.Requirement Gathering and Analyst
2.Quick Decision
3.Build a Prototype
4.Assessment or User Evaluation
5.Prototype Refinement
6.Engineer Product
Advantage of Prototype Model
1.Reduce the risk of incorrect user requirement
2.Good where requirement are changing/uncommitted
3.Regular visible process aids management
4.Support early product marketing
5.Reduce Maintenance cost.
6.Errors can be detected much earlier as the system is made side by
side.
Disadvantage of Prototype Model
1.An unstable/badly implemented prototype often becomes the final product.
2.Require extensive customer collaboration
1. Costs customer money
2. Needs committed customer
3. Difficult to finish if customer withdraw
4. May be too customer specific, no broad market
3.Difficult to know how long the project will last.
4.Easy to fall back into the code and fix without proper requirement analysis,
design, customer evaluation, and feedback.
5.Prototyping tools are expensive.
6.Special tools & techniques are required to build a prototype.
7.It is a time-consuming process.
Evolutionary Process Model
• Evolutionary process model resembles the iterative enhancement
model.
• The same phases are defined for the waterfall model occurs here in a
cyclical fashion.
• For example, in a simple database application, one cycle might
implement the graphical user Interface (GUI), another file
manipulation, another queries and another updates. All four cycles
must complete before there is a working product available. GUI allows
the users to interact with the system, file manipulation allow the data
to be saved and retrieved, queries allow user to get out of the system,
and updates allows users to put data into the system.
Benefits of Evolutionary Process Model
• EVO can reduce costs by providing a structured, disciplined avenue for
experimentation.
• EVO allows the marketing department access to early deliveries, facilitating
the development of documentation and demonstration.
• Better fit the product to user needs and market requirements.
• Manage project risk with the definition of early cycle content.
• Uncover key issues early and focus attention appropriately.
• Increase the opportunity to hit market windows.
• Accelerate sales cycles with early customer exposure.
• Increase management visibility of project progress.
• Increase product team productivity and motivations.
Spiral Model
• The Spiral Model is a Software
Development Life Cycle (SDLC)
model that provides a
systematic and iterative
approach to software
development. In its
diagrammatic representation,
looks like a spiral with many
loops. The exact number of
loops of the spiral is unknown
and can vary from project to
project. Each loop of the spiral
is called a Phase of the
software development
process.
When to Use?
• When deliverance is required to be frequent.
• When the project is large
• When requirements are unclear and complex
• When changes may require at any time
• Large and high budget projects
Advantages
• High amount of risk analysis
• Useful for large and mission-critical projects.
Disadvantages
• Can be a costly model to use.
• Risk analysis needed highly particular expertise
• Doesn't work well for smaller projects.
Feasible Study
• A feasibility study analyzes the viability of a proposed project or
venture.
• It is used to evaluate a project's potential, including the technical,
financial, and economic aspects, and to determine whether it should
proceed.
• A feasibility study aims to identify and assess a proposed project's
strengths, weaknesses, opportunities, and threats to determine its
potential for success.
Feasibility Study Process
Benefits of Feasibility
• Feasibility studies provide several advantages, including aiding project
directors in understanding the benefits and drawbacks of performing
work before investing significant time and money into it.
• Feasibility studies may also provide critical information to an
organization's management team, preventing them from embarking
on a risky project.
• Such studies help firms decide how they will grow. They will learn
how they will function, what potential roadblocks exist, who their
competitors are, and what the market is like. Feasibility studies can
aid in convincing financial backers and brokers that investing in a
given project or firm is a sensible move.
How to Conduct a Feasible Study
• Conduct a preliminary evaluation, which involves gathering feedback on the new
proposal from appropriate partners.
• To guarantee that the information obtained in the early stages of the study is robust,
break it down and pose questions about it.
• Conduct market research or statistical survey to identify market interest and
opportunities for pursuing the activity or business.
• Create a traditional, functional, or field-tested approach that determines how much
labour is necessary, how much it will cost, and how long it will take.
• Create a predicted pay announcement that includes income, working expenditures, and
benefits.
• Create an accounting report for the first day of the season.
• Recognize barriers and potential vulnerabilities and how to deal with them.
• Make a fundamental "go" or "off limits" decision regarding moving forward with the
arrangement.
Functional and non-functional requirements
Functional Requirements
• Functional requirements define a function that a system or system
element must be qualified to perform and must be documented in
different forms.
• The functional requirements describe the behavior of the system as it
correlates to the system's functionality.
• Functional requirements should be written in a simple language, so
that it is easily understandable.
• The examples of functional requirements are authentication, business
rules, audit tracking, certification requirements, transaction
corrections, etc.
Non-functional requirements
• Non-functional requirements are not related to the software's
functional aspect. They can be the necessities that specify the criteria
that can be used to decide the operation instead of specific behaviors
of the system. Basic non-functional requirements are - usability,
reliability, security, storage, cost, flexibility, configuration,
performance, legal or regulatory requirements, etc.
• They are divided into two main categories:
• Execution qualities like security and usability, which are observable at run
time.
• Evolution qualities like testability, maintainability, extensibility, and scalability
that embodied in the static structure of the software system.
Requirement Gathering
• Brainstorming • Reverse Engineering
• Document Analysis • Survey/Questionnaire
• Focus Group
• Interface analysis
• Interview
• Observation
• Prototyping
• Requirement Workshops
Requirements Analysis
• Requirement analysis is significant and essential activity after elicitation.
• We analyze, refine, and scrutinize the gathered requirements to make
consistent and unambiguous requirements.
• This activity reviews all requirements and may provide a graphical view of
the entire system.
• After the completion of the analysis, it is expected that the
understandability of the project may improve significantly.
• Here, we may also use the interaction with the customer to clarify points of
confusion and to understand which requirements are more important than
others.
Steps of Requirement Analysis
Steps of Requirement Analysis
• Context Diagram