Software Engineering Notes
Software Engineering Notes
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.
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. 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.
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.
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.
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.
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.
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.