Fundamentals of Software Engineering
CS 2042
Course Details
Credits: 02
Lecture : 30 Hours
Attendance: 80% ( < 80%, Not Allowed for
Final exam)
Formative Assessments: 35%
Continuous assessments tests/ Quizzes.
Assignments
Summative Assessment: 65%
Course Aim
To teach software Engineering Principles,
Software process models in order to help
students to develop skills that will enable them to
construct software of high quality – software that
is reliable, and that is reasonably easy to
understand, modify and maintain, and to foster
an understanding of why these skills are
important.
Intended Learning Outcomes (ILOs):
After completing this course, students will be able to,
Gain extensive knowledge on software
development life cycle and its basic economics.
Describe different theories of how software can
be developed.
Apply appropriate methods for the design and
implementation of modern software systems
Course Capsule
Introduction to Software Engineering
The Software Process
Software Requirements and Specifications
Software Design Techniques
Software Validation and Verification
Software Evolution
Outline Syllabus
Introduction to Software Engineering: Well Engineered Software, The
Software Process.
Models of Software Process: Software lifecycle, Waterfall, Spiral, Incremental
model Prototyping, Software Quality Concepts.
Software Requirements and Specifications: Properties of requirements,
Requirements Elicitation, Describing functional Requirements using use cases,
Non-Functional Requirements, Requirements Specifications, Requirements
validation.
Software Design Techniques: Systems Design Principles, Design Paradigms,
Dataflow Diagram, Context diagram, Top-level dataflow diagrams.
Software Validation and Verification: Testing Fundamentals, Static and
Dynamic Testing.
Software Evolution: Characteristics of maintainable software, Reengineering
Systems.
Recommended Reading
Introduction to the Team Software Process, by Watts
Humphrey.
Engineering Software as a Service: An Agile Approach
Using Cloud Computing, by Armando Fox and David
Patterson, Strawberry Canyon Publisher, 2013.
References
Sommerville I. (2001,2004,…,2012)
Software Engineering 6th, 7th, 8th,9th, or 10th
Edition,Addison-Wesley, Harlow, Essex, UK
Stevens P.with Pooley, R.(2000)
Using UML: Software Engineeringwith
Objects and Components,
Addison-Wesley, Harlow, Essex, UK
References
Software Engineering
APRACTITION ER’SAPPROACH
SEVENTH EDITION
Roger S. Pressman, Ph.D.
Object-Oriented Analysis and Design with Applications
Third Edition
Grady Booch,Robert A. Maksimchuk, Michael W. Engle
Bobbi J. Young, Ph.D., Jim Conallen, Kelli A. Houston
Chapter-01
Introduction to Software Engineering
Introduction
Software Engineering is the field of Computer Science that
deals with the building of software systems.
A Software Engineer should have considerable skill and
experience as a programmer in order to understand the
problem areas, goals and objectives of the software
engineering.
Software Engineers are concerned with the issues of
analysis, design, verification, testing, documentation, software
maintenanceand project management.
Software
Computer programs and associated documentation
Software products may be developed for a particular
customer or may be developed for ageneral market
Software products may be
Generic - developed to be sold to a range of different
customers
Customised (or bespoke) - developed for a single
customer according to their specification
Hardware VS Software
Cost Software
hardware
Time
1960 2017
What makes software special?
The main difference in software engineering compared to other
engineering disciplines are listed below.
It is difficult for a customer to specify requirements
completely.
It is difficult for the developer to understand fully
the customer needs.
Software requirements change regularly.
Software is primarily intangible; much of the process of
creating software is also intangible, involving
experience, thought and imagination.
It is difficult to test software exhaustively
Well Engineered Software
If the software system does what the user wants,
and can be made to continue to do what the user
wants, it is well engineered.
to be done in a cost effective way,
to be constrained by limits on resource and schedule.
to be maintained in a cost effective way.
Characteristics of Good Software
Well-engineered software is expected to
have the following characteristics:
1. Operational
2.Transitional
3. Maintenance
1. Operational
This tells us how well software works in operations.
It can be measured on:
Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
2. Transitional
This aspect is important when the software is
moved from one platform to another:
Portability
Interoperability
Reusability
Adaptability
3. Maintenance
This aspect briefs about how well a software has
the capabilities to maintain itself in the ever-
changing environment:
Modularity
Maintainability
Flexibility
Scalability
Attributes of Well Engineered Software
The software should deliver the required functionality and performance
to the user and should be maintainable, dependableand usable
Maintainability
Software must evolve to meet changing needs
Dependability
Software must be trustworthy
Efficiency
Software should not make wasteful use of system resources
Usability
Software must be usable by the users for which it was designed
Software Engineering
Software engineering is an engineering discipline which is
concerned with all aspects of software production from the
early stages of system specification through to maintaining
the system afterit has gone into use.
Software engineers should
adopt asystematic and organised approach to their work
use appropriate tools and techniques depending on
the problem to be solved,
the development constraints and
the resources available
Difference between Software Engineering and
Computer Science
Computer Science Software Engineering
is concerned with
theory the practicalities of developing
fundamentals delivering useful software
Algorithms, data structures,
complexity theory, numerical SE deals with practical problems in
methods complex software products
Computer science theories are currently insufficient to act as a
complete underpinning for software engineering, BUT it is a
foundation forpractical aspects of software engineering
Software Process
SP is a set of activities whose goal is the
development or evolution of software
Fundamental activities in allsoftware processes are:
Specification - what the system should do and its
development constraints
Development - production of the software system
(design and implementation)
Validation - checking that the software is what the
customer wants
Evolution - changing the software in response to
changing demands
Software Process Model?
SPM is a simplified representation of a software process,
presented from a specificperspective
Examples of process perspectives:
Workflow perspective • represents inputs,
Data-flow perspective outputs and
Role/action perspective dependencies
• represents data transformation
activities represents the
roles/activities of the people
involved in software process
Generic process models
Waterfall
Evolutionary development
Formal transformation
Integration from reusable components
Costs of Software Engineering?
Roughly 60% of costs are development costs, 40%
are testing costs. For custom software, evolution
costs often exceed development costs
Costs vary depending on the type of system being
developed and the requirements of system attributes
such as performance and system reliability
Distribution of costs depends on the
development model that is used
Key Challenges Facing Software Engineering?
Software engineering in the 21st century faces three key challenges:
Legacy systems
Old, valuablesystems must be maintained and updated
Heterogeneity
Systems are distributed and include a
mix of hardware andsoftware
Delivery
There is increasing pressure for
faster delivery of software
Frequently Asked Questions About
Software Engineering
Question Answer
What is software? Computer programs and associated documentation.
Software products may be developed for a particular
customer or may be developed for a general market.
What are the attributes of good software? Good software should deliver the required functionality and
performance to the user and should be maintainable, dependable
and usable.
What is software engineering? Software engineering is an engineering discipline that is
concerned with all aspects of software production from the early
stages of system specification through to maintaining the system
after it has gone into use.
What are the fundamental software Software specification, software development, software
engineering activities? validation and software evolution.
What is the difference between software Computer science focuses on theory and fundamentals; software
engineering and computer science? engineering is concerned with the practicalities of developing and
delivering useful software.
What is the difference between software System engineering is concerned with all aspects of computer-
engineering and system engineering? based systems development including hardware, software and
process engineering. Software engineering is
part of this more general process.
Frequently Asked Questions About Software
Engineering
Question Answer
What are the key challenges facing Coping with increasing diversity, demands for reduced delivery
software engineering? times and developing trustworthy software.
What are the costs of software Roughly 60% of software costs are development costs, 40% are
engineering? testing costs. For custom software, evolution costs often exceed
development costs.
What is CASE (Computer-Aided Software It covers a wide range of different types of program which are
Engineering)? used to support software process activities such as requirements
analysis, system modelling, debugging and
testing.
What differences has the web made to The web has led to the availability of software services and the
software engineering? possibility of developing highly distributed service- based
systems. Web-based systems development has led to important
advances in programming languages and
software reuse.
When You Know Programming, What Is The Need
To Learn Software Engineering Concepts?
A person who knows how to build a wall may not be
good at building an entire house. Likewise, a person who
can write programs may not have knowledge of other
concepts of Software Engineering.
The software engineering concepts guide programmers on
how to assess requirements of end user, design the
algorithms before actual coding starts, create programs by
coding, testing the code and its documentation.