SE Unit1
SE Unit1
Programs
Operating procedures
Operating
Procedures
Operational
User Manuals
Manuals
System
System Beginner's Reference Installation
Administration
Overview Guide Tutorial Guide Guide
Guide
Documentation Documentation consists of different types of manuals as given below:
Formal
Specification
Analysis/
Context-Diagram
Specification
Flow Charts
Design
Test Data
Testing
Test Results
Software Characteristics
1. Software does not wear out: Unlike physical objects that degrade over time due to wear and
tear, friction, corrosion, or material fatigue, software doesn't experience these physical
degradation processes. The code itself doesn't change or deteriorate from being used. If a bit
flips, it's usually due to hardware issues (like memory errors), not the software itself instead of
"wearing out," software tends to degrade.
2. Software is developed or engineered not manufactured in the classical sense: Classical
manufacturing involves a process of replication. A single design is used to create many identical
copies of a physical product. Think of stamping out car parts or printing books. The cost is
heavily front-loaded in the design and setup phase. Once the manufacturing process is
established, the cost per unit is relatively low and predictable.
Software is not replicated in the same way.
Software is often customized and evolves continuously. Manufacturing focuses on producing
identical units,
In manufacturing, quality control focuses on ensuring that each manufactured item conforms to
the original design. In software, quality control is more about verifying that the software meets
the functional and non-functional requirements, and finding and fixing errors (bugs).
3. Reusability of components: Reusability is the principle of designing and implementing
software components (e.g., modules, classes, functions) in a way that they can be used in
multiple applications or in different parts of the same application, without significant
modification.
4. Software is flexible: Software's flexibility refers to its ability to be easily modified, adapted, and
customized to meet changing requirements or to function in different environments. This is a
significant advantage over hardware or physical systems, which are often much more difficult
and expensive to alter after they've been built.
Software Crisis
The "software crisis" was a term coined in the late 1960s to early 1980s to describe the difficulty in
writing useful and efficient computer programs in the required time. It was recognized that the
complexity of software was increasing rapidly, while the ability to manage that complexity was not
keeping pace.
• Schedule Overruns: Projects were taking much longer to complete than initially planned.
• Low Quality: Delivered software often suffered from bugs and did not meet user requirements.
• Difficult to Maintain: Software was hard to modify or enhance, leading to high maintenance
costs.
• Inability to Meet Demand: There was a growing demand for software that simply couldn't be
met by the available resources and techniques.
• Increasing Complexity: Software systems were becoming larger and more complex.
• Lack of Understanding: The nature of software development wasn't well understood. It was
often treated more like an art than an engineering discipline.
• Lack of Skilled Professionals: The supply of trained software developers couldn't keep up with
demand.
The Software Engineering Process is a structured approach to developing, operating, and maintaining
software applications. It's essentially a roadmap that outlines the steps, activities, and deliverables
involved in creating high-quality software that meets the needs of its users. A well-defined process helps
teams manage complexity, reduce risks, and ensure consistency throughout the software lifecycle.
• High-Quality Software: Delivering software that is reliable, efficient, and meets user
expectations.
• On-Time and On-Budget Delivery: Completing projects within the agreed-upon timeframe
and budget.
• Reduced Risk: Identifying and mitigating potential problems early in the process.
• Improved Maintainability: Creating software that is easy to understand, modify, and enhance.
The software engineering process typically involves the following core activities. These may be
performed sequentially, iteratively, or concurrently, depending on the chosen process model.
1. Requirements Engineering:
o Purpose: To understand and document the needs and constraints of the software system.
This is where you define what the software should do, not how it should do it.
o Activities:
o Deliverables: Requirements documents (SRS, use case diagrams, user stories, etc.).
2. Design:
o Purpose: To create a blueprint for the software system that meets the specified
requirements. This is where you define how the software will work.
o Activities:
▪ Architectural Design: Defining the overall structure of the system, including its
major components, their relationships, and the technologies to be used.
▪ User Interface (UI) Design: Designing the look and feel of the user interface and
how users will interact with the system.
▪ Database Design: Designing the structure of the database to store and manage
the system's data.
3. Implementation (Coding):
o Activities:
▪ Writing Code: Implementing the software components according to the design
specifications, using appropriate programming languages and tools.
▪ Code Review: Examining the code for defects, adherence to coding standards,
and overall quality.
▪ System Testing: Testing the entire system to ensure it meets the specified
requirements.
▪ Regression Testing: Retesting previously tested parts of the system after changes
have been made to ensure that new defects have not been introduced.
5. Deployment:
o Purpose: To make the software available to its intended users.
o Activities:
▪ Configuration: Configuring the software to meet the specific needs of the users.
▪ Data Migration: Transferring data from existing systems to the new system.
6. Maintenance:
o Purpose: To keep the software functioning correctly and meeting the evolving needs of
its users.
o Activities:
2. Requirements Gathering & Analysis: Both disciplines start with a thorough understanding of
the problem and the requirements that need to be met. This involves elicitation, analysis, and
documentation of requirements.
3. Design Phase: Both involve a design phase where the system or product is designed based on
the requirements. This includes architectural design, detailed design, and specification of
components.
4. Testing & Verification: Both require rigorous testing and verification to ensure that the product
or system meets the specified requirements and performs as expected. This includes unit testing,
integration testing, system testing, and acceptance testing.
5. Quality Assurance: Both emphasize quality assurance throughout the development lifecycle.
This involves defining quality standards, implementing quality control measures, and conducting
reviews and inspections.
6. Project Management: Both require project management activities such as planning, scheduling,
resource allocation, risk management, and monitoring progress.
8. Focus on Problem Solving: At their core, both are about solving problems using a systematic
and engineered approach. They aim to create solutions that are reliable, efficient, and meet
specific needs.
The main disadvantages stem from the fundamental differences between building physical objects
(bridges, buildings) and creating software, which is intangible and highly modifiable.
o Conventional Engineering: Deals with tangible, physical objects. Changes are often
costly and difficult to implement once construction begins.
o Software Engineering: Deals with intangible software. Changes are relatively easier
and cheaper to implement, even late in the development cycle. Conventional engineering
processes often struggle to accommodate the inherent flexibility of software.
2. Change Management:
o Conventional Engineering: Change is carefully controlled due to the high cost of
rework. The waterfall model, with its rigid sequential phases, is often used.
o Software Engineering: Requirements change frequently. Agile methodologies, which
embrace change and iterative development, are often more suitable. Conventional
processes can be too rigid to adapt to evolving requirements.
3. Complexity:
7. Nature of "Materials":
8. Maintenance:
3. Consistency and precision The extent to which a software is consistent and give results
with precision.
4. Robustness The extent to which a software tolerates the unexpected
problems.
5. Simplicity The extent to which a software is simple in its operations.
9. Clarity and accuracy of The extent to which documents are clearly and accurately
documentation written.
10. Conformity of operational The extent to which a software is in conformity of operational
environment environment.
11. Completeness The extent to which a software has specified functions.
The Waterfall Model is a linear and sequential approach to software development. It consists of distinct
phases, where each phase must be completed before the next one begins. The typical phases include:
1. Requirements Analysis: Gathering and documenting what the software must accomplish. This
phase involves detailed specifications and agreements with stakeholders.
2. System Design: Based on the requirements gathered, the system's architecture and design are
created. This includes defining hardware and software specifications.
3. Implementation (Coding ) & Unit Testing: The actual code is written based on the design
specifications. This phase converts the design into a functional software product.
4. Integration and System Testing: The assembled software is tested for defects and to ensure it
meets the requirements. This phase involves both unit and system testing.
5. Operation & Maintenance: Once testing is complete and the software is deemed ready, it’s
deployed to the production environment for use. After deployment, the software enters the
maintenance phase, where updates, bug fixes, and enhancements are handled.
Advantages of the Waterfall Model
1. Simplicity and Clarity: The model is simple to understand and implement due to its linear
structure, making it easy to manage and control.
2. Documentation: Each phase produces its documentation, which aids in understanding the
project and facilitates onboarding of new team members.
3. Defined Stages: Clear structure with well-defined deliverables and milestones makes project
tracking straightforward.
4. Easy to Manage: Project management is more straightforward due to clear timelines and
phases. Stakeholders can easily see the progress.
1. Inflexibility: Once a phase is completed, revisiting it can be difficult and costly. This
inflexibility can be a major drawback if requirements change.
2. Assumes Requirements are Known Early: The model assumes that all requirements can be
gathered upfront, which is not always realistic, especially in complex projects.
3. Late Testing: Testing is conducted only after completion of development, which can lead to
discovering defects late in the project lifecycle, increasing the cost of fixes.
4. Not Ideal for Large Projects: In large and complex projects, the model can lead to significant
challenges in coordination and integration, as extensive planning might not accommodate
evolving requirements.
Prototype Model
The Prototype Model is a software development approach where a preliminary version of the software
(prototype) is built, evaluated, and refined through user feedback before the final product is developed.
This model allows stakeholders to visualize and interact with the requirements and functionalities of the
software early in the development process. The typical phases include:
1. Requirement Gathering and Analysis: Initial requirements are collected to understand what
the stakeholders want from the system.
2. Developing a Prototype: A working model (prototype) of the software is created, which may
include limited functionality.
3. User Evaluation: Users interact with the prototype to provide feedback on its features, usability,
and functionality.
4. Refinement: Based on user feedback, the prototype is revised, and improvements are made to
better meet requirements.
5. Iterate: Steps 2 to 4 are repeated as necessary until the product meets user expectations.
6. Final Development: Once the prototype is refined and approved, the final version of the
software is developed and deployed.
Advantages of the Prototype Model
1. User Involvement: Users have a greater opportunity to provide input and feedback throughout
the development process. This helps ensure that the final product meets their needs.
2. Early Detection of Issues: Since users interact with the prototype early, issues related to
functionality and usability can be identified and resolved sooner.
3. Visualization of Requirements: Prototypes help stakeholders visualize the product, which can
clarify requirements and reduce misunderstandings.
4. Improved Requirements: Requirements can be refined through user feedback, leading to a
more accurate understanding of what the final product should deliver.
1. Scope Creep: Users may continuously request changes, leading to potential scope creep as the
project evolves from the original intent.
2. Incomplete Prototypes: The prototype may not include all desired features, leading to incorrect
assumptions about the final product's capabilities.
3. Increased Time and Cost: Iterative cycles of feedback and refinement can consume more time
and resources than expected, especially if substantial changes are requested.
Spiral Model
The Spiral Model is a software development process that combines iterative or incremental
development which makes it an evolutionary model with systematic risk management. It emphasizes a
cyclic approach, where each cycle (or spiral) consists of four key phases:
1. Planning: Identify objectives, constraints, and alternative approaches. This phase also involves
analyzing risks and determining the resources needed.
2. Risk Analysis: Assess risks and develop strategies for mitigating them. Prototypes or
simulations may be created to explore alternatives and verify requirements.
3. Engineering: Actual development and implementation of the software. This includes coding,
testing, and evaluating the software products within the project.
4. Evaluation: Review progress, gather feedback, and re-evaluate completed work. This step
ensures continuous refinement and adjustment of objectives and plans for the next cycle.
• Risk Management: Proactive identification and mitigation of risks ensure that issues are
addressed early.
• Flexibility: The iterative nature means requirements can evolve based on feedback during the
development process.
• Improved Quality: Regular testing and evaluation help improve the overall quality of the final
product.
Disadvantages of the Spiral Model
• Complexity: The model can become complex due to its iterative nature and the requirement for
detailed planning and documentation.
• Costly: Continuous iterations may lead to increased costs, especially for smaller projects.
• Requires Expertise: It necessitates a skilled project manager to effectively manage risks and
conduct evaluations.
• Not Suitable for Small Projects: The overhead involved in risk analysis and documentation
may not be justified for smaller projects.
Evolutionary Development Model
The Evolutionary Development Model is a software development approach where the system is built
incrementally. Instead of delivering a complete product in one go, the system evolves over time through
a series of iterations or builds. Each iteration includes designing, implementing, testing, and deploying a
working subset of the system. Feedback from users and stakeholders is incorporated into each
subsequent iteration, leading to a more refined and complete product.
Core Principles:
1. Initial Planning: A basic plan for the overall system is established, including identifying core
features and functionalities.
2. Requirements Gathering: A subset of requirements is gathered and analyzed. This focuses on a
specific part of the system to be developed in the current iteration.
3. Design: The design phase involves creating a high-level or detailed design for the current
increment.
4. Implementation: The design is translated into code. This involves writing and testing the code
for the selected functionalities.
5. Testing: The implemented code is thoroughly tested to identify and fix bugs.
6. Deployment/Evaluation: The increment is deployed to a test environment or, in some cases, to
a limited production environment for user evaluation.
7. Feedback: Users and stakeholders provide feedback on the deployed increment. This feedback
is crucial for identifying areas for improvement.
8. Iteration: The process repeats, incorporating feedback and adding new functionalities in each
iteration. The system evolves until all requirements are met and the product is complete.
• Early User Involvement: Users are involved throughout the development process, ensuring that
the system meets their needs.
• Flexible and Adaptable: It can easily adapt to changing requirements and priorities.
• Reduced Risk: Risks are identified and addressed early in the development process.
• Working Software Early: Users get a working version of the software early in the development
cycle.
• Suitable for Complex Projects: Well-suited for projects where requirements are not fully
understood at the beginning.
• Continuous Feedback and Improvement: Constant user feedback allows for continuous
improvement of the product.
• Can be Complex to Manage: Requires careful planning and management to ensure that the
system evolves in a controlled manner.
• Risk of "Feature Creep": Constant addition of new features can lead to scope creep and a
bloated system.
• May Not be Suitable for Small Projects: The overhead of managing iterations may be too high
for small, simple projects.
• Requires Good Communication: Effective communication between developers, users, and
stakeholders is essential.
• Potential for Unstable System: Frequent changes can lead to instability if not managed
properly.
• Requires Experienced Team: The team needs to be experienced in iterative development and
have strong communication and collaboration skills.
The Evolutionary Development Model is a flexible and iterative approach that focuses on building a
system incrementally, incorporating user feedback throughout the development process. While it offers
many advantages, it also requires careful management and a skilled team to be successful. It's
particularly well-suited for projects with evolving requirements and where user involvement is essential.
The Iterative Enhancement Model is a specific type of evolutionary software development model. It
focuses on starting with a simple, working core system and then iteratively enhancing it with new
features and capabilities. Each iteration builds upon the previous one, gradually evolving the system
towards the desired final product. Think of it as "growing" a software system step-by-step.
Core Concepts:
• Feedback Loops: Feedback from users and stakeholders after each iteration is crucial for
guiding the direction of subsequent enhancements.
o Deploy the core system to users or a test environment. This provides an initial working
product.
o Gather feedback from users and stakeholders on the core system. This includes identifying
areas for improvement, desired new features, and any issues encountered.
o Analyze the feedback and prioritize enhancements for the next iteration.
o Plan the next iteration, including defining the scope of the enhancements and setting a timeline.
3. Enhancement Iteration:
o Design and implement the planned enhancements. This may involve adding new features,
modifying existing functionality, improving performance, or fixing bugs.
5. Repeat: Steps 2-4 are repeated for each subsequent iteration. Each iteration builds upon the
previous one, gradually adding new features and improving the system until it meets all the
desired requirements and goals.
Key Characteristics:
• Focus on Gradual Improvement: The system evolves incrementally through a series of
enhancements.
• Risk Mitigation: Delivering a working core system early reduces the risk of project failure.
• Flexibility: The model allows for changes to requirements and priorities as the project
progresses.
• User Satisfaction: Frequent releases and opportunities for feedback increase user satisfaction.
• Reduced Risk: Early deployment and feedback help identify and mitigate risks.
• Flexibility to Change: Allows for changes to requirements and priorities based on user
feedback.
• Improved User Satisfaction: Frequent releases and opportunities for feedback increase user
satisfaction.
• Easier to Manage Complexity: Breaking down the project into smaller iterations makes it
easier to manage complexity.
• Risk of Scope Creep: Constant addition of new features can lead to scope creep if not managed
properly.
• Potential for Design Drift: Without careful planning, the design of the system can drift over
time.
• Can Be Difficult to Estimate Effort: Estimating the effort required for each iteration can be
challenging.
• When the requirements are not fully understood at the beginning of the project.
• When users need to see and interact with the system early in the development process.
• When there is a need to deliver a working version of the software quickly.
While the Iterative Enhancement Model is an evolutionary model, it distinguishes itself by its explicit
focus on enhancement of an existing, working core system. Other evolutionary models, like prototyping
or the spiral model, may not necessarily start with a fully functional core or may emphasize risk analysis
and exploration of requirements more heavily than incremental enhancement. The iterative
enhancement model is all about taking a good thing and making it better, step by step.