0% found this document useful (0 votes)
23 views

Software Engineering Notes

The document discusses software processes and life cycles, explaining that a process focuses on development methods while a life cycle provides an overall framework from inception to retirement, with the process being part of the broader life cycle. It also provides examples of well-known software development models and their characteristics.

Uploaded by

Dawilly Gene
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)
23 views

Software Engineering Notes

The document discusses software processes and life cycles, explaining that a process focuses on development methods while a life cycle provides an overall framework from inception to retirement, with the process being part of the broader life cycle. It also provides examples of well-known software development models and their characteristics.

Uploaded by

Dawilly Gene
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/ 14

The terms "software process" and "software life cycle" refer to

different aspects of software development. Here's an explanation


of each term:

Software Process:
A software process, also known as a software development
process or software engineering process, is a structured approach
or set of activities that defines how software is developed,
managed, and maintained throughout its lifecycle. It provides a
framework for planning, designing, coding, testing, deploying, and
maintaining software systems.

A software process encompasses various phases, activities, and


tasks that need to be followed to develop high-quality software.
Examples of well-known software development processes include
the Waterfall model, Agile methodologies (such as Scrum and
Kanban), and Spiral model. Each process has its own set of
activities, artifacts, and guidelines that guide the software
development team through the project.

Software Life Cycle:


The software life cycle, also known as the software development
life cycle (SDLC), describes the stages and activities that a
software product goes through from its conception to its retirement.
It represents the entire lifespan of a software system, including its
development, deployment, and eventual decommissioning.

The software life cycle typically consists of the following stages:


1. Requirements gathering and analysis
2. Design
3. Implementation or coding
4. Testing and quality assurance
5. Deployment or release
6. Maintenance and support

These stages represent a linear progression of the software's


development and maintenance. The life cycle provides a high-level
view of the different phases and activities involved in creating and
managing software, whereas the software process delves deeper
into the specific methodologies, practices, and techniques used
during development.
In summary, the software process focuses on the approach and
methods used to develop software, while the software life cycle
provides an overall framework for managing the software from its
inception to its retirement. The software process is a part of the
broader software life cycle, as it defines the detailed steps and
practices within each life cycle stage.

You've provided a summary of different software development


models. Here's an explanation of each model:

1. Waterfall Model:
The waterfall model is a plan-driven software development model
that follows a sequential approach. It consists of distinct phases,
such as requirements gathering, design, implementation, testing,
and maintenance. Each phase is completed before moving on to
the next, and there is minimal overlap between phases. This model
assumes that all requirements can be specified upfront and that
changes are minimal during development.

2. Incremental Development:
Incremental development involves breaking the software
development process into smaller increments or iterations. Each
increment includes specification, development, and validation
activities. This approach allows for feedback and learning from
each increment, which can influence subsequent iterations.
Incremental development can be plan-driven, where increments
are pre-planned, or agile, where the development process is more
iterative and adaptive.

3. Integration and Configuration:


Integration and configuration involve assembling a software
system from existing components or modules. These components
may be pre-existing software components or configurable software
elements. This approach allows for reusing existing software and
can be plan-driven or agile, depending on the specific integration
and configuration practices employed.
In practice, software development projects often incorporate
elements from multiple models. Large systems may require a
combination of plan-driven and agile approaches, depending on
the project's characteristics, requirements, and constraints.
Software development teams may adopt practices from different
models to suit the specific needs of their project and organization.

It's important to note that various hybrid and tailored software


development approaches have emerged, combining elements from
different models to create customized processes that fit specific
project contexts. The choice of a development model or a
combination of models depends on factors such as project size,
complexity, team capabilities, and customer requirements.

Indeed, incremental development offers several benefits compared


to a traditional waterfall model. Here are some key advantages:

1. Reduced cost of accommodating changing requirements: In


incremental development, customer requirements can evolve and
change over time. By breaking the development process into
smaller increments, it becomes easier to incorporate these
changes. The cost of modifying and adapting the software to meet
new requirements is lower compared to the extensive rework
required in a waterfall model.

2. Reduced analysis and documentation overhead: Incremental


development focuses on developing working software early and
iterating based on feedback. This approach reduces the amount of
analysis and documentation that needs to be redone compared to
the upfront heavy analysis required in a waterfall model. This
allows for more efficient use of resources and speeds up the
development process.

3. Enhanced customer feedback and involvement: Incremental


development facilitates ongoing customer involvement throughout
the development process. By delivering working increments and
engaging customers in demonstrations, they can provide valuable
feedback and insights. This helps ensure that the software meets
their expectations and allows for timely adjustments and
refinements.
4. Rapid delivery and deployment of useful software: Incremental
development enables the delivery of functional software to
customers in shorter cycles. As each increment is developed and
validated, it can be deployed and made available for use by the
customer. This early and continuous delivery of useful software
allows customers to start benefiting from the software sooner
compared to a waterfall process.

