CSC 501 Lecture Note 2023
CSC 501 Lecture Note 2023
Course Description:
Software Engineering is a three credit unit course for
fifth (final) year first degree students in core computer
science discipline that intimates the students with the
concepts of Software development, process models,
requirements and specifications. It explains the design
methodologies available such as object oriented,
component-based, knowledge-based, experimental,
Agent-based, Formal methods and prototyping. The
various data, process and flow design methodologies
as applicable to software design are explored. It
exposes the students on the essence and methods of
carrying out testing, quality assurance, test automation
and maintenance on a software after design.
Course Objectives:
At the end of this course, the students should be able to answer
the following questions:
COURSE OUTLINE
Software Development Process Models, Software Requirements
specifications. Design Methodologies: Object oriented,
component-based, knowledge-based, experimental, Agent-based,
Formal methods, prototyping. Data process and flow design
methodologies. Software metrics: Testing and quality assurance,
Software test automation, Software maintenance; IEEE and other
software standards. Software project management CASE tools;
case studies and software design mini-projects for planning,
control, communication, embedded systems, Internet, and agent-
based applications.
Recommended Text books:
i. Software Engineering : New Age International by K.K.
Aggarwal and Yogesh Singh
ii. An Integrated Approach to Software Engineering,
second edition, by Pankaj Jalote.
iii. Software engineering by Ian Somerville.
4
LECTURE ONE
Module 1
1.1 INTRODUCTION:
What is software Engineering and why is software
development said to be an engineering process?
As a way of introduction, it is important that we understand
what software engineering is and why software development
is likened (called) an engineering process.
● Software engineering is the establishment and use of
sound engineering principles in order to develop
software that is economical, functional, reliable and
that can work efficiently on real machines/computer
systems. (what are these engineering principles)?
● Software engineering can also be said to be the
application of a systematic, disciplined,
quantifiable approach to the development,
deployment, operation and maintenance of
software / an application
● Software development is said to be an engineering
process because it involves generic (progressive)
developmental phases (ie the engineering
principles) which start from
Requirement specification—> Design—>
Implementation--🡪Testing/Verification—
>deployment—>Documentation -🡪
Maintenance
just like any other engineering process. It is this
generic nature of software development that
makes it an engineering process is as shown in
the diagram below:
5
Exercise 1
1.)Outline these difference between software development
lifecycle and software development processes with specific
examples.
8
LECTURE MODULE 3
Software Development Methodology
That is to say:
In software engineering, software design methodology can be
● a framework
● or an approach
11
Sof
tware Development Methodology as an Approach
● Scrum
● Component-based methodology
● knowledge-based methodology
● Experimental methodology
● Agent-based methodology
● Formal methods
● Prototyping
● Extreme programming
functional components.
● Scrum
● Extreme programming
● Adaptive Software Development (ASD)
● Dynamic System Development Method (DSDM)
Note:
A good software project should be developed on time , within
budget and to the satisfaction of the customers irrespective of the
approach.
In the course of this lecture we are to consider the following
methodologies:
i) Object oriented methodology
ii) Component-based methodology
18
Objects in this context are real life things like cars, humans, trees
houses etc.
Paradigm means a model, example, architype, prototype of
something
Object oriented paradigm therefore means modelling based on
objects only
In OOP ,the following terms are frequently used:
● properties
● methods
● events
● classes
● instances
19
Eg,
In the above image, there are three instances: polo, mini , and
beetle .
The Object Model depicts the object class and their relationships
as a class diagram, which represents the static structure of the
system. It observes all the objects as static and does not pay any
attention to their dynamic nature.
Principles of OOP
26
KNOWLEDGE-BASED METHODOLOGY
What is knowledge base?
A knowledge base is just o repository or library of information
about something like product, a topic, depart,
organization…anything at all that is designed to provide self
served help… this is to free up users time which often is better
used in challenging and complex scenarios.
Knowledge based methodology or knowledge based
engineering is simply the application of knowledge based systems
technology in the design of software products.
In Summary
● A knowledge-based systems (KBS) capture the knowledge
of human experts to support decision-making.
● They exhibit a kind of intelligence called artificial
intelligence.
● Examples of knowledge-based systems include expert
systems, which are so called because of their reliance on
human expertise.
Assignment
1What is component based system. What are components
in this context.
2. Define component models.
3. What are advantages of CBM over OOM
4. Discuss the different component based systems.
Experimental-based methodology
Experimental software engineering all about
● gathering evidence (data) through measurements and
experiments needed when developing software
33
systems.
● This evidence / data is used as basis of theories about
the processes involved in software engineering.
● Fully documented
● Thoroughly tested
● Robust—has comprehensive input validity
checking technique
● Able to pass back appropriate error messages
or return codes
● Designed with the awareness that it put to
unforeseen uses.
reuse.
● It emerged from the failure of object-oriented development
to support effective reuse.
● In object oriented development single object classes are too
detailed and specific.
● But Components are more abstract than object classes and
can be considered to be standalone service providers.
● Apart from the benefits of reuse, CBSE is based on sound
software engineering design principles:
● Components are independent so do not interfere with each
other; Component implementations are hidden.
● Communication is through well-defined interfaces.
● Component platforms are shared and reduce development
costs.
● Components are language independent.
Prototyping Methodology
The Prototyping Model is a systems development method in
which a prototype (an approximation of a final system or
product) is built, tested, and then reworked as necessary until an
acceptable prototype is finally achieved from which the complete
system or product can now be developed.
● Software prototype is simulated version of the intended
39
software product.
● Prototype provides initial look and feel of the software
product and simulates few aspect of actual product.
● This model works best in scenarios where not all of the
project requirements are known in detail ahead of time.
● It is an iterative, trial-and-error process that involves
both the developers and the users.
There are several steps in the Prototyping Model:
● The new system requirements are defined in as much detail
as possible. This usually involves interviewing a number of
users representing all the departments or aspects of the
existing system.
● A preliminary design is created for the new system.
● A first prototype of the new system is constructed from the
preliminary design. This is usually a scaled-down system,
and represents an approximation of the characteristics of the
final product.
● The users thoroughly evaluate the first prototype, noting
its strengths and weaknesses, what needs to be added, and
what should to be removed. The developer collects and
analyzes the remarks from the users.
● The first prototype is modified, based on the comments
supplied by the users, and a second prototype of the new
system is constructed.
● The second prototype is evaluated in the same manner as
was the first prototype.
● The preceding steps are iterated/ repeated as many times as
necessary, until the users are satisfied that the prototype
represents the final product desired.
● The final system is constructed, based on the final
prototype.
● The final system is thoroughly evaluated and tested.
40
LECTURE MODULE 5
DATA PROCESS AND FLOW DESIGN
METHODOLOGIES
Fig (a)
Fig (b)
2. Difference in Presentation
DFD models show detailed flow of information, whereas ERD
models presents show the relationships among entities.
module.
● Condition - It is represented by small diamond at the base
of module. It depicts that control module can select any of
47
module.
● Loop - A curved arrow represents loop in the module. All
sub-modules covered by loop repeat execution of module.
48
Enter Student_Name
SEEK Student_Name in Student Class List_DB file
IF Student_Name found THEN
Call procedure USER_PASSWORD_AUTHENTICATE()
ELSE
PRINT error message
Call procedure NEW_STUDENT_REQUEST()
ENDIF
Note:
5.6 Pseudo-Code
● Pseudo code is written more close to programming
language.
● Data Flow
● Data Structure
● Data Elements
● Data Stores
● Data Processing
SOFTWARE METRICS
The word 'metrics' refer to
● standards for measurements.
● Software Quality Metrics means measurement of attributes,
pertaining to software quality along with its process of
development.
● software quality metrics means measuring the software
qualities by recording the number of defects or security
loopholes present in the software.
software tools.
CASE Tools CASE tools are set of software application
programs, which are used to automate SDLC activities.
CASE tools are used by software project managers, analysts and
engineers to develop software system. There are number of CASE
tools available to simplify various stages of Software
Development Life Cycle such as Analysis tools, Design tools,
Project management tools, Database Management tools,
Documentation tools are to name a few. Use of CASE tools
accelerates the development of project to produce desired result
and helps to uncover flaws before moving ahead with next stage
in software development.
Components of CASE Tools: CASE tools can be broadly
divided into the following parts based on their use at a particular
SDLC stage:
Central Repository - CASE tools require a central repository,
which can serve as a source of common, integrated and consistent
information. Central repository is a central place of storage where
product specifications, requirement documents, related reports
and diagrams, other useful information regarding management is
stored. Central repository also serves as data dictionary.
9. Management by metrics
10. Evaluation of methods and tools
Software measurement is a diverse collection of these activities
that range from models predicting software project costs at a
specific stage to measures of program structure.
QA goes through the whole product life cycle (SDLC) and heads
the process of software maintenance.
Software Testing is a way of exploring the system to check how
it operates and find the possible defects. Various methods are
used to test the product, locate bugs and check if they are fixed.
Testing enables customers with the possibility to see if the
developed product meets their expectations on its design,
compatibility, functioning, etc.
testing process description
Despite the fact that software testing works out ways to break the
software (aiming to check the system), it is a complex and crucial
process. Testing is product-oriented, time-limited and reports to
QC process.
63
assurance person must have software coding ability, since the test
cases are written in the form of source code which, when run,
produce output according to the assertions that are a part of it.
Some test automation tools allow for test authoring to be done by
keywords instead of coding, which do not require programming.
One way to generate test cases automatically is model-based
testing through use of a model of the system for test case
generation, but research continues into a variety of alternative
methodologies for doing so. In some cases, the model-based
approach enables non-technical users to create automated
business test cases in plain English so that no programming of
any kind is needed in order to configure them for multiple
operating systems, browsers, and smart devices.
What to automate, when to automate, or even whether one really
needs automation are crucial decisions which the testing (or
development) team must make. A multi-vocal literature review of
52 practitioner and 26 academic sources found that five main
factors to consider in test automation decision are: 1) System
Under Test (SUT), 2) the types and numbers of tests, 3) test-tool,
4) human and organizational topics, and 5) cross-cutting factors.
The most frequent individual factors identified in the study were:
need for regression testing, economic factors, and maturity of
SUT.
Unit testing
A growing trend in software development is the use of unit testing
frameworks such as the xUnit frameworks (for example, JUnit
and NUnit) that allow the execution of unit tests to determine
whether various sections of the code are acting as expected under
various circumstances. Test cases describe tests that need to be
run on the program to verify that the program runs as expected.
Test automation mostly using unit testing is a key feature of
extreme programming and agile software development, where it
is known as test-driven development (TDD) or test-first
development. Unit tests can be written to define the functionality
before the code is written. However, these unit tests evolve and
are extended as coding progresses, issues are discovered and the
67
code is subjected to refactoring. Only when all the tests for all the
demanded features pass is the code considered complete.
Proponents argue that it produces software that is both more
reliable and less costly than code that is tested by manual
exploration.[citation needed] It is considered more reliable
because the code coverage is better, and because it is run
constantly during development rather than once at the end of a
waterfall development cycle. The developer discovers defects
immediately upon making a change, when it is least expensive to
fix. Finally, code refactoring is safer when unit testing is used;
transforming the code into a simpler form with less code
duplication, but equivalent behavior, is much less likely to
introduce new defects when the refactored code is covered by unit
tests.
Continuous testing
Continuous testing is the process of executing automated tests as
part of the software delivery pipeline to obtain immediate
feedback on the business risks associated with a software release
candidate. For Continuous Testing, the scope of testing extends
from validating bottom-up requirements or user stories to
assessing the system requirements associated with overarching
business goals.
What to test
Testing tools can help automate tasks such as product installation,
test data creation, GUI interaction, problem detection (consider
parsing or polling agents equipped with test oracles), defect
logging, etc., without necessarily automating tests in an end-to-
end fashion.
69
SOFTWARE MAINTENANCE
Software maintenance in software engineering is the modification
of a software product after delivery to correct faults, to improve
performance or other attributes.
A common perception of maintenance is that it merely involves
fixing defects. However, one study indicated that over 80% of
maintenance effort is used for non-corrective actions. This
perception is perpetuated by users submitting problem reports
that in reality are functionality enhancements to the system. More
recent studies put the bug-fixing proportion closer to 21%.
configuration management.
The problem and modification analysis process, which is
executed once the application has become the responsibility of
the maintenance group. The maintenance programmer must
analyze each request, confirm it (by reproducing the situation)
and check its validity, investigate it and propose a solution,
document the request and the solution proposal, and finally,
obtain all the required authorizations to apply the modifications.
The process considering the implementation of the modification
itself.
The process acceptance of the modification, by confirming the
modified work with the individual who submitted the request in
order to make sure the modification provided a solution.
The migration process (platform migration, for example) is
exceptional, and is not part of daily maintenance tasks. If the
software must be ported to another platform without any change
in functionality, this process will be used and a maintenance
project team is likely to be assigned to this task.
Finally, the last maintenance process, also an event which does
not occur on a daily basis, is the retirement of a piece of software.
There are a number of processes, activities and practices that are
unique to maintainers, for example:
● adaptive, and
perfective.
Corrective maintenance: Reactive modification of a software
product performed after delivery to correct discovered problems.
Adaptive maintenance: Modification of a software product
performed after delivery to keep a software product usable in a
changed or changing environment.
Perfective maintenance: Modification of a software product after
delivery to improve performance or maintainability.
Preventive maintenance: Modification of a software product after
delivery to detect and correct latent faults in the software product
before they become effective faults.
There is also a notion of pre-delivery/pre-release maintenance
which is all the good things you do to lower the total cost of
ownership of the software. Things like compliance with coding
standards that includes software maintainability goals. The
management of coupling and cohesion of the software. The
attainment of software supportability goals (SAE JA1004,
JA1005 and JA1006 for example). Note also that some academic
institutions[who?] are carrying out research to quantify the cost
to ongoing software maintenance due to the lack of resources
such as design documents and system/software comprehension
training and resources (multiply costs by approx. 1.5-2.0 where
there is no design data available).
73
Areas to cover:
● Software Engineering standards
● IEEE and other software standards.
● Computer Aided Software Engineering (CASE) tools;
● Software project management
Lecture 1:
Introduction
What do we mean by standard and why do we bother about standards and
how does standard apply or fit into computing?
Standards are mainly heard in world of commerce and industry. Standards
are meant to define benchmarks by which things or processes can be
measured. Frequently we hear of standard concerning our goods and
services especially the consumables. But here we are to talk about how
standards apply to the evolving world of computing and software
engineering in particular.
information.
But there are some widely used data formats quite understood
and used by a variety of programs that are not considered a
software standard.
● Example is the Microsoft Office file formats, such as .doc
and .xls, .These formats are not accepted standard
formats because they are still owned and controlled by
Microsoft and they are commonly converted by other
computer programs before use.
● But, text files like .TXT or .RTF are accepted standard
formats and are readily used without any conversion.
involves stake holders and with the ultimate goal of satisfying the
customers. Examples include:
The IEEE is a global association and organization of
professionals working toward the development, implementation
and maintenance of technology centered services. There are over
230 active , draft and archived standrds pulished by IEEE and
used throughout the industry tody.
● ISO/IEC/IEEE 29119
● IEEE1207-2017- ISO/IEC/IEEE
● ISO/IEC/12207 – an international standard that defines all
processes required for developing and maintaining software
systems.
LECTURE 2
COMPUTER AIDED SOFTWARE ENGINEERING (CASE)
TOOLS
CASE (Computer Aided Software Engineering).
Computer Aided software engineering is the development and
maintenance of software projects with help of various automated
software tools.
CASE Tools CASE tools are set of software application
programs, which are used to automate SDLC activities.
CASE tools are used by software project managers, analysts and
engineers to develop software system. There are number of CASE
tools available to simplify various stages of Software
Development Life Cycle such as Analysis tools, Design tools,
Project management tools, Database Management tools,
Documentation tools are to name a few. Use of CASE tools
accelerates the development of project to produce desired result
and helps to uncover flaws before moving ahead with next stage
in software development.
Components of CASE Tools: CASE tools can be broadly
divided into the following parts based on their use at a particular
SDLC stage:
Central Repository - CASE tools require a central repository,
which can serve as a source of common, integrated and consistent
79
LECTURE 8
SOFTWARE ENGINEERING STANDARDS
Introduction
What do we mean by standard and why do we bother about standards and
how does standard apply or fit into computing?
Standards are mainly heard in world of commerce and industry. Standards
are meant to define benchmarks by which things or processes can be
measured. Frequently we hear of standard concerning our goods and
services especially the consumables. But here we are to talk about how
standards apply to the evolving world of computing and software
engineering in particular.
Open Standards
A standard is said to be open if the documentation for the standard is open
to the public and anyone can create a software that implements and uses
the standard. Open standards must be freely and publicly available under
royalty free terms at a reasonable and non discriminatory cost. Examples
of open software standards are:
Note the difference between open source software and open standard.
Open software is a software whose source code is freely available to users
for reference purposes , debugging , modification, and or extension. But
open standard is a typically specifications, formal description of software
or software interfaces.
IMPORTANCE OF SOFTWARE STANDARDS
The Importance of software standards are but not limited to the following:
● Help Produce Efficient Software Product
● For reliable, and safe software products
● For effective communication b/w disparate systems
● For easy monitoring and tracking of software metrics and more.
● As a means of transferring good practice in software engineering
● Reduce Risk
● Improve Performance
● Advance Innovation And New Techs
● Reduce Cost/ cost effective.
LECTURE 9
COMPUTER AIDED SOFTWARE ENGINEERING (CASE)
TOOLS
Computer Aided software engineering: is the development and
maintenance of software projects with aid/ help of various automated
software tools. The overall aim of CASE technology is to improve the
productivity, and quality of the software by assisting the developer
throughout the different stages/phases of software development from the
acquisition of the functional and the non- functional requirements to
design, and implementation, and even to non -phase activities such as
project management and configuration.
CASE Tools
● CASE tools are set of software application /package / programs
which are used to provide support for the design and
implementation of information system.
● Are used to simplify/automate various stages of Software
Development Life Cycle.
● Case tools are used for developing high quality, defect free and
maintainable software.
● Use of CASE tools accelerates the development of project to
93
1. Analysis Tools:
● These tools are used for requirement analysis
● By helping to gather requirements automatically, check
for any inconsistency, inaccuracy, data redundancies or
erroneous omissions.
● They are equally used to check for the proper functionality
of the software product.
3. Diagram tools:
● These tools are used to represent various software components and
system structure in a graphical form.
● Examples are Flow Chart Maker tools, Microsoft Visio, Dia etc.
6. Programming Tools:
● These tools consist of programming environments like
IDE (Integrated Development Environment) in-built
modules library and simulation tools.
● These tools provide comprehensive aid in building
software product and include features for simulation and
testing.
● They provide a kind of solid framework for coding.
● Examples are Dreamweaver, Net-Beans, Cscope, Eclipse
etc.
7. Prototyping Tools: .
● These tools help us to build rapid prototypes of any
software product.
● In addition, they provide simulation of software
prototype.
● Example are Framer, Serena prototype composer,
Mockup Builder etc.
8. Web Development Tools:
● These tools assist in designing web pages with all allied
elements like forms, text, script, graphics and so on.
● For example, Fontello, Adobe Edge Inspect, Foundation
3, Brackets.
LECTURE 10
SOFTWARE PROJECT MANAGEMENT
As a software engineer, you have two specific jobs namely:
1. to develop software and
2. to manage the developed software
Software development is just like any other project. Which means, it is /
97
Resource management.
Resources include all elements used to develop a software product may.
This may include human resource, productive tools and software libraries.
And because the resources are available in limited quantity and stay in the
100
■ Experienced staff leaving the project and new staff coming in.
■ Change in organizational management.
■ Requirement change or misinterpreting requirement.
■ Under-estimation of required time and resources.
■ Technological changes, environmental changes, business
competition.
Risk Management Process
There are following activities involved in risk management process: