0% found this document useful (0 votes)
7 views50 pages

Basics of Software Engineering (5)

The document outlines a course on Basics of Software Engineering taught by Dr. Paul J., detailing the course structure, assessment methods, and key principles of software engineering. It covers essential topics such as software development processes, testing, and maintenance, emphasizing the importance of systematic approaches to create high-quality software. Additionally, it discusses the roles and responsibilities of software engineers, including requirement analysis, design, and testing, along with the significance of software testing in ensuring reliability and customer satisfaction.

Uploaded by

Elifyose Bigboss
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)
7 views50 pages

Basics of Software Engineering (5)

The document outlines a course on Basics of Software Engineering taught by Dr. Paul J., detailing the course structure, assessment methods, and key principles of software engineering. It covers essential topics such as software development processes, testing, and maintenance, emphasizing the importance of systematic approaches to create high-quality software. Additionally, it discusses the roles and responsibilities of software engineers, including requirement analysis, design, and testing, along with the significance of software testing in ensuring reliability and customer satisfaction.

Uploaded by

Elifyose Bigboss
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/ 50

COLLEGE OF BUSINESS EDUCATION

T
AF
BASICS OF SOFTWARE ENGINEERING
DR
LECTURER: Paul, J.

April 2, 2025

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 1 / 50


COURSE DESCRIPTION

• Lectures
• Group Assignment + Practical :15 Marks

T
• Individual Ass. :5 Marks
• Attendance :5 Marks

AF
• Quiz 1 :2.5 Marks
• Test 1 :5 Marks
DR
• Quiz 2 :2.5 Marks
• Test 2 :5 Marks
• Continuous Assessment (40%)
• Semester Examination (60%)

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 2 / 50


Course Outline

1 Introduction to Software Engineering

T
2 Software development processes

AF
3 Agile Software development
4 Requirements engineering
5 System modeling
DR
6 Software testing

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 3 / 50


LECTURE 1 (17/03/2025)
INTRODUCTION
The term software engineering is the product of two words Software, and
Engineering.
Software: is a collection of integrated programs; carefully-organized

T
instructions and code written by developers on any of various particular
computer languages.

AF
Engineering: is the application of scientific and practical knowledge
to invent, design, build, maintain, and improve frameworks, processes, etc.
Or
DR
Engineering on the other hand, is all about developing products, using
well-defined, scientific principles and methods.
Therefore: Software Engineering provides a standard procedure to design
and develop software.
IEEE (Institute of Electrical and Electronic Engineering) defines software
engineering as: The application of a systematic, disciplined, quantifiable
approach to the development, operation and maintenance of software.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 4 / 50
What is 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,

T
design, testing, and maintenance.
Software Engineering = Designing + Developing + Testing + Maintaining

AF
Software.
Software Product
DR

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 5 / 50


⊛ Software engineering includes a variety of techniques, tools, and
methodologies, including requirements analysis, design, testing, and
maintenance.
⊛ It is a rapidly evolving field, and new tools and technologies are
constantly being developed to improve the software development
process.

T
⊛ By following the principles of software engineering and using the
appropriate tools and methodologies, software developers can create

AF
high-quality, reliable, and maintainable software that meets the needs
of its users.
⊛ Software Engineering is mainly used for large projects based on
DR
software systems rather than single programs or applications.
⊛ The main goal of Software Engineering is to develop software
applications for improving quality, budget, and time efficiency.
⊛ Software Engineering ensures that the software that has to be built
should be consistent, correct, also on budget, on time, and within the
required requirements.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 6 / 50
Key Principles of Software Engineering
⊙ Modularity: Breaking the software into smaller, reusable components
that can be developed and tested independently.
⊙ Abstraction: Hiding the implementation details of a component and
exposing only the necessary functionality to other parts of the

T
software.
⊙ Encapsulation: Wrapping up the data and functions of an object

AF
into a single unit, and protecting the internal state of an object from
external modifications.
⊙ Reusability: Creating components that can be used in multiple
DR
projects, which can save time and resources.
⊙ Maintenance: Regularly updating and improving the software to fix
bugs, add new features, and address security vulnerabilities.
⊙ Testing: Verifying that the software meets its requirements and is
free of bugs.
⊙ Design Patterns: Solving recurring problems in software design by
providing templates for solving them.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 7 / 50
Key Principles of Software Engineering, Cont...

T
⊙ Agile methodologies: Using iterative and incremental development
processes that focus on customer satisfaction, rapid delivery, and

AF
flexibility.
⊙ Continuous Integration & Deployment: Continuously integrating
the code changes and deploying them into the production
DR
environment.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 8 / 50


Main Attributes of Software Engineering

Software Engineering is a systematic, disciplined, quantifiable study and


approach to the design, development, operation, and maintenance of a
software system. There are four main Attributes of Software Engineering.

T
1 Efficiency: It provides a measure of the resource requirement of a

AF
software product efficiently.
2 Reliability: It assures that the product will deliver the same results
when used in similar working environment.
DR
3 Reusability: This attribute makes sure that the module can be used
in multiple applications.
4 Maintainability: It is the ability of the software to be modified,
repaired, or enhanced easily with changing requirements.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 9 / 50


Dual Role of Software

There is a dual role of software in the industry. The first one is as a


product and the other one is as a vehicle for delivering the product. We
will discuss both of them.

T
1 As a Product

AF
• It delivers computing potential across networks of Hardware.
• It enables the Hardware to deliver the expected functionality.
• It acts as an information transformer because it produces, manages,
acquires, modifies, displays, or transmits information.
DR
2 As a vehicle for delivering a product
• It provides system functionality (e.g., payroll system).
• It controls other software (e.g., an operating system).
• It helps build other software (e.g., software tools).

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 10 / 50


Objectives of Software Engineering
⊚ Maintainability: It should be feasible for the software to evolve to
meet changing requirements.
⊚ Efficiency: The software should not make wasteful use of computing
devices such as memory, processor cycles, etc.

T
⊚ Correctness: A software product is correct if the different requirements
specified in the SRS Document have been correctly implemented.

AF
⊚ Reusability: A software product has good reusability if the different
modules of the product can easily be reused to develop new products.
DR
⊚ Testability: Here software facilitates both the establishment of test
criteria and the evaluation of the software concerning those criteria.
⊚ Reliability: It is an attribute of software quality. The extent to which
a program can be expected to perform its desired function, over an
arbitrary time period.
⊚ Portability: In this case, the software can be transferred from one
computer system or environment to another.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 11 / 50
Objectives of Software Engineering, Cont...

T
⊚ Adaptability: In this case, the software allows differing system
constraints and the user needs to be satisfied by making changes to

AF
the software.
⊚ Interoperability: Capability of 2 or more functional units to process
data cooperatively.
DR

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 12 / 50


What Careers Are There in Software Engineering?
A degree in software engineering and relevant experience can be utilized to
explore several computing job choices. Software engineers have the
opportunity to seek well-paying careers and professional progress, although
their exact possibilities may vary depending on their particular school,
industry, and region.

T
Following are the job choices in software engineering:

AF
⋄ SWE (Software Engineer)
⋄ SDE ( Software Development Engineer)
⋄ Web Developer
DR
⋄ Quality Assurance Engineer
⋄ Web Designer
⋄ Software Test Engineer
⋄ Cloud Engineer ·
⋄ Front-End Developer
⋄ Back-End Developer
⋄ DevOps Engineer.
⋄ Security Engineer.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 13 / 50
What Tasks do Software Engineers do?

The main responsibility of a software engineer is to develop useful


computer programs and applications. Working in teams, you would

T
complete various projects and develop solutions to satisfy certain customer
or corporate demands.

AF
Some of the key responsibilities of software engineer are:
1 Requirement Analysis
2 Testing and Debugging
DR
3 Code Review
4 Maintenance
5 Documentation

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 14 / 50


LECTURE 2 (24/03/2025)

∗ Requirement Analysis: Collaborating with stakeholders to


understand and gather the requirements to design and develop
software solutions. Software requirement means requirement that is

T
needed by software to increase quality of software product. These

AF
requirements are generally a type of expectation of user from software
product that is important and need to be fulfilled by software.
Analysis means to examine something in an organized and specific
manner to know complete details about it.
DR
Therefore, Software requirement analysis simply means complete
study, analyzing, describing software requirements so that
requirements that are genuine and needed can be fulfilled to solve
problem.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 15 / 50


There are several activities involved in analyzing Software requirements.
Some of them are given below :

T
AF
DR

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 16 / 50


⊗ Problem Recognition: The main aim of requirement analysis is to
fully understand main objective of requirement that includes why it is
needed, does it add value to product, will it be beneficial, does it
increase quality of the project, does it will have any other effect. All
these points are fully recognized in problem recognition so that
requirements that are essential can be fulfilled to solve business
problems.

T
⊗ Evaluation and Synthesis: Evaluation means judgement about
something whether it is worth or not and synthesis means to create or

AF
form something. Here are some tasks are given that is important in
the evaluation and synthesis of software requirement:
• To define all functions of software that necessary.
DR
• To define all data objects that are present externally and are easily
observable.
• To evaluate that flow of data is worth or not.
• To fully understand overall behavior of system that means overall
working of system.
• To identify and discover constraints that are designed.
• To define and establish character of system interface to fully
understand how system interacts with two or more components or with
one another.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 17 / 50
⊗ Modeling :
After complete gathering of information from above tasks, functional
and behavioral models are established after checking function and
behavior of system using a domain model that also known as the
conceptual model.

T
⊗ Specification :
The software requirement specification (SRS) which means to specify

AF
the requirement whether it is functional or non-functional should be
developed.
⊗ Review :
DR
After developing the SRS, it must be reviewed to check whether it
can be improved or not and must be refined to make it better and
increase the quality.
The software requirement specification (SRS) will be discussed
later

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 18 / 50


∗ Design and Development: Creating well-structured, maintainable
code that meets the functional requirements and adheres to software
design principles.
∗ Testing and Debugging: Writing and conducting unit tests,
integration tests, and debugging code to ensure software is reliable
and bug-free.

T
What is Software Testing?
Software testing is an important process in the software development

AF
lifecycle. It involves verifying and validating that a software application is
free of bugs, meets the technical requirements set by its design and
development, and satisfies user requirements efficiently and effectively.
DR
This process ensures that the application can handle all exceptional and
boundary cases, providing a robust and reliable user experience. By
systematically identifying and fixing issues, software testing helps deliver
high-quality software that performs as expected in various scenarios. The
process of software testing aims not only at finding faults in the existing
software but also at finding measures to improve the software in terms of
efficiency, accuracy, and usability.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 19 / 50
What is Software Testing?

Software Testing is a method to assess the functionality of the software


program. The process checks whether the actual software matches the
expected requirements and ensures the software is bug-free. The purpose
of software testing is to identify the errors, faults, or missing requirements

T
in contrast to actual requirements. It mainly aims at measuring the
specification, functionality, and performance of a software program or

AF
application.
Two Steps in Software Testing
DR
◦ Verification: It refers to the set of tasks that ensure that the
software correctly implements a specific function. It means “Are we
building the product right?”.
◦ Validation: It refers to a different set of tasks that ensure that the
software that has been built is traceable to customer requirements. It
means “Are we building the right product?”.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 20 / 50


Importance of Software Testing
⋆ Defects can be Identified Early: Software testing is important
because if there are any bugs they can be identified early and can be
fixed before the delivery of the software.
⋆ Improves Quality of Software: Software Testing uncovers the

T
defects in the software, and fixing them improves the quality of the
software.

AF
⋆ Increased Customer Satisfaction: Software testing ensures
reliability, security, and high performance which results in saving time,
costs, and customer satisfaction.
DR
⋆ Helps with Scalability: Software testing type non-functional testing
helps to identify the scalability issues and the point where an
application might stop working.
⋆ Saves Time and Money: After the application is launched it will be
very difficult to trace and resolve the issues, as performing this
activity will incur more costs and time. Thus, it is better to conduct
software testing at regular intervals during software development.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 21 / 50
Need for Software Testing
Software bugs can cause potential monetary and human loss. There are
many examples in history that clearly depicts that without the testing
phase in software development lot of damage was incurred. Below are
some examples:

T
◦ 1985: Canada’s Therac-25 radiation therapy malfunctioned due to a
software bug and resulted in lethal radiation doses to patients leaving

AF
3 injured and 3 people dead.
◦ 1994: China Airlines Airbus A300 crashed due to a software bug
killing 264 people.
DR
◦ 1996: A software bug caused U.S. bank accounts of 823 customers to
be credited with 920 million US dollars.
◦ 1999: A software bug caused the failure of a $1.2 billion military
satellite launch.
◦ 2015: A software bug in fighter plan F-35 resulted in making it
unable to detect targets correctly.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 22 / 50
◦ 2015: Bloomberg terminal in London crashed due to a software bug
affecting 300,000 traders on the financial market and forcing the

T
government to postpone the 3bn pound debt sale. Starbucks was
forced to close more than 60% of its outlet in the U.S. and Canada

AF
due to a software failure in its POS system.
◦ Nissan cars were forced to recall 1 million cars from the market due to
a software failure in the car’s airbag sensory detectors.
DR

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 23 / 50


Different Types Of Software Testing
Explore diverse software testing methods including manual and automated
testing for improved quality assurance. Enhance software reliability and
performance through functional and non-functional testing, ensuring user
satisfaction. Learn about the significance of various testing approaches for
robust software development. Software Testing can be broadly classified

T
into 3 types:

AF
1 Functional Testing: It is a type of software testing that validates the
software systems against the functional requirements. It is performed
to check whether the application is working as per the software’s
DR
functional requirements or not. Various types of functional testing are
Unit testing, Integration testing, System testing, Smoke testing, and
so on.
2 Non-Functional Testing: It is a type of software testing that checks
the application for non-functional requirements like performance,
scalability, portability, stress, etc. Various types of non-functional
testing are Performance testing, Stress testing, Usability Testing, and
so on.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 24 / 50
3 Maintenance Testing: It is the process of changing, modifying, and
updating the software to keep up with the customer’s needs. It
involves regression testing that verifies that recent changes to the
code have not adversely affected other previously working parts of the
software.
Apart from the above classification software testing can be further divided
into 2 more ways of testing:

T
⋇ Manual Testing: It includes testing software manually, i.e., without
using any automation tool or script. In this type, the tester takes over

AF
the role of an end-user and tests the software to identify any
unexpected behavior or bug. There are different stages for manual
testing such as unit testing, integration testing, system testing, and
DR
user acceptance testing. Testers use test plans, test cases, or test
scenarios to test software to ensure the completeness of testing.
Manual testing also includes exploratory testing, as testers explore the
software to identify errors in it.
⋇ Automation Testing: It is also known as Test Automation, is when
the tester writes scripts and uses another software to test the
product. This process involves the automation of a manual process.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 25 / 50
⋇ Automation Testing: It is also known as Test Automation, is when
the tester writes scripts and uses another software to test the
product. This process involves the automation of a manual process.
Automation Testing is used to re-run the test scenarios quickly and
repeatedly, that were performed manually in manual testing.
Different Types of Software Testing Techniques

T
· Black box Testing: Testing in which the tester doesn’t have access

AF
to the source code of the software and is conducted at the software
interface without any concern with the internal logical structure of
the software known as black-box testing.
DR
· White box Testing: Testing in which the tester is aware of the
internal workings of the product, has access to its source code, and is
conducted by making sure that all internal operations are performed
according to the specifications is known as white box testing.
· Grey Box Testing: Testing in which the testers should have
knowledge of implementation, however, they need not be experts.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 26 / 50


Different Levels of Software Testing

⊖ Unit Testing: It a level of the software testing process where individual


