Title: EECE 310: Software Engineering
1EECE 310 Software Engineering
2How are we doing? SW Project Success
Successful
16
Cancelled
31
Challenged
53
Source Standish Group, Chaos report, 1995
3Course orientation
- What is this course about?
- Where can I find the course syllabus and other
stuff? - http//www.ece.ubc.ca/matei/EECE310/
- we will NOT use WebCTl
- What will I learn in the course?
- What do I need to do to pass the course?
- What do I need to do to get 90 in the course?
- How do I contact/see the course staff?
- Office hours
- How can I obtain latest announcements regarding
the course?
4Course orientation (cont.)
- What background should I have?
- What will I be doing in the course?
- Project / Assignments
- Quizzes
- Final exams
- Reading
- Participation
- What will I be reading?
- What will the course schedule look like?
- Where can I find additional information
resources? - How can I provide feedback?
5Instructors T.A.
- Instructor Matei Ripeanu -- http//www.ece.ubc.ca
/matei/ - matei_at_ece.ubc.ca
- Research interests Distributed systems
- Peer-to-peer, Grid systems, utility computing
- Large scale online games
- Distributed storage systems
- Collaborative information/content sharing
tagging, video-sharing - High-performance scientific computing
- Use of novel technologies to accelerate
computation - Networking
- Teaching Assistants
- Armin Bahramshahry -- armin.ece.ubc_at_gmail.com
- Abdullah Gharaibeh -- abdullah_at_gmail.com
6 about Software Engineering
- Application of a systematic, disciplined,
quantifiable approach to the development,
operation, and maintenance of software (IEEE
1990) - Multi-person construction of multi-version
software (Parnas 1978) - Software engineering ? Programming
- Building software-intensive systems
7Software engineering sub-disciplines
- Software Requirements
- Software Design
- Software Construction
- programming
- Software Testing
- Software Quality
- Software configuration management
- Software engineering management
- Software engineering process
- Software engineering tools and methods
- Software maintenance
Main focus of this course
Overview
8After this course you will be able to
- specify a software component and its properties
- design it and describe the design using UML
- select appropriate design patterns
- implement it (in different programming languages)
- verify that both the design and the
implementation meet its specification - document it for later evolution by others
- fit all these activities in the framework of a
software development lifecycle - select and use the appropriate tools for the tasks
9What will you do in this course?
- Lectures
- Reading
- Quizzes/Final exam
- Project/Assignments
- Labs
- Grading scheme
- 50 project assignments
- 45 quizzes final exam
- 5 class participation
10Reading textbook, etc.
- Textbook
- Barbara Liskov with John Guttag, Program
Development in Java Abstraction, Specification,
and Object-Oriented Design, Addison-Wesley
Professional. First Edition. ISBN 0201657686 - Available in UBC bookstore
- Not followed 100 in class by instructors
- Recommended reading
- See class webpage for a few useful pointers on
books, and for papers to download and read.
11Class webpage http//www.ece.ubc.ca/matei/EECE31
0/
- Syllabus
- Calendar
- and last minute announcements
- Assignments
- Additional reading material
- Course hand-outs
12Mailing list eece310_at_ece.ubc.ca
- Discussions
- Asynchronous communication with peers, TA and
instructors - The 1st place to ask questions (and answer them)
- How do I subscribe
- email sympa_at_ece.ubc.ca with subscribe
eece310_at_ece.ubc.ca in the body of the message,
or - visit https//lists.ece.ubc.ca/
13Project
- Chat system
- Some handholding multiple stages
- Technologies Java, Eclipse, version control
system, JUnit, UML - Component trading!
- Grading scheme (out of 100 for the whole
project) - 10 specification
- 10 project presentation
- 70 correctness, design, documentation of various
phases - 10 critique of other two projects
- 5 bonus if someone uses your project in the next
phase - 5 bonus points teamwork
- Groups of up to four
14Note on Plagiarism
- Exams / quizzes are individual, closed book
- Automated detection of plagiarism in code
- Consequence Exclusion from UBC for 2 years (both
parties, copier and copied)
15Questions?
16About Programming Languages
- Course EECE310 not about programming
- However, a good software engineer is comfortable
with several programming languages, and able to
learn new ones. - No language bigotry, no OS bigotry
- Brief Java review in class for thenext two classes
17About Software Tools
- Eclipse environment for Java
- UML tool Rational Rose
- Documentation tool Doxygen
- Testing JUnit
- Source control CVS/SVM/Perforce
18Outline
- Instructors
- Software engineering
- Syllabus
- Textbook
- Tools
- Evaluation, exams, attendance
- Agenda details
- Plagiarism
19EECE 310 Software Engineering
- Overview of Software Engineering
20Some Facts on Software Engineering
- The economies of ALL developed nations are
dependent on software. - More and more systems are software controlled
- Software engineering is concerned with theories,
methods and tools for professional software
development.
Source Ian Sommerville, 2004
21Some Facts on Software Costs
- Software costs often dominate computer system
costs. The costs of software on a PC are often
greater than the hardware cost. - Software costs more to maintain than it does to
develop. - For systems with a long life, maintenance costs
may be several times development costs. - Software engineering is concerned with
cost-effective software development.
Source Ian Sommerville, 2004
22Objectives of this Module
- What is software?
- What is software engineering?
- What are the key questions software engineers are
faced with? - A brief history of Software Engineering
- What have we learned from our short history?
23What is Software?
- Computer programs and associated documentation
such as requirements, design models and user
manuals. - Software products may be
- Generic - developed to be sold to a range of
different customers in a general market (e.g. PC
software such as Excel or Word.) - Custom - developed for a single customer
according to their specification. - New software can be created by developing new
programs, configuring generic software systems or
reusing existing software.
Source Ian Sommerville, 2004
24What is Software Engineering?
- Multi-person construction of multi-version
software (Parnas, 1978) - Software engineering engineering discipline
concerned with all aspects of software production
(Sommervile, 2004) .
25Building a doghouse vs. building a skyscraper
?
26Issues
- Scale
- Time
- Cost
- Risks
- Number of people involved
- Number of different stakeholders
- Methods
- Liabilities
27A Wide Range of Complexity Issues
Higher technical complexity - Embedded,
real-time, distributed, fault-tolerant - Custom,
unprecedented, architecture reengineering - High
performance
Higher management complexity - Large scale -
Contractual - Many stake holders - Projects
Lower management complexity - Small scale -
Informal - Single stakeholder - Products
Lower technical complexity - Mostly 4GL, or
component-based - Application reengineering -
Interactive performance
Source Walker Royce, 1995
28Software engineering sub-disciplines
- Software Requirements
- Software Design
- Software Construction
- programming
- Software Testing
- Software Quality
- Software configuration management
- Software engineering management
- Software engineering process
- Software engineering tools and methods
- Software Maintenance
Software Engineering Body of Knowledge
Source www.swebok.org
29Software Engineering vs. Computer Science?
- Computer Science is concerned with theory and
fundamentals - Software Engineering is concerned with the
practicalities of developing and delivering
useful software. - Computer science theories are still insufficient
to act as a complete underpinning for software
engineering.
Source Ian Sommerville, 2004
30Software Engineering vs. System Engineering?
- System engineering is concerned with all aspects
of computer-based systems development including
hardware, software and (business) process
engineering. - Software engineering is part of this process
concerned with developing the software
infrastructure, control, applications and
databases in the system. - System engineers are involved in system
specification, architectural design, integration
and deployment.
Source Ian Sommerville, 2004
31What is a system?
- A purposeful collection of inter-related
components working together to achieve some
common objective. - A system may include software, mechanical,
electrical and electronic hardware and be
operated by people. - System components are dependent on other system
components - The properties and behaviour of system components
are inextricably inter-mingled
32How are we doing? SW Project Success
Successful
16
Cancelled
31
Challenged
53
Source Standish Group, Chaos report, 1995
33Failure factors
- Lack of user input
- Incomplete requirements
- Constantly changing requirements
- Lack of management support
- Technology incompetence
- Lack of resources
- Unrealistic expectations
- Unclear objectives
- Unrealistic timing
- New Technology
Source Standish Group, Chaos report, 1995
34Success Factors?
- User involvement
- Clear statement of requirements
- Management support
- Proper planning
- Realistic expectations
- Smaller milestones
- Competent staff
- Ownership
- Clear vision
- Hard working staff
What made the 16 of projects successful ?
Source Standish Group, Chaos report, 1995
35What about Quality?
- What we can get away with
- Good enough software
- Not applicable to all types of software though
- When good enough is close to perfect for safety
critical systems - Ethical issues
- Cultural and social issues
- Competitive issues
36Software Crisis
- Seems that it last forever, though
- 1968
- 1976
- 1980
- 1994
- 2001
37Summary (last lecture)
- Software engineering not very successful
- Poor rate of success
- Poor quality
- Profession in a state of permanent crisis
- (since the 1960s)
- Issues?
- Requirements and specifications
- Complexity
- Time to market
- Communications
- Technology churn
- Education
38Last time success rate for large software
development projects
Successful
16
Cancelled
31
Challenged
53
Source Standish Group, Chaos report, 1995
39Is this a good industry to be in?
40Brief History of Software Engineering (1)
- Antiquity
- 1950 1968 Big irons (software is free!)
- 1968 NATO conference in Germany
- Identification of a software crisis
- Start of the quest for a better way (silver
bullet) - Term Software engineering used
- The search of a Silver Bullet, of the Grand
narrative - 1960 1990 programming languages
- 1970 1980 introduction of methods
- 1985 - CASE tools PSEs and IDEs
- 1990 - Object-oriented technologies
middleware
41Brief History of Software Engineering (2)
- Post-modern era (Internet age)
- no grand narrative no silver bullet
- its all good.
- 1996 - Agile methods
- as a reaction to many of the process and methods
excesses - Next?
- The end of programming?
- Model-driven development?
- Scrap-heap software development?
42What are Software engineering methods?
- Structured approaches to software development
which include system models, notations, rules,
design advice and process guidance. - Model descriptions
- Descriptions of (graphical) models which should
be produced - Rules
- Constraints applied to system models
- Recommendations
- Advice on good design practice
- Process guidance
- What activities to follow.
43CASE (Computer-Aided Software Engineering) ?
- Software systems that are intended to provide
automated support for software process
activities. - CASE systems are often used for method support.
- Upper-CASE
- Tools to support the early process activities of
requirements and design - Lower-CASE
- Tools to support later activities such as
programming, debugging and testing.
44What are the attributes of good software?
- The software should deliver the required
functionality and performance to the user and
should be maintainable, dependable and
acceptable. - Maintainability Software must evolve to meet
changing needs - Dependability Software must be trustworthy
- Efficiency Software should not make wasteful use
of system resources - Acceptability Software must accepted by the
users for which it was designed. This means it
must be understandable, usable and compatible
with other systems.
45Key challenges facing software engineering?
- Heterogeneity
- Developing techniques for building software that
can cope with heterogeneous platforms and
execution environments - Delivery
- Developing techniques that lead to faster
delivery of software - Trust
- Developing techniques that demonstrate that
software can be trusted by its users - Plus Ethical issues, cultural issues, social
issues
46Suggested reading
- Fred Brooks, No Silver Bullet-Essence and
Accident in Software Engineering, 1986 - Standish Group, Chaos Report 1995 Extreme Chaos,
2001 - W. Gibbs, Softwares Chronic Crisis, Scientific
American, 1994 - Daniel Berry, The Inevitable Pain of Software
Development Why There Is No Silver Bullet,
Workshop on Radical Innovations of Software and
Systems Engineering in the Future, 2002 - Ph. Kruchten, Casting software design in the FBS
framework, IEEE Software
47Next Quick Java review
- Program structure
- classes, interfaces
- Packages
- Objects and variables
- Mutability
- Method call semantics
- Type checking
- Type hierarchy
- Conversion and overloading
- Dispatching
- Types
- Primitive object types
- Vectors
- Hello world
48- public class Num
- // provides useful numeric routines
-
- public static int gcd (int n, int d)
- // REQUIRES n and d greater than 0
- // RETURNS the GCD computed by repeated
substraction - while (n ! d)
- if (ngtd) nn-d else dd-n
- return n
-
- public static boolean isPrime (int n)
- // REQUIRES
- // RETURNS
- .
-
49- 1 /
- 2 This program computes the factorial of a
number - 3 /
- 4 public class Factorial //
Define a class - 5 public static void main(String args) //
The program starts here - 6 int input Integer.parseInt(args0) //
Get the user's input - 7 double result factorial(input) //
Compute the factorial - 8 System.out.println(result) //
Print out the result - 9 //
- 10
- 11 public static double factorial(int x) //
This method computes x! - 12 if (x lt 0) //
Check for bad input - 13 return 0.0 //
if bad, return 0 - 14 double fact 1.0 //
initial value - 15 while(x gt 1) //
Loop until x equals 1 - 16 fact fact x //
multiply by x each time - 17 x x - 1 //
and then decrement x - 18 //
Jump to start of loop