Software Enginnering Notes
Software Enginnering Notes
High motivation.
Intelligence.
Discipline, etc.
Software Processes
The term software specifies to the set of computer programs, procedures and
associated documents (Flowcharts, manuals, etc.) that describe the program and
how they are to be used.
A software process is the set of activities and associated outcome that produce a
software product. Software engineers mostly carry out these activities. These are
four key process activities, which are common to all software processes. These
activities are:
1. A workflow model: This shows the series of activities in the process along
with their inputs, outputs and dependencies. The activities in this model
perform human actions.
2. A dataflow or activity model: This represents the process as a set of
activities, each of which carries out some data transformations. It shows
how the input to the process, such as a specification is converted to an
output such as a design. The activities here may be at a lower level than
activities in a workflow model. They may perform transformations carried
out by people or by computers.
3. A role/action model: This means the roles of the people involved in the
software process and the activities for which they are responsible.
Components of Software :
There are three components of the software: These are : Program,
Documentation, and Operating Procedures.
1. Program –
A computer program is a list of instructions that tell a computer what
to do.
2. Documentation –
Source information about the product contained in design
documents, detailed code comments, etc.
3. Operating Procedures –
Set of step-by-step instructions compiled by an organization to
help workers carry out complex routine operations.
4. Code: the instructions that a computer executes in order to
perform a specific task or set of tasks.
5. Data: the information that the software uses or manipulates.
6. User interface: the means by which the user interacts with the
software, such as buttons, menus, and text fields.
7. Libraries: pre-written code that can be reused by the software to
perform common tasks.
8. Documentation: information that explains how to use and
maintain the software, such as user manuals and technical guides.
9. Test cases: a set of inputs, execution conditions, and expected
outputs that are used to test the software for correctness and
reliability.
10. Configuration files: files that contain settings and parameters
that are used to configure the software to run in a specific
environment.
11. Build and deployment scripts: scripts or tools that are used to
build, package, and deploy the software to different environments.
12. Metadata: information about the software, such as version
numbers, authors, and copyright information.
Software Characteristics – Software
Engineering
The characteristics of the software include:
• It is intangible, meaning it cannot be seen or touched.
• It is non-perishable, meaning it does not degrade over time.
• It is easy to replicate, meaning it can be copied and distributed
easily.
• It can be complex, meaning it can have many interrelated parts and
features.
• It can be difficult to understand and modify, especially for large
and complex systems.
• It can be affected by changing requirements, meaning it may need
to be updated or modified as the needs of users change.
• It can be impacted by bugs and other issues, meaning it may need
to be tested and debugged to ensure it works as intended.
Components of Software Characteristics:
There are basically 6 components of Software Characteristics that are
discussed here. We will discuss each one of them in detail.
Functionality:
It refers to the degree of performance of the software against its intended
purpose.
Functionality refers to the set of features and capabilities that a software
program or system provides to its users. It is one of the most important
characteristics of software, as it determines the usefulness of the software
for the intended purpose. Examples of functionality in software include:
• Data storage and retrieval
• Data processing and manipulation
• User interface and navigation
• Communication and networking
• Security and access control
• Reporting and visualization
• Automation and scripting
The more functionality a software has, the more powerful and versatile it is,
but also the more complex it can be. It is important to balance the need for
functionality with the need for ease of use, maintainability, and scalability.
Reliability:
A set of attributes that bears on the capability of software to maintain its
level of performance under the given condition for a stated period of time.
Reliability is a characteristic of software that refers to its ability to perform its
intended functions correctly and consistently over time. Reliability is an
important aspect of software quality, as it helps ensure that the software will
work correctly and not fail unexpectedly.
Examples of factors that can affect the reliability of software include:
1. Bugs and errors in the code
2. Lack of testing and validation
3. Poorly designed algorithms and data structures
4. Inadequate error handling and recovery
5. Incompatibilities with other software or hardware
To improve the reliability of software, various techniques, and methodologies
can be used, such as testing and validation, formal verification, and fault
tolerance.
Software is considered reliable when the probability of it failing is low and it
is able to recover from the failure quickly, if any.
Efficiency:
It refers to the ability of the software to use system resources in the most
effective and efficient manner. The software should make effective use of
storage space and executive command as per desired timing requirements.
Efficiency is a characteristic of software that refers to its ability to use
resources such as memory, processing power, and network bandwidth in an
optimal way. High efficiency means that a software program can perform its
intended functions quickly and with minimal use of resources, while low
efficiency means that a software program may be slow or consume excessive
resources.
Examples of factors that can affect the efficiency of the software include:
1. Poorly designed algorithms and data structures
2. Inefficient use of memory and processing power
3. High network latency or bandwidth usage
4. Unnecessary processing or computation
5. Unoptimized code
To improve the efficiency of software, various techniques, and methodologies
can be used, such as performance analysis, optimization, and profiling.
Efficiency is important in software systems that are resource-constrained,
high-performance, and real-time systems. It is also important in systems that
need to handle many users or transactions simultaneously.
Usability:
It refers to the extent to which the software can be used with ease. the
amount of effort or time required to learn how to use the software.
Maintainability:
It refers to the ease with which modifications can be made in a software
system to extend its functionality, improve its performance, or correct errors.
Portability:
A set of attributes that bears on the ability of software to be transferred from
one environment to another, without minimum changes.
#Software Crisis :
1. Size and Cost –
Day to day growing complexity and expectation out of software.
Software are more expensive and more complex.
2. Quality –
Software products must have good quality.
3. Delayed Delivery –
Software takes longer than the estimated time to develop, which
in turn leads to cost shooting up.
4. The term “software crisis” refers to a set of problems that were
faced by the software industry in the 1960s and 1970s, such as:
5. High costs and long development times: software projects were
taking much longer and costing much more than expected.
6. Low quality: software was often delivered late, with bugs and
other defects that made it difficult to use.
7. Lack of standardization: there were no established best practices
or standards for software development, making it difficult to
compare and improve different approaches.
8. Lack of tools and methodologies: there were few tools and
methodologies available to help with software development,
making it a difficult and time-consuming process.
9. These problems led to a growing realization that the traditional
approaches to software development were not effective and
needed to be improved. This led to the development of new
software development methodologies, such as the Waterfall and
Agile methodologies, as well as the creation of new tools and
technologies to support software development.
1) Reliability
Synonym for reliability is assurance. Reliability can be defined as the degree to
which a software system or its components or a service performs specific
functions under predefined conditions for a set period. It is the likelihood of
fault-free software operation for a specified period of time in a specified
environment.
It is the measure of the ability of a software application or service to
consistently maintain operations in a predefined condition. It is critical to verify
that the software is fully functional, especially when under maximum load.
2) Maintainability
It is the ease with which a software developer is able to fix flaws in the existing
functionality without impacting other components of the software system. It
also considers the ease with which a developer can add new features, update
existing features or upgrade the system with new technology.
3) Usability
This attribute refers to the quality of the end user’s experience while interacting
with the application or service. Usability is concerned with effectiveness,
efficiency, and overall user satisfaction.
This attribute helps to measure the ease of use of any software application or
service (e.g., registering a new account and then signing in to the account)
4) Portability
It refers to the extent to which a system or its components can be migrated
(transported) to other environments consisting of different hardware and/or
different software (operating system). The importance of software
portability should not be underestimated.
5) Correctness
This refers to the ability of software products or services to perform tasks (e.g.
calculations, sign-ups, navigations) correctly as specified by the predefined
requirements when used under specified conditions.
7) Security
It is defined as the capacity of a system to fend off or thwart malicious or
unauthorized attempts to intrude and damage it while still allowing access to
authorized users. Additionally, it also measures the ability of the software
system to safeguard data and information from unauthorized entities.
8) Testability
It defines the ease with which QA and other beta users can test the software
application and detect bugs. It also evaluates the ease with which the testing
personnel can design test criteria for the application and its various
components.
Another criterion could be the number of test cases or features that can be
automated so that the testing process itself can be automated.
In simple terms, testability identifies how fast a system can be tested to ensure
quality against predefined specifications.
9) Flexibility (Modifiability)
It is the degree to which software applications can adapt to future changes
(e.g., upcoming technologies, market trends, business rules, regulations, etc.)
A software application can be called flexible if it can run smoothly on any type
of device, hardware platform, and/or operating system. It should be easy to
interface with any other software products, third-party software, or libraries.
10) Scalability
This attribute relates to the software system’s capability to handle the
increased load (usage) without degrading its performance. The industry (the
software industry in particular) should always consider the importance of
software scalability.
11) Compatibility
It refers to the ability of the application to integrate seamlessly with other
software applications under prescribed conditions and perform its actions
efficiently while sharing the same hardware and software (e.g. Operating
system). The app should be able to work as expected on different devices,
hardware, and software platforms.
It also considers the ability of software applications (in this case web
applications) to work correctly on different types of browsers and their several
versions.
1. Waterfall Model
It is the fundamental model of the software development life cycle. This is a
very simple model. The waterfall model is not in practice anymore, but it is the
basis for all other SDLC models. Because of its simple structure, the waterfall
model is easier to use and provides a tangible output. In the waterfall model,
once a phase seems to be completed, it cannot be changed, and due to this
less flexible nature, the waterfall model is not in practice anymore
2. Agile Model
The agile model was mainly designed to adapt to changing requests quickly.
The main goal of the Agile model is to facilitate quick project completion. The
agile model refers to a group of development processes. These processes have
some similar characteristics but also possess certain subtle differences among
themselves.
3. Iterative Model
In the iterative model, each cycle results in a semi-developed but deployable
version; with each cycle, some requirements are added to the software, and
the final cycle results in the software with the complete requirement
specification.
4. Spiral Model
The spiral model is one of the most crucial SDLC models that provides support
for risk handling. It has various spirals in its diagrammatic representation; the
number of spirals depends upon the type of project. Each loop in the spiral
structure indicates the Phases of the Spiral model.
5.V-Shaped Model
The V-shaped model is executed in a sequential manner in V-shape. Each stage
or phase of this model is integrated with a testing phase. After every
development phase, a testing phase is associated with it, and the next phase
will start once the previous phase is completed, i.e., development & testing. It
is also known as the verification or validation model.
2. Design Phase: This phase aims to transform the requirements gathered in the
SRS into a suitable form which permits further coding in a programming
language. It defines the overall software architecture together with high level
and detailed design. All this work is documented as a Software Design
Document (SDD).
4. Integration and System Testing: This phase is highly crucial as the quality of the
end product is determined by the effectiveness of the testing carried out. The
better output will lead to satisfied customers, lower maintenance costs, and
accurate results. Unit testing determines the efficiency of individual modules.
However, in this phase, the modules are tested for their interactions with each
other and with the system.
Some Circumstances where the use of the Waterfall model is most suited are:
o This model is simple to implement also the number of resources that are
required for it is minimal.
o The requirements are simple and explicitly declared; they remain
unchanged during the entire project development.
o The start and end points for each phase is fixed, which makes it easy to
cover progress.
o The release date for the complete product, as well as its final cost, can be
determined before development.
o It gives easy to control and clarity for the customer due to a strict reporting
system.
o In this model, the risk factor is higher, so this model is not suitable for more
significant and complex projects.
o This model cannot accept the changes in requirements during
development.
o 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.
o 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. In
many instances, the client only has a general view of what is expected from the
software product. In such a scenario where there is an absence of detailed
information regarding the input to the system, the processing needs, and the
output requirement, the prototyping model may be employed.
Spiral Model
The spiral model, initially proposed by Boehm, is an evolutionary software
process model that couples the iterative feature of prototyping with the
controlled and systematic aspects of the linear sequential model. It implements
the potential for rapid development of new versions of the software. Using the
spiral model, the software is developed in a series of incremental releases. During
the early iterations, the additional release may be a paper model or prototype.
During later iterations, more and more complete versions of the engineered
system are produced.
Objective setting: Each cycle in the spiral starts with the identification of purpose
for that cycle, the various alternatives that are possible for achieving the targets,
and the constraints that exists.
Risk Assessment and reduction: The next phase in the cycle is to calculate these
various alternatives based on the goals and constraints. The focus of evaluation
in this stage is located on the risk perception for the project.
Development and validation: The next phase is to develop strategies that resolve
uncertainties and risks. This process may include activities such as benchmarking,
simulation, and prototyping.
Planning: Finally, the next step is planned. The project is reviewed, and a choice
made whether to continue with a further period of the spiral. If it is determined
to keep, plans are drawn up for the next step of the project.
The risk-driven feature of the spiral model allows it to accommodate any mixture
of a specification-oriented, prototype-oriented, simulation-oriented, or another
type of approach. An essential element of the model is that each period of the
spiral is completed by a review that includes all the products developed during
that cycle, including plans for the next cycle. The spiral model works for
development as well as enhancement projects.
Advantages
Disadvantages
The Iterative Model allows the accessing earlier phases, in which the variations
made respectively. The final output of the project renewed at the end of the
Software Development Life Cycle (SDLC) process.
The various phases of Iterative model are as follows:
2. Design: In the design phase, team design the software by the different
diagrams like Data Flow diagram, activity diagram, class diagram, state transition
diagram, etc.
4. Testing: After completing the coding phase, software testing starts using
different test methods. There are many test methods, but the most common are
white box, black box, and grey box test methods.
5. Deployment: After completing all the phases, software is deployed to its work
environment.