Se 1
Se 1
UIIT -UAAR
.
. 1
SE Project/Assignment
Deliverable #1 (Unmarked):
- - UIIT -UAAR
COMPANY
1) Company Name (of your
newly established
company)
2) Company Logo
TEAM (3-4) Members
Required/Gained capabilities
(Possible Roles)
1) Project Manager
2) (Requirement)
Analyst/Architectet
3) Manager QA
4) Manager SW Testing
5) Manager UI
6) Designer
. 2
SE Project/Assignments
Deadline: -
– Project Title
– Scope
– Objectives
– Problem Statement and Description
. 3
Definitions
. 4
Definitions
. 5
Role of software engineer
UIIT -UAAR
. 6
Software Myths
Customer Perspectives
– general statement of objectives is sufficient to get started with the
development of software. Missing/vague requirements can easily be
incorporated/detailed out as they get concretized.
Application requirements can never be stable; software can be and has
to be made flexible enough to allow changes to be incorporated as they
happen.
Customer
Perspectives
Software Developer
Myths Perspectives
Management
Perspectives
. 7
Software Myths
(Developer Perspectives)
UIIT -UAAR
. 8
Software Myths
(Developer Perspectives -2)
. 9
Software Myths
(Developer Perspectives - 3)
. 10
Software Myths
(Management Perspectives - 1)
. 11
Software Myths
(Management Perspectives -2)
. 12
Software Myths
(Management Perspectives -3)
. 13
Misplaced Assumptions
. 14
Confusion with Programs and Products
Programs Software Products
Usually small in size Large
. 15
Software Programming ≠ Software Engineering
• Software programming: the process of translating a
problem from its physical environment into a language that
a computer can understand and obey. (Webster’s New
World Dictionary of Computer Terms)
– Single developer
– “Toy” applications
– Short lifespan
– Single or few stakeholders
– Architect = Developer = Manager = Tester =
Customer = User
– One-of-a-kind systems
– Built from scratch
– Minimal maintenance
. 16
Software Programming ≠ Software Engineering
Software engineering
– Teams of developers with multiple roles
– Complex systems
– Indefinite lifespan
– Numerous stakeholders
– Architect ≠ Developer ≠ Manager ≠ Tester ≠ Customer ≠ User
– System families
– Reuse to amortize costs
– Maintenance accounts for over 60% of overall
development costs
. 17
INTRODUCTION TO SOFTWARE ENGINEERING
History Of Software Engineering
In the early days of computing, the problem of programming was
viewed essentially as how to place a sequence of instructions together
to get the computer to do something useful.
The problems being programmed were quite well understood- for
example how to solve a differential equation.
The problem was just between the user and the computer – no other
person was involved.
In the late 1950s, higher level languages were invented to make it
easier to communicate with the machine and it was the time when
“programming” attained the status of a profession: you could ask a
programmer to write a program for you instead of doing it yourself.
This introduced a separation between the user and computer.
Now the user has to specify the task in a form other than the precise
programming notation used before.
Very few larger software projects were being done in the early 1960s
and these were done by computer pioneers who were experts.
. 18
In the middle to late 1960s, truly large software systems were
attempted commercially. The best documented of these projects was
the OS 360 operating system for the IBM 360 computer family.
The term Software Engineering was invented around this time and
conferences were held to discuss the difficulties these projects were
facing in delivering the promised products.
It was discovered that the problems in building the large software
systems were not a matter of putting computer instructions together
rather:
People on the project had to spend a lot of time communicating with
each other rather than writing code.
People sometimes even left the project, and this not only affected their
work but also the work of the others who were depending on them.
Many solutions were proposed and tried. Some suggested that the
solution lay in better management techniques.
Other proposed different team organizations. Yet other argued for
better languages and tools.
. 19
• The final consensus was that the problem of building software
should be approached in the same way that engineers had built
other large complex systems such as bridges, refineries,
factories, ships and airplanes.
• The engineering approach required management, organization,
tools, methodologies and techniques. And thus was software
engineering born.
. 20
WHAT IS SOFTWARE ENGINEERING?
. 21
What is Software Engineering? (2)
. 22
What is Software Engineering? (3)
. 23
What is Software Engineering? (4)
. 24
So, Software Engineering is …
• Scope
– study of software process, development
principles, techniques, and notations
• Goals
– production of quality software,
– delivered on time,
– within budget,
– satisfying customers’ requirements and
users’ needs
. 25
The Role/Scope Of S/W Engineering In System Design
. 26
The Role/Scope Of S/W Engineering In System Design (ctd.)
. 27
Knowledge Spectrum
Social Issues
Politics
& Law
Psychology
& Sociology
Economics
Solutions
Theory
Industrial
Design
Architecture
Arts
Human factors
. 28
A Computing Spectrum
Social Issues
Politics
& Law
Psychology
• Algorithms
• Information theory & Sociology • Development Environment
• Computability theory • Implementation Standards
Economics
Solutions
Theory
Industrial
Design
• Analysis & • System
• System Software Architecture Design Methods Administration
• Computer Architecture • Design Process • End-user Support
• Information storage • Measurements
Arts
Human factors
. 29
Computing Professions
Social Issues
•Creates new applications Politics
applying engineering principles & Law Information Systems Practitioner
and CS best practices
•Creates business solutions
Psychology
Software Engineer
& Sociology
Economics
Solutions
Theory
Industrial
Computer Scientist Design Information Technologist
Architecture
•Provides end-user solutions
•Creates New Infrastructure
Arts
Human factors
. 30
THE RELATIONSHIP OF SOFTWARE ENGINEERING TO
OTHER AREAS OF COMPUTER SCIENCE
[Carlo Ghezzi]
Influence on Programming Language
Team Development
inclusion of modularity features, such as separate and independent
compilation, and the separation of specification from implementation,
in order to support decomposition and large software.
Library of Components
The Ada programming language, for example, supports the
development of “Package”- allowing the separation of the package
interface from its implementation- and libraries of packages that can be
used as component in the development of independent software system.
Recent examples …...classes, patterns, components…
. 31
In the opposite direction, programming languages have influenced
software engineering. One example is the idea that requirements and
design should be described precisely, possibly using a language as
rigorous and machine-processable as a programming language.
Influence On Operating System
can be seen the way operating systems are structured and the goals they
try to satisfy. For example, the UNIX operating system attempts to provide
a productive environment for software development. A class of tools
provided in this environment supports configuration management-a way
to maintain and control the relationships among the different components
and versions of a software system (SCCS: Source Code Control System!).
Further LEX, YACC etc [1980’s]
In the opposite direction, Virtual machines, levels of
abstraction, and separation of policy from mechanism are all
concepts from operating system field with general applicability to
any large software system.
. 32
Database
The database allows applications to be written that
use data without worrying about the underlying
representation of the data. This independence allows
the database to be changed in certain ways (e.g. to
increase the performance of the system-without any
need to change the applications). This is a perfect
example of the benefit of abstraction and separation of
concerns, two key software engineering principles.
SE requires Now OO data bases
. 33
Artificial intelligence
SE techniques have been used in AI systems – e.g. in
expert systems. These systems are modularized, with a
clear separation between the fact “known” by the expert
system and the rules used by the system for processing the
fact-for example, a rule to decide on a course of action.
Techniques of AI are being applied to improve software
engineering tasks. For example, “programming
assistants” are being developed to act as consultants to
the programmer, watching for common programming
idioms or the system requirements. Such “assistants” are
also being developed to help in the testing activities of the
software development, to debug the software.
. 34
Theoretical models
• SE has also affected theoretical computer science.
Algebraic specification and abstract data type theory
are motivated by the needs of SE.
Management science
• A large part of software engineering is involved with
management issues. Such management has two aspects:
technical management and personnel management. The
generic issues project management include project
estimation, project scheduling, human resource planning,
task decomposition and assignment, and project
monitoring.
• SE has provided management science with a new
domain/challenges in which to test management theories and
models.
. 35
S/W CHARACTERISTICS
. 36
Wear vs. Deterioration
increased failure
rate due to side effects
Failure
rate
change
actual curve
idealized curve
Time
. 37
Future of SE …
• Process • Software analysis
• Requirements engineering • Formal specification
• Reverse engineering • Mathematical foundations
• Testing • Reliability and Dependability
• Maintenance and Evolution • Performance
• Software architecture • SE for Safety
• SE for security
• OO Modeling
• SE for mobility
• SE and Middleware
• SE & the Internet
• Tools and environments
• Software economics
• Configuration management • Empirical studies of SE
• (OO) Databases and SE • Software metrics
• SE Education
. 38
Software Engineering Principles
. 39
Key principles
. 40
1. Rigor and formality
. 41
Examples: Rigor and formality
• Product:
– Formal-Mathematical analysis of program
correctness
– Rigorous-Systematic test data derivation
• Process:
– Rigorous- detailed documentation of each
development step in waterfall model
– Formal- automated transformational
process to derive program from formal
specifications
. 42
2. Separation of concerns
• To dominate complexity, separate the
issues to concentrate on one at a time
– "Divide & conquer"
• Supports parallelization of efforts and
separation of responsibilities
. 43
Separation of concerns
Examples:
– Process: Go through phases one after the
other as in waterfall Model
–Does separation of concerns by separating
activities with respect to time
– Product: Keep different types of product
requirements separate
–Functionality discussed separately from the
performance constraints
. 44
3. Modularity
• A complex system may be divided into
simpler pieces called modules
. 45
Modularity: Cohesion and coupling
. 46
An Example
. 47
4. Abstraction
• Identify the important aspects of a
phenomenon and ignore its details
– Special case of separation of concerns
– The type of abstraction to apply
depends on purpose
• Example: the user interface of a watch
(its buttons) abstracts from the watch's
internals for the purpose of setting time;
other abstractions needed to support
repair
. 48
Abstraction ignores details
. 49
Abstraction yields models
. 50
Abstraction in process
. 51
5. Anticipation of change
. 52
6. Generality
• While solving a problem, try to
discover if it is an instance of a more
general problem whose solution can
be reused in other cases
• Sometimes a general problem is
easier to solve than a special case
–Carefully balance generality against
performance and cost
. 53
7. Incrementality
• Process proceeds in a stepwise fashion
(increments)
• Examples (process)
– deliver subsets of a system early to get
early feedback from expected users,
then add new features incrementally
– deal first with functionality, then turn to
performance
. 54
Case study: compiler
• Compiler construction is an
area where systematic (formal)
design methods have been
developed
–e.g., BNF for formal description
of language syntax
. 55
Separation of concerns example
. 56
Modularity
. 57
Representation of modular structure
. 58
Module decomposition may be
iterated
• further modularization of code-generation module
. 59
Abstraction
. 60
Anticipation of change
. 61
Generality
. 62
Incrementality
• Incremental development
–deliver first a kernel version for a
subset of the source language, then
increasingly larger subsets
–deliver compiler with little or no
diagnostics/optimizations, then add
diagnostics/optimizations
. 63