SE Unit - A Notes
SE Unit - A Notes
Unit - A
Software Engineering
Software Engineering is the process of designing, developing, testing, and maintaining software. It is
a systematic and disciplined approach to software development that aims to create high-quality,
reliable, and maintainable software. Software engineering includes a variety of techniques, tools, and
methodologies, including requirements analysis, design, testing, and maintenance.
Functionality:
It is one of the most important characteristics of software, as it determines the usefulness of the software
for the intended purpose. Functionality refers to the set of features and capabilities that a software
program or system provides to its users.
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.
Components of Software
There are three main components of the software:
Program
Documentation
Operating Procedures
1. Program: A computer program is a list of instructions that tell a computer what to do.
2. Documentation: Documentation is the written text that explains the use and operating
mechanisms for computer software.
There are three types of documentation:
Architecture/Design Documentation: Such documentation provides an overview of the system.
It includes a list of things used in construction of the software, along with a justification on
why they are used.
Technical Documentation: When software is created, the code alone is not sufficient. There is
some text known as technical documentation along with it that describes various aspects of its
operations. It is a documentation that explains the data structures, algorithms and interfaces.
End-User Documentation: Such documentation is a manual for the end-users, system
administrators and support staff. A good user documentation explains all the features of the
program, and various steps required to invoke it.
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. Test cases: a set of inputs, execution conditions, and expected outputs that are used to test the
software for correctness and reliability.
9. Configuration files: files that contain settings and parameters that are used to configure the
software to run in a specific environment.
10. Metadata: information about the software, such as version numbers, authors, and
copyright information.
Android and iOS apps for businesses, healthcare, gaming, and education.
Examples: WhatsApp, Instagram, Uber, Duolingo.
Technologies: Swift, Kotlin, React Native, Flutter.
5. Game Development
There are many kinds of process models for meeting different requirements. We refer to these
as SDLC models (Software Development Life Cycle models). The most popular and important SDLC
models are as follows:
Waterfall model
V model
Incremental model
RAD model
Agile model
Iterative model
Prototype model
Spiral model
Waterfall Model
The waterfall model is a sequential, plan driven-process where you must plan and schedule all your
activities before starting the project. Each activity in the waterfall model is represented as a separate
phase arranged in linear order.
Requirements analysis and specification phase: The aim of this phase is to understand the exact
requirements of the customer and to document them properly. Both the customer and the software
developer work together so as to document all the functions, performance, and interfacing requirement
of the software. It describes the "what" of the system to be produced and not "how". In this phase, a
large document called Software Requirement Specification (SRS) document is created which
contained a detailed description of what the system will do in the common language.
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).
3. Implementation and unit testing: During this phase, design is implemented. If the SDD is complete,
the implementation or coding phase proceeds smoothly, because all the information needed by software
developers is contained in the SDD.
During testing, the code is thoroughly examined and modified. Small modules are tested in isolation
initially. After that these modules are tested by writing some overhead code to check the interaction
between these modules and the flow of intermediate output.
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.
5. Operation and maintenance phase: Maintenance is the task performed by every user once the
software has been delivered to the customer, installed, and operational. This process occurs shortly after
installation and includes making the necessary modifications to the product or system and increasing,
changing, or modifying aspects linked to system performance difficulties.
Each of these phases produces one or more documents that need to be approved before the next phase
begins.
The waterfall model is easy to understand and follow. It doesn’t require a lot of customer involvement
after the specification is done. Since it’s inflexible, it can’t adapt to changes. There is no way to see or
try the software until the last phase.
The waterfall model has a rigid structure, so it should be used in cases where the requirements are
understood completely and unlikely to radically change.
Prototyping Model
One of the most often used Software Development Life Cycle Models (SDLC models) is the
prototyping model. When clients are unsure about the precise project requirements in advance, this
strategy is used.
The prototyping model starts with the requirements gathering. The developer and the user meet and define
the purpose of the software, identify the needs, etc.
A 'quick design' is then created. This design focuses on those aspects of the software that will be visible
to the user. It then leads to the development of a prototype. The customer then checks the prototype, and
any modifications or changes that are needed are made to the prototype.
Looping takes place in this step, and better versions of the prototype are created. These are continuously
shown to the user so that any new changes can be updated in the prototype. This process continue until
the customer is satisfied with the system. Once a user is satisfied, the prototype is converted to the
actual system.
Prototype Construction:
A working prototype is built based on the initial design. This prototype is a functional
representation of the system, but it may not include all features or have full functionality.
Implement the core features of the system to create a prototype that can be demonstrated to
users. The focus is on providing a tangible representation of the proposed system.
User Evaluation:
Users and stakeholders evaluate the prototype, providing feedback on its functionality, design,
and features.
Conduct user evaluations where users interact with the prototype. Gather feedback on what
works well, what needs improvement, and any additional features or changes users may suggest.
Refinement:
Based on the feedback received, the prototype is refined, modified, and enhanced to address
user concerns and improve functionality.
Use the feedback to make necessary adjustments to the prototype. This may involve adding,
modifying, or removing features to better align with user expectations.
Iteration:
Previously two steps were repeated iteratively. New versions of the prototype are built,
evaluated, and refined until a satisfactory solution is achieved.
Continue to iterate through the construction, evaluation, and refinement phases until the
prototype aligns closely with user expectations. Each iteration leads to an improved version of
the prototype.
Final System Implementation:
Once the prototype is approved and refined, the final system is implemented based on the
lessons learned from the prototype.
Develop the complete system using the insights gained from the prototype. Ensure the final
system incorporates all the refinements and meets the refined requirements.
Deployment and Maintenance:
The final system is deployed for use, and ongoing maintenance is performed as needed.
Release the system to users and provide ongoing support and maintenance as necessary. The
maintenance phase may involve addressing issues that arise after deployment and making further
enhancements.
Spiral Model
The Spiral Model is a software development life cycle (SDLC) model that combines elements of both
design and prototyping in stages. It was first introduced by Barry Boehm in 1986 and is particularly
useful for large, complex, and high-risk projects.
The Spiral Model is iterative, meaning that the process is repeated in cycles (or spirals), each consisting
of four major phases. These cycles allow for constant refinement of the software as it is developed.
4️. Flexibility
The Spiral Model is adaptable and allows for changes in project scope, budget, and schedule
throughout development.
New requirements and design alterations can be accommodated at any stage in the cycle.
SQL (Structured Query Language) – Used for querying and managing databases.
MATLAB – Used for numerical computing and visualizing data.
Visual Basic (VB) – A GUI-based language for rapid application development.
SAS – A software suite for advanced analytics, multivariate analysis, and data management
CASE tools are automated software tools that help in software development processes such as
design, coding, testing, and maintenance.
CASE tools typically focus on modelling, documentation, and maintenance of software projects,
making the development process faster and more reliable.
RAD is an incremental software development process that emphasizes quick prototyping over
rigorous planning and testing.
4GT tools are often used to create visual user interfaces and pre-built components to accelerate
the development cycle.
A major aspect of 4GT is the use of data-driven development, where the focus shifts from the
application code to the data itself.
4GT tools enable rapid creation of applications based on existing data models and databases.
Declarative programming: Instead of focusing on step-by-step logic, developers specify what
should be done (e.g., using queries or models) and the system figures out the details.
Examples:
Database Management Systems (DBMS): Using SQL-based 4GLs to create applications with
minimal code.
Business Intelligence (BI) tools: Applications that generate reports or dashboards based on pre-
existing data sources.
4GT tools include drag-and-drop visual interface builders that allow developers to create
complex, feature-rich user interfaces without writing much code.
These tools integrate features like form generation, data entry validation, and report generation
through visual design elements.
Examples:
Microsoft Access – Allows non-programmers to create databases and simple applications with a
GUI.
PowerApps (by Microsoft) – Enables users to build apps with no-code or low-code solutions.
4GT promotes the use of automated software generators to generate code or applications based
on high-level user specifications.
This is particularly useful in domains like web development or enterprise applications, where
users can specify requirements, and tools generate the corresponding software structure.
Examples:
Web frameworks (e.g., Django, Ruby on Rails) automatically generate parts of applications.
Code generation tools based on user inputs for specific functionalities.
Scope management involves defining and controlling what is included and excluded in the project. It
ensures that only the necessary work is done, avoiding scope creep (uncontrolled changes in project
scope).
Key aspects:
Time management ensures that the project is completed within the scheduled timeframe. It involves:
Estimating time: Using techniques like PERT (Program Evaluation and Review Technique)
or critical path method (CPM) to estimate the time required for tasks.
Scheduling: Allocating time to tasks, assigning dependencies, and setting milestones to track
progress.
Monitoring: Continuously checking progress and adjusting schedules as needed.
Cost management ensures that the project is completed within budget. It involves:
Estimating costs: Determining the financial resources required for the project.
Budgeting: Allocating funds to different areas of the project (e.g., development, testing,
hardware).
Controlling costs: Monitoring expenses and managing variances from the budget.
Quality management ensures that the software meets the required standards and satisfies customer
expectations. It includes:
Quality planning: Defining the quality standards and metrics for the project.
Quality assurance: Ensuring that the software development processes are followed correctly.
Quality control: Conducting tests to verify that the software meets quality standards.
Risk management involves identifying potential risks to the project and mitigating them. This includes:
Risk identification: Identifying risks early (e.g., technical challenges, resource shortages,
changing requirements).
Risk assessment: Evaluating the likelihood and impact of each risk.
Risk mitigation: Developing strategies to reduce or eliminate risks.
Contingency planning: Preparing backup plans for unforeseen risks.
Communication management ensures that all stakeholders are kept informed. It involves:
By collecting and analyzing metrics, teams can make data-driven decisions, ensure the efficiency of
processes, and mitigate risks. They provide valuable insights into the effectiveness of the project, the
quality of the software, and the performance of both the team and the system.
Software Measurement
Software measurement is the process of collecting, analyzing, and interpreting data related to the
development and performance of software products. It involves the application of quantitative
techniques to assess various aspects of software, including quality, complexity, performance, and
process efficiency. Software measurement helps to ensure that software development is progressing as
planned and that the product meets the specified requirements.
Software measurement can provide insights into product quality, developer productivity, and project
health, allowing teams to improve their processes, make informed decisions, and manage risks
effectively.
Software Metrics
A metric is a measurement of the level at which any impute belongs to a system product or
process. Software metrics are a quantifiable or countable assessment of the attributes of a software
product.