units/components of a software/system are tested. The purpose is to
validate that each unit of the software performs as designed.
⊖ Integration Testing: It is a level of the software testing process where

T
individual units are combined and tested as a group. The purpose of
this level of testing is to expose faults in the interaction between

AF
integrated units.
⊖ System Testing: It is a level of the software testing process where a
complete, integrated system/software is tested. The purpose of this
DR
test is to evaluate the system’s compliance with the specified
requirements.
⊖ Acceptance Testing: It is a level of the software testing process where
a system is tested for acceptability. The purpose of this test is to
evaluate the system’s compliance with the business requirements and
assess whether it is acceptable for delivery.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 27 / 50
Best Practices for Software Testing
∗ Continuous Testing: Project teams test each build as it becomes
available thus it enables software to be validated in real environments
earlier in the development cycle, reducing risks and improving the
functionality and design.
∗ Involve Users: It is very important for the developers to involve users

T
in the process and open-ended questions about the functionality

AF
required in the application. This will help to develop and test the
software from the customer’s perspective.
∗ Divide Tests into Smaller Parts: Dividing tests into smaller
DR
fractions save time and other resources in environments where
frequent testing needs to be conducted. This also helps teams to
make better analyses of the tests and the test results.
∗ Metrics and Reporting: Reporting enables the team members to
share goals and test results. Advanced tools integrate the project
metrics and present an integrated report in the dashboard that can be
easily reviewed by the team members to see the overall health of the
project.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 28 / 50
∗ Don’t Skip Regression Testing: Regression testing is one of the
most important steps as it encourages the validation of the
application. Thus, it should not be skipped.
∗ Programmers Should Avoid Writing Tests: Test cases are usually

T
written before the start of the coding phase so it is considered a best
practice for programmers to avoid writing test cases as they can be

AF
biased towards their code and the application.
∗ Service Virtualization: Service virtualization simulates the systems
and services that are not yet developed or are missing. Thus, enabling
DR
teams to reduce dependency and start the testing process sooner.
They can modify, and reuse the configuration to test different
scenarios without having to alter the original environment.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 29 / 50


Benefits of Software Testing

⋆ Product Quality: Testing ensures the delivery of a high-quality


product as the errors are discovered and fixed early in the
development cycle.
⋆ Customer Satisfaction: Software testing aims to detect the errors or

T
vulnerabilities in the software early in the development phase so that
the detected bugs can be fixed before the delivery of the product.

AF
Usability testing is a type of software testing that checks the
application for how easily usable it is for the users to use the
application.
DR
⋆ Cost-Effective: Testing any project on time helps to save money and
time for the long term. If the bugs are caught in the early phases of
software testing, it costs less to fix those errors.
⋆ Security: Security testing is a type of software testing that is focused
on testing the application for security vulnerabilities from internal or
external sources.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 30 / 50
What is Debugging in Software Engineering?
Debugging in Software Engineering is the process of identifying and
resolving errors or bugs in a software system. It’s a critical aspect of
software development, ensuring quality, performance, and user satisfaction.
Despite being time-consuming, effective debugging is essential for reliable
and competitive software products.

T
AF
DR

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 31 / 50


Process of Debugging

Debugging is a crucial skill in programming. Here’s a simple, step-by-step


explanation to help you understand and execute the debugging process
effectively:

T
AF
DR

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 32 / 50


⊙ Step 1: Reproduce the Bug
· To start, you need to recreate the conditions that caused the bug. This
means making the error happen again so you can see it firsthand.
· Seeing the bug in action helps you understand the problem better and
gather important details for fixing it.
⊙ Step 2: Locate the Bug
· Next, find where the bug is in your code. This involves looking closely
at your code and checking any error messages or logs.

T
· Developers often use debugging tools to help with this step.
Step 3: Identify the Root Cause

AF

