Title: Software Engineering CPCS351
1Software Engineering CPCS351
2Software and Software Engineering
- The software engineers job is to solve problems
economically by developing high-quality software.
3The Nature of Software
- Similarly to mechanical engineers who design
mechanical systems, software engineers design
software systems. - Software differs from the types of artifacts
produced by other types of engineers (how it
affects s/w development) - Software is largely intangible
- The mass-production of duplicate pieces of
software is trivial - The software industry is labour intensive
- It is all too easy for an inadequately trained
software developer to create a piece of software
that is difficult to understand and modify - Software is physically easy to modify
- Software does not wear out with use
4Software Crisis
- Software crisis is the situation of software
development in relationship with the expectation
of the customers decades ago. - Much of existing software is relatively poor
quality, and is steadily becoming worse - There is strong demand for new and changed
software, which customers expect to be of high
quality and to be produced rapidly - The result of the poor development process
- Software engineers have not been able to live up
to the expectations of their managers and
customers - Many software are either never delivered, or are
delivered late and over budget - Many software systems that are delivered are
never put to use because they have so many
problems - Other systems require major modification before
they can be used
5Software crisis- continued
- The challenges of developing software systems
- The complex nature of software
- The laws of economics (customer demands)
- The vagaries of human psychology
- In the authors opinion the situation is still
going on - Objective is to learn how to engineer software
so that it meets expectations and doesnt
contribute to the crisis
6Types of Software and their Differences
- Classification 1 of the types of software
- Custom software developed to meet the specific
needs of a particular customer and tends to be of
little use to others. e.g. web sites, air-traffic
control systems - Generic software/ (COTS)/ shrink-wrapped
software is designed to be sold on the open
market, to perform functions that many people
need, and to run on general purpose computers.
e.g. word processors, spreadsheets, web browsers,
computer games. - Embedded software run specific hardware devices
which are typically sold on the open market. e.g.
washing machines, DVD players, and automobiles - It is possible to take generic software and
customize it and vise versa.
condition in market Type of software
Highest number of copies in use Embedded S/W
Highest number of copies in use on general-purpose computers Generic S/W
What most developers work on Custom S/W
7Types of Software and their Differences -continue
- Classification 2 of the types of software
- Real-time software
- it has to react immediately (i.e. in real time)
to stimuli from the environment (e.g. the pushing
of a button, a signal from a sensor) - Responsiveness must always be guaranteed- safety
is a key concern in their design - e.g. many of the embedded systems, custom systems
that run industrial plants and telephone networks - Data processing software
- is used to run businesses.
- It performs functions such as recording sales,
managing accounts, printing bills etc. - The design concern here is how to organize the
data and provide useful information gathered to
the users so they can perform their work
effectively - Accuracy and security of data are of major
concern - In traditional data processing tasks, data is
gathered together in batches to be processed
later. - Some software has both real-time and data
processing aspects.
8What is Software Engineering?
- Software Development and software engineering
- Definition software engineering is the process
of solving customers problems by the systematic
development and evolution of large, high-quality
software systems within cost, time and other
constraints - Solving customers problems
- The goal of every software engineering project
- It is important to recognize activities that are
not consistent with this goal, such as adding
unnecessary features. - Recognize situations when it would be most cost
effective not to develop s/w at all, to develop
simpler s/w or to purchase existing s/w. - Software engineers must understand how people do
their work, and understand what impact any
proposed software may have on its users
productivity (communicating negotiating with
people)
9What is Software Engineering?-continue
- Systematic development and evolution
- Developing software by applying well-understood
techniques in an organized and disciplined way. - Software engineering is a young field
- There are many accepted practices that have been
formally standardized by bodies such as IEEE, ISO - Ensuring that the maintenance and evolution of
existing systems is done in a systematic way is
an integral part of software engineering - Large, high-quality software systems
- Large systems with many functions and components
, and thousands lines of code are too complex, - difficult to understand, take too long to develop
by one person, and challenging in dividing up the
work among teams - Software engineering techniques are essential for
large system, and may be useful for small systems - The end product must be of sufficient quality
(there are techniques for improving quality and
ensuring the product is of sufficient quality)
10What is Software Engineering?-continue
- Cost, time and other constraints
- One of the essential characteristics of
engineering is that you have to consider economic
constraints as you try to solve each problem - There are 3 main economic constraints
- Software engineers must ensure their systems can
be produced within a limited budget and by a
certain due date - Achieving this requires careful planning and
sticking to the plan in a disciplined way, and
creating a realistic plan in the first place - Why many software engineering projects fail to
stick to the specified time and cost constraints?
11Software Engineering as a Branch of the
Engineering Profession
- People have talked about software engineering
since 1968 when the term was coined at a NATO
conference - Only since the mid-1990s has there been a shift
towards recognizing software engineering as a
distinct branch of the engineering profession
(i.e. have a license to legally perform
consulting or self-employed work) - How to obtain a license? Licensing agencies
- Ensures sufficient engineering education
experience - Accredits educational institutions
- Licensed profession impose adherence to codes of
ethics and taking responsibility for the produced
work - Universities have been establishing academic
programs that focus on software engineering
(distinct from computer science or computer
engineering)
12Stakeholders in Software Engineering
- Stakeholders are the people involved in a
software engineering project (who are they and
what do they look for in interacting with the
software? Figure 1.1 page12) - Users people who will use the software. They
will likely appreciate new software, but some may
fear it would jeopardize their jobs - Customers/clients people who make the decisions
about ordering and paying for the software. They
may or may not be users. - Software Developers people who develop and
maintain the software (such as software
engineers). Special roles in a s/w engineering
project include requirements specialists,
database specialists, technical writers,
configuration management specialists, etc. - Development Managers people who run the
organization that is developing the software,
they usually have an educational background in
business administration. - In some cases, two, three or even all four of the
stakeholders may be held by the same person
13Software Quality
- There is no single answer for the question what
quality means? But the goal is to produce
software with high quality - Attributes of software quality (what is its
impact on the software? How to measure it? what
to do to improve it?) - Software engineers try to balance the relative
importance of these attributes towards the best
overall quality - Usability, efficiency, reliability,
maintainability, and reusability - The importance of these attributes varies from
stakeholder to another and form system to system.
(examples) - Often, software engineers improve one quality at
the expense of another trade-offs - Good engineering practice sets objectives for
quality that satisfies all stakeholders, and then
designing the system to meet these objectives
14Software Engineering Projects
- S/w engineering work is normally divided into
projects. - For small s/w systems there may be a single team
of three or four developers working on the
project - Evolutionary projects (those that involve
modifying an existing system) corrective,
adaptive, enhancement, re-engineering or
perfective - Greenfield projects (those that involve starting
to develop a system from scratch) - Projects that involve building on a framework or
a set of existing components (those that involve
building most of a new system from existing
components, while developing new software only
from missing details)
15Evolutionary Projects
- Most s/w projects are of this type- maintenance
- For many people, maintenance implies keeping
something running by simply fixing problems, but
without adding significant new features - There is constant pressure from users and
customers not only to fix problems but to make
many other kinds of changes - Radical modifications/ evolution should be
applied after several years of frequent changes
resulting in software that barely resembles their
original state
16Types of Evolutionary Project
- Corrective projects involve fixing defects
- Adaptive projects involve changing the system in
response to changes in the environment in which
the software runs (a new version of Operating
system, database, a new set of tax laws) - Enhancement projects involves adding new features
- Re-engineering/ perfective projects involve
changing the system internally so that it is more
maintainable, without making significant changes
that the user will notice - Most evolutionary projects involve more than one
of the above - Legacy systems are software systems that require
maintaining when a lot of the design information
is missing
17Greenfield Projects
- Green projects are less common than evolutionary
- Developers have a wider freedom to be creative
about the design no constraints of design
decisions errors made by predecessors - Take a lot of work to build
18Projects that involve reusing design/ code
- Starts with a framework or involves plugging
together several components that are already
developed and provide significant functionality - A framework is a software system especially
designed to be reused in different projects, or
in various products in product line. A framework
contains important functionality, but must be
adapted to handle the requirements of particular
customers or products - e.g. framework for ticketing
- Basic functionality for reserving and printing
tickets - It can be used for theatres, cinema, sports
events, a holiday package - e.g. of the use of components (gluing an
accounting package and a package for tracking
meetingsgt a product for a lawyers office to
create bills for clients meetings) - Advantages
- Benefit from software that has been shown to be
reliable, since the framework is tested - Gives the freedom to innovate as with the case
with Greenfield projects
19Activities Common to Software Projects
- Requirements and specification
- Design
- Modeling
- Programming
- Quality assurance
- Deployment
- Managing software configuration
- Managing the process
20Requirements and Specification
- It is important to, first, understand the
problems, the customers business environment,
and the available technology which can be used to
solve the problems - After that, meet with the customers and users to
decide on a course of action that will solve the
problems (development or modification) - Then decide in detail what facilitates the
software should provide - Involved activities domain analysis, defining
the problem, requirement gathering, requirement
analysis, requirement specification (pp. 16-17) - Important principle of requirement is to separate
the what from the how i.e. requirements
from design and implementation
21Design
- Design is the process of deciding how the
requirements should be implemented using the
available technology - Some of the important activities during design
system engineering, determining the software
architecture, detailed designs, user interface
design, etc. - For large systems, software engineers work on
architectural design in conjunction with
high-level requirements to effectively divide the
system into subsystems - For small systems, requirement precede design to
avoid re-doing the design if requirements change
22Modeling
- Modeling is the process of creating a
representation of the domain or the software - Various modeling approaches can be used during
both requirements analysis and design. - e.g. Use case, structural, and dynamic/
behavioural modeling - Modeling can be performed visually, using
diagrams, or else using semi-formal or formal
languages that express the information in a
systematically or mathematically. - e.g. UML with a semi-formal notation diagrams
23Programming
- It involves the translation of higher-level
designs into particular programming languages - The final stage of design since it involves
making decisions about the appropriate
constructs, variable declarations, etc. - Programmers people who do higher-design
activities and programming - Coders perform only programming with no design
- Research is done on automating programming, e.g.
code generators. However there will still be a
need for manual programming
24Quality Assurance (QA)
- QA encompasses all the processes needed to ensure
that the quality objectives discussed in Section
1.5 are met - Occurs throughout the project
- Involved activities reviews and inspection, and
testing - Validation and Verification (V V)
- Validation the process of determining whether
the requirements will solve the customers
problem - Verification the process of making sure the
requirements have been adhered to
25Other activities
- Deployment involves distributing and installing
the software and any other components of the
system such as databases, special hardware, etc. - Managing software configurations involves
identifying all the components that compose a
software system, including files containing
requirements, design, and source code. - Managing the Process managers lead the other
activities, and undertake the following task - Estimating the cost of the system
- Planning
- Periodically Revising the expected estimates and
planning