These benefits highlight the customer-centric and iterative nature


of incremental development. By involving customers, adapting to
changing requirements, and delivering working software
incrementally, this approach aims to provide greater customer
satisfaction, faster time-to-market, and more adaptable software
solutions.

While incremental development offers benefits, it also comes with


certain challenges and problems that need to be considered. Here
are a couple of issues associated with incremental development:

1. Lack of process visibility: Incremental development may focus


more on delivering working software than producing extensive
documentation. This can make it challenging for managers to track
progress and have a clear understanding of the overall
development process. The absence of comprehensive
documentation for every version of the system can hinder visibility
and make it difficult to measure progress accurately.

2. Degradation of system structure: Without proper attention and


effort, the structure of the system may degrade over time as new
increments are added. Rapid changes and iterations without
adequate refactoring can lead to code inconsistencies, duplicated
functionality, and decreased maintainability. The software's
architecture and design can suffer, making it harder to incorporate
further changes and increasing the cost and complexity of future
development efforts.

It's important to note that these problems can be mitigated with


appropriate practices and strategies. For example:
- Regular communication and collaboration between the
development team and stakeholders can improve process visibility
and ensure alignment.
- Employing continuous integration and automated testing
practices can help maintain code quality and detect issues early.
- Allocating time and resources for refactoring and code cleanup
activities can prevent the degradation of system structure over
time.

Addressing these challenges requires careful planning, effective


communication, and a commitment to maintaining code quality and
system architecture throughout the incremental development
process. By balancing speed and agility with good software
engineering practices, the potential problems associated with
incremental development can be managed effectively.

Indeed, there are various types of reusable software components.


Here are three examples:

1. Stand-alone application systems (COTS):


These are commercially available off-the-shelf software systems
that are designed to be used in a particular environment or domain.
They are pre-built software packages that can be configured and
customized to suit specific needs. Examples include enterprise
resource planning (ERP) systems, customer relationship
management (CRM) software, and accounting software. COTS
applications are typically used as a base system and can be
extended or integrated with other software components.

2. Collections of objects integrated with a component framework:


These are reusable software components developed as packages
that can be integrated with a specific component framework, such
as .NET or J2EE (Java 2 Enterprise Edition). These components
are designed to work within the framework's architecture and
follow its standards and conventions. They can include libraries,
modules, or sets of classes that provide specific functionalities.
These components promote code reusability, modular design, and
interoperability within the chosen framework.

3. Web services:
Web services are software components that are developed
according to standardized service-oriented architectures (SOA).
They provide specific functionalities and can be invoked remotely
over a network. Web services follow industry standards such as
SOAP (Simple Object Access Protocol) and REST
(Representational State Transfer) and use technologies like XML
and JSON for data exchange. Web services enable interoperability
and integration between different systems and platforms, allowing
for distributed and loosely coupled architectures.

These types of reusable software components offer the advantage


of saving development time and effort by leveraging pre-existing
functionality. They promote code reuse, modularity, and
interoperability, enabling more efficient and rapid software
development.

Reducing the costs of rework in software development is crucial to


ensure efficiency and cost-effectiveness. Here are two approaches
that help address this:

1. Change anticipation:
Change anticipation involves incorporating activities in the
software development process that can anticipate possible
changes before significant rework becomes necessary. By
proactively identifying potential changes, developers can plan and
design the system in a way that allows for flexibility and
adaptability. For example, developing a prototype system or
conducting early customer feedback sessions can help uncover
key features or requirements that may need to be modified.
Anticipating changes upfront reduces the chances of major rework
later in the development process.

2. Change tolerance:
Change tolerance focuses on designing the software development
process to accommodate changes at a relatively low cost.
Incremental development approaches are commonly employed to
achieve change tolerance. By breaking the development into small,
manageable increments, changes can be incorporated easily.
Proposed changes can be implemented in increments that have
not yet been developed, minimizing the impact on already
completed work. If necessary, only a specific increment or a small
part of the system may be altered to accommodate the change.
This approach reduces the overall rework needed and keeps the
cost of change relatively low.

Both change anticipation and change tolerance aim to reduce the


costs associated with rework in software development. By
proactively considering potential changes and designing the
process to accommodate them, development teams can increase
adaptability, responsiveness, and cost efficiency in managing
evolving requirements.

Indeed, coping with changing requirements in software


development is essential to ensure customer satisfaction and
project success. Here are two approaches that help address this
challenge:

1. System prototyping:
System prototyping involves developing a quick and simplified
version of the system or specific parts of it to validate customer
requirements and evaluate the feasibility of design decisions. This
prototype serves as a tangible representation of the system,
allowing stakeholders to provide feedback and verify their
expectations. By involving customers early in the process, system
prototyping supports change anticipation. It helps identify potential
issues, gather user feedback, and refine requirements before
significant development efforts are undertaken. This reduces the
likelihood of costly rework due to misunderstood or evolving
requirements.

2. Incremental delivery:
Incremental delivery involves dividing the system development into
smaller increments or iterations that are delivered to the customer
for feedback, evaluation, and experimentation. Each increment
represents a functional portion of the system that can be
independently developed, tested, and deployed. By delivering
working increments to the customer, change avoidance and
change tolerance are facilitated. Customers have the opportunity
to review and interact with the software, provide feedback, and
suggest changes or refinements. This iterative approach allows for
early detection of issues and the ability to incorporate changes
more easily, reducing the impact of changing requirements and
enabling customer satisfaction.

Both system prototyping and incremental delivery contribute to


coping with changing requirements by promoting early and
continuous customer involvement, feedback, and adaptation.
These approaches help align the software system with evolving
needs, reduce the risks associated with changing requirements,
and increase the chances of delivering a system that meets
customer expectations.

Throw-away prototypes, as the name suggests, are prototypes that


are developed for the purpose of gathering feedback and
understanding user requirements but are not intended to be used
as a basis for the production system. Here are some reasons why
throw-away prototypes are typically not suitable for a production
system:

1. Difficulty in meeting non-functional requirements: Throw-away


prototypes are often developed quickly and may not prioritize non-
functional requirements, such as performance, scalability, or
security. Tuning the prototype to meet these non-functional
requirements may be challenging or even impossible, as they were
not the primary focus during development.

2. Lack of documentation: Prototypes are typically created with the


main objective of validating ideas and gathering feedback.
Documentation is often minimal or nonexistent, as the emphasis is
on rapid development and experimentation. In a production system,
comprehensive documentation is necessary for maintenance,
support, and future enhancements.

3. Degraded prototype structure: Throw-away prototypes are


subject to rapid changes and modifications based on user
feedback. This frequent alteration can lead to a degraded structure
as the prototype evolves. In a production system, maintaining a
robust and maintainable software structure is crucial for long-term
stability and development.
4. Inability to meet organizational quality standards: Prototypes are
typically built with a focus on functionality and user experience
rather than adhering to organizational quality standards and
processes. They may lack proper testing, formal code reviews, and
other quality assurance practices. Production systems, on the
other hand, need to meet established quality standards to ensure
reliability, stability, and maintainability.

While throw-away prototypes serve a valuable purpose in


gathering user feedback and refining requirements, they are not
intended to be directly used as a foundation for a production
system. Once the prototype has fulfilled its purpose, it is typically
discarded, and the insights gained from it are used to inform the
development of the production system using more rigorous
software engineering practices.

Incremental delivery is an approach in software development


where the system is developed and delivered in multiple
increments, with each increment delivering a part of the required
functionality. Here are some key characteristics and benefits of
incremental delivery:

1. Breakdown into increments: The development and delivery of


the system are divided into smaller, manageable increments. Each
increment focuses on delivering specific functionalities or features,
allowing for incremental progress.

2. Prioritization of user requirements: User requirements are


prioritized based on their importance and value to the stakeholders.
The highest priority requirements are included in the early
increments, ensuring that the most critical functionalities are
delivered first.

3. Frozen requirements: Once the development of an increment


begins, the requirements for that increment are frozen. This means
that the scope and specifications for that particular increment are
agreed upon and remain unchanged during its development. This
provides stability and clarity for the development team and allows
them to focus on delivering the agreed-upon requirements.
4. Evolution of requirements: While the requirements for the
current increment are frozen, the requirements for later increments
can continue to evolve. This accommodates changes and
adaptations based on feedback, new insights, or changing
business needs. It allows for flexibility and responsiveness to
evolving requirements throughout the development process.

Benefits of incremental delivery include:

- Early value delivery: Incremental delivery enables the delivery of


working software to users or stakeholders early in the development
process. This allows them to start using and benefiting from the
system sooner.

- Continuous feedback and adaptation: By involving users and


stakeholders throughout the development process, incremental
delivery facilitates regular feedback and validation of the delivered
functionalities. This feedback loop allows for ongoing improvement
and ensures that the system aligns with the evolving needs and
expectations.

- Risk mitigation: Breaking the development into increments


reduces the overall project risk. It enables the identification and
resolution of issues early, as well as the adjustment of
development plans based on lessons learned from previous
increments.

- Improved stakeholder satisfaction: Incremental delivery allows for


a more iterative and collaborative approach, increasing
stakeholder involvement and satisfaction. The ability to see
progress and provide input throughout the development process
improves communication, trust, and the overall success of the
project.

By prioritizing requirements, delivering incrementally, and allowing


for the evolution of requirements, incremental delivery promotes
agility, responsiveness, and early value realization in software
development projects.

Incremental development and incremental delivery are two related


concepts in software development that involve the development
and deployment of a system in incremental stages. Here are the
characteristics and considerations for each:

Incremental development:
- In incremental development, the system is built and evaluated in
increments or iterations.
- Each increment focuses on delivering a subset of the required
functionality.
- The development team evaluates each increment before
proceeding to the development of the next increment.
- Incremental development is commonly used in agile software
development methodologies, where feedback and adaptation are
emphasized.
- Evaluation of increments is typically done by a user or customer
proxy, who provides feedback and validates the delivered
functionality.

Incremental delivery:
- Incremental delivery involves deploying and making an increment
of the system available for use by end-users.
- The deployed increment provides a more realistic evaluation of
the software's practical use and usability.
- It allows end-users to interact with and provide feedback on the
deployed increment, facilitating user involvement and validation.
- However, for replacement systems, incremental delivery can be
challenging as increments may have less functionality than the
existing system being replaced. This can create difficulties in
transitioning and migrating users to the new system if essential
functionality is missing in the initial increments.

Both incremental development and incremental delivery contribute


to the iterative and adaptive nature of software development. By
breaking the development into smaller increments and involving
users or customer proxies, these approaches enable early
feedback, increased stakeholder satisfaction, and the ability to
respond to changing requirements more effectively. However,
careful planning and consideration are required to ensure that the
incremental approach aligns with the specific context and
requirements of the project, especially in the case of replacement
systems.
Process improvement in software development is a common
practice adopted by many software companies to enhance the
quality of their software, reduce costs, and accelerate development
processes. Here are two approaches to process improvement:

1. Process maturity approach:


The process maturity approach focuses on improving process and
project management while introducing good software engineering
practices. The aim is to increase the maturity level of the
organization's software development processes. The maturity level
reflects the extent to which the organization has adopted and
implemented effective technical and management practices. The
Software Engineering Institute's Capability Maturity Model
Integration (CMMI) is an example of a process maturity model that
guides organizations in improving their processes incrementally.

2. Agile approach:
The agile approach emphasizes iterative development and the
reduction of unnecessary overheads in the software process. Agile
methods prioritize rapid delivery of functionality and
responsiveness to changing customer requirements. They promote
adaptive planning, close collaboration between cross-functional
teams, and frequent customer feedback. Examples of agile
methodologies include Scrum, Kanban, and Extreme Programming
(XP). Agile methods are known for their flexibility, iterative
approach, and ability to accommodate changing requirements.

Both approaches have their strengths and considerations. The


process maturity approach focuses on establishing robust
processes, documentation, and standardized practices. It aims to
bring stability and predictability to software development. On the
other hand, the agile approach prioritizes flexibility, collaboration,
and responsiveness to change. It allows for more adaptive and
iterative development, enabling quicker feedback and value
delivery.

Organizations may choose to adopt a combination of these


approaches or tailor them to suit their specific needs and context.
The key is to continuously evaluate and improve the software
development process to enhance quality, reduce costs, and meet
customer expectations effectively.
The process improvement cycle involves several activities aimed
at enhancing the software development process. Here are the key
activities:

Process Measurement:
This activity involves collecting quantitative data related to the
software process or product. Measurements serve as a baseline to
evaluate the effectiveness of process improvements. It is important
to define relevant process standards to guide the measurement
process.

Process Analysis:
The current process is assessed, and weaknesses and
bottlenecks are identified. Process analysis helps understand the
shortcomings of the existing process and provides insights into
areas that require improvement. Process models, such as process
maps, can be developed to visualize and document the process.

Process Change:
Based on the analysis, proposals for process changes are made to
address identified weaknesses. These changes can be
implemented, and the cycle continues by collecting data to assess
the effectiveness of the changes. This iterative approach allows for
continuous improvement over time.

Process measurement and analysis provide the foundation for


identifying areas of improvement, while process change brings
about the necessary modifications to enhance the software
development process.

Process metrics are used to measure various aspects of the


process. Examples of process metrics include the time taken for
activities to be completed, resources required for processes or
activities (e.g., effort in person-days), and the number of
occurrences of specific events (e.g., defects discovered). These
metrics provide objective data to assess the performance and
effectiveness of the process.
Capability maturity levels, as defined by the Software Engineering
Institute (SEI) capability maturity model, represent different stages
of process maturity. The levels are as follows:

Initial: The process is essentially uncontrolled, with no defined


procedures or strategies.
Repeatable: Basic product management procedures are defined
and used.
Defined: Process management procedures and strategies are
defined and used.
Managed: Quality management strategies are defined and used.
Optimizing: Process improvement strategies are defined and used
to continuously enhance the process.
These maturity levels reflect the extent to which good software
engineering practices and management strategies are
implemented in the organization's software development
processes. Organizations strive to progress through these levels to
improve their overall software development capabilities.

You might also like