· Now, figure out why the bug happened. Examine the logic and flow of
your code and see how different parts interact under the conditions
that caused the bug.
DR
· This helps you understand what went wrong.
⊙ Step 4: Fix the Bug
· Once you know the cause, fix the code. This involves making changes
and then testing the program to ensure the bug is gone.
· Sometimes, you might need to try several times, as initial fixes might
not work or could create new issues.
· Using a version control system helps track changes and undo any that
don’t solve the problem.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 33 / 50
⊙ Step 5: Test the Fix
· Unit Tests: Check the specific part of the code that was changed.
· Integration Tests: Verify the entire module where the bug was found.
· System Tests: Test the whole system to ensure overall functionality.
· Regression Tests: Make sure the fix didn’t cause any new problems
elsewhere in the application.
⊙ Step 6: Document the Process

T
· Finally, record what you did. Write down what caused the bug, how
you fixed it, and any other important details.

AF
· This documentation is helpful if similar issues occur in the future.

Why is debugging important?


Fixing mistakes in computer programming, known as bugs or errors, is
DR
necessary because programming deals with abstract ideas and concepts.
Computers understand machine language, but we use programming
languages to make it easier for people to talk to computers. Software has
many layers of abstraction, meaning different parts must work together for
an application to function properly. When errors happen, finding and fixing
them can be tricky. That’s where debugging tools and strategies come in
handy. They help solve problems faster, making developers more efficient.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 34 / 50
Debugging Approaches/Strategies
⋆ Brute Force: Study the system for a longer duration to understand
the system. It helps the debugger to construct different
representations of systems to be debugged depending on the need. A
study of the system is also done actively to find recent changes made
to the software.

T
⋆ Backtracking: Backward analysis of the problem which involves

AF
tracing the program backward from the location of the failure
message to identify the region of faulty code. A detailed study of the
region is conducted to find the cause of defects.
DR
⋆ Forward analysis of the program involves tracing the program
forwards using breakpoints or print statements at different points in
the program and studying the results. The region where the wrong
outputs are obtained is the region that needs to be focused on to find
the defect.
⋆ Using A debugging experience with the software debug the
software with similar problems in nature. The success of this
approach depends on the expertise of the debugger.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 35 / 50
Debugging Approaches/Strategies, Cont...
⋆ Cause elimination: it introduces the concept of binary partitioning.
Data related to the error occurrence are organized to isolate potential
causes.
⋆ Static analysis: Analyzing the code without executing it to identify
potential bugs or errors. This approach involves analyzing code

T
syntax, data flow, and control flow.

AF
⋆ Dynamic analysis: Executing the code and analyzing its behavior at
runtime to identify errors or bugs. This approach involves techniques
like runtime debugging and profiling.
DR
⋆ Collaborative debugging: Involves multiple developers working
together to debug a system. This approach is helpful in situations
where multiple modules or components are involved, and the root
cause of the error is not clear.
⋆ Logging and Tracing: Using logging and tracing tools to identify the
sequence of events leading up to the error. This approach involves
collecting and analyzing logs and traces generated by the system
during its execution.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 36 / 50
Debugging Approaches/Strategies, Cont...

⋆ Automated Debugging: The use of automated tools and techniques


to assist in the debugging process. These tools can include static and
dynamic analysis tools, as well as tools that use machine learning and
artificial intelligence to identify errors and suggest fixes.

T
Examples of error during debugging
⋄ Syntax error

AF
⋄ Logical error
⋄ Runtime error
⋄ Stack overflow
DR
⋄ Index Out of Bound Errors
⋄ Infinite loops
⋄ Concurrency Issues
⋄ I/O errors
⋄ Environment Dependencies
⋄ Integration Errors
⋄ Reference error
⋄ Type error

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 37 / 50


Debugging Tools
Debugging tools are essential for software development, helping developers
locate and fix coding errors efficiently. With the rapid growth of software
applications, the demand for advanced debugging tools has increased
significantly. Companies are investing heavily in these tools, and
researchers are developing innovative solutions to enhance debugging

T
capabilities, including AI-driven debuggers and autonomous debugging for

AF
specialized applications. These are the debugging tools:
DR

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 38 / 50


Debugging tools vary in their functionalities, but they generally provide
command-line interfaces to help developers identify and resolve issues.
Many also offer remote debugging features and tutorials, making them
accessible to beginners.
⊖ Integrated Development Environments (IDEs):
IDEs like Visual Studio, Eclipse, and PyCharm offer features for
software development, including built-in debugging tools. These tools

T
allow developers to:
• Execute code line-by-line (step debugging)

AF
• Stop program execution at specific points (breakpoints)
• Examine the state of variables and memory
⊖ Standalone Debuggers:
Standalone debuggers like GDB (GNU Debugger) provide advanced
DR
debugging features:
• Conditional breakpoints and watchpoints
• Reverse debugging (running a program backwards)
⊖ Logging Utilities:
Logging utilities log a program’s state at various points in the code,
which can then be analyzed to find problems. Logging is particularly
useful for debugging issues that only occur in production
environments.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 39 / 50
⊖ Static Code Analyzers:
Static code analysis tools examine code without executing it to find
potential errors and deviations from coding standards. They focus on
the semantics of the source code, helping developers catch common
mistakes and maintain consistent coding styles.

T
⊖ Dynamic Analysis Tools:
Dynamic analysis tools monitor software as it runs to detect issues

AF
like resource leaks or concurrency problems. These tools help catch
bugs that static analysis might miss, such as memory leaks or buffer
overflows.
DR
⊖ Performance Profilers:
Performance profilers help developers identify performance
bottlenecks in their code. They measure:
• CPU usage
• Memory usage
• I/O operations

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 40 / 50


Difference Between Debugging and Testing

T
Debugging is different from testing. Testing focuses on finding bugs,
errors, etc whereas debugging starts after a bug has been identified in the

AF
software. Testing is used to ensure that the program is correct and it was
supposed to do with a certain minimum success rate. Testing can be
manual or automated. There are several different types of testing unit
DR
testing, integration testing, alpha, and beta testing, etc.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 41 / 50


Advantages of Debugging
⊕ Improved system quality: By identifying and resolving bugs, a
software system can be made more reliable and efficient, resulting in
improved overall quality.
⊕ Reduced system downtime: By identifying and resolving bugs, a

T
software system can be made more stable and less likely to experience
downtime, which can result in improved availability for users.

AF
⊕ Increased user satisfaction: By identifying and resolving bugs, a
software system can be made more user-friendly and better able to
meet the needs of users, which can result in increased satisfaction.
DR
⊕ Reduced development costs: Identifying and resolving bugs early in
the development process, can save time and resources that would
otherwise be spent on fixing bugs later in the development process or
after the system has been deployed.
⊕ Increased security: By identifying and resolving bugs that could be
exploited by attackers, a software system can be made more secure,
reducing the risk of security breaches.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 42 / 50
Advantages of Debugging, Cont...

⊕ Facilitates change: With debugging, it becomes easy to make


changes to the software as it becomes easy to identify and fix bugs

T
that would have been caused by the changes.
Better understanding of the system: Debugging can help

AF

developers gain a better understanding of how a software system
works, and how different components of the system interact with one
another.
DR
⊕ Facilitates testing: By identifying and resolving bugs, it makes it
easier to test the software and ensure that it meets the requirements
and specifications.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 43 / 50


Disadvantages of Debugging
⊗ Time-consuming: Debugging can be a time-consuming process,
especially if the bug is difficult to find or reproduce. This can cause
delays in the development process and add to the overall cost of the
project.

T
⊗ Requires specialized skills: Debugging can be a complex task that
requires specialized skills and knowledge. This can be a challenge for

AF
developers who are not familiar with the tools and techniques used in
debugging.
⊗ Can be difficult to reproduce: Some bugs may be difficult to
DR
reproduce, which can make it challenging to identify and resolve them.
⊗ Can be difficult to diagnose: Some bugs may be caused by
interactions between different components of a software system, which
can make it challenging to identify the root cause of the problem.
⊗ Can be difficult to fix: Some bugs may be caused by fundamental
design flaws or architecture issues, which can be difficult or impossible
to fix without significant changes to the software system.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 44 / 50
Disadvantages of Debugging, Cont...

T
⊗ Limited insight: In some cases, debugging tools can only provide
limited insight into the problem and may not provide enough

AF
information to identify the root cause of the problem.
⊗ Can be expensive: Debugging can be an expensive process,
especially if it requires additional resources such as specialized
DR
debugging tools or additional development time.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 45 / 50


∗ Code Review: Participating in code reviews to improve code quality,
ensure adherence to standards, and facilitate knowledge sharing
among team members.
Best 5 Practices For Code Review
Software Development Process refers to implementing the design and

T
operations of software, this process takes place which ultimately delivers
the best product. Do several questions arise after this process like whether

AF
the code is secure? Is it well-designed? Is the code free of error? As per
the survey, on average programmers make a mistake once at every five
lines of the code. To rectify these bugs Code Review comes into the
DR
picture. Reviewing a code typically means checking whether the code
passes the test cases, has bugs, repeated lines, and various possible errors
which could reduce the efficiency and quality of the software. Reviews can
be good and bad as well. Good ones lead to more usage, growth, and
popularity of the software whereas bad ones degrade the quality of
software.

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 46 / 50


1 Split the Code into Sections
For web development, several files and folders are incorporated. All
the files contain thousands of lines of code. When you start reviewing
them, this might look dense and confusing. So, the first step of code
review must be splitting the code into sections. This will make a clear
understanding of the code flow.
Suppose, there are 9 folders and each folder contains 5 files. Divide

T
them into sections. Set a goal to review at least 5 files of the first
folder in n no of days and once you complete reviewing it, go for the

AF
next folder. Like this, when you assign yourself a task for some time,
you’ll get sufficient time to review, and thus, you will not feel bored
or disinterested.
DR
2 Ask Fellow Developers to Review
This is the second step of the code review process. You must seek
advice or help from fellow developers as everyone’s contribution is
equally important. Experienced ones can identify the mistakes within
a second and rectify them but the young minds come up with more
simple ways to implement a task. So, ask your juniors as they have
the curiosity to learn more.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 47 / 50
3 Basic Principles: Naming Conventions, Usage of libraries,
Responsiveness
There are some principles and standards to follow while writing code.
There has to be followed to enhance the effectiveness and
productivity. Make a note of those principles and check one-by-one
whether they are followed or not.

T
4 Check For the Reusability of Code
Functions are reusable blocks of code. A piece of code that does a

AF
single task that can be called whenever required. Avoid repetition of
codes. Check if you’ve to repeat code for different tasks, again and
again, so there you can use these functions to reduce the repeatability
DR
of code.
5 Check Test Cases and Re-Build
This is the final step of the code review process. When you have
rectified all the possible errors while reviewing, check if all the test
cases are passed, all the conditions are satisfied. There are various
tests such as functionality, usability, interface, performance, and
security testing.
LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 48 / 50
Individual Assignment
1 By Using software design techniques in software development process
∗ Explain characteristics of good software design.
∗ Identify items developed during the design phase.

T
∗ Explain Process/Function Oriented design approach.
Explain Data Flow Diagrams (DFDs) and its importance.

AF

∗ Use DFD in software design.


∗ Explain the shortcomings of DFDs.
DR
∗ Use flow charts in software design.
∗ Differentiate between flow chart and DFD

Start date: 2nd April, 2025


Submission date: 28th April, 2025

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 49 / 50


Group Assignment
1 By considering the concept of UML in Software development process:

∗ What are the UML tools to design the system?

T
∗ Describe the concept of CASE tools in Software Engineering.

AF
∗ Show in detail how to apply ”Use Case” diagrams.

∗ Show in detail how to apply ”CLASS” diagrams.


DR
∗ Show in detail how to apply ”Sequence” diagrams.

∗ Show in detail how to apply ”Activity” diagrams

Start date: 2nd April, 2025


Submission date: 28th April, 2025

LECTURER: Paul, J. BASICS OF SOFTWARE ENGINEERING April 2, 2025 50 / 50

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy