39
An Introduction to Software Engineering CSCI 3333 Data Structures

An Introduction to Software Engineering CSCI 3333 Data Structures

Embed Size (px)

Citation preview

Page 1: An Introduction to Software Engineering CSCI 3333 Data Structures

An Introduction toSoftware Engineering

CSCI 3333 Data Structures

Page 2: An Introduction to Software Engineering CSCI 3333 Data Structures

Acknowledgement

Dr. Yue Krishani Abeysekera Wei Ding Charles Moen

Page 3: An Introduction to Software Engineering CSCI 3333 Data Structures

Software Development

With the rapid increase in technology, the complexity and expectation of computer capabilities also increased. Requirements have increased rapidly. However, while users expect and demand a many features, customers generally want to minimize the cost for the software and they want it developed very fast. This becomes a recipe for disaster!

Page 4: An Introduction to Software Engineering CSCI 3333 Data Structures

Software Development

With the rapid increase in technology, the complexity and expectation of computer capabilities also increased. Requirements have increased rapidly. However, while users expect and demand a many features, customers generally want to minimize the cost for the software and they want it developed very fast. This becomes a recipe for disaster!

Page 5: An Introduction to Software Engineering CSCI 3333 Data Structures

System Cost

The relative cost of hardware and software changed drastically in the last 60 years.

Time

% Cost hardware software

Page 6: An Introduction to Software Engineering CSCI 3333 Data Structures

Consequences

Cost: Software cost ↓ Hardware cost ↓↓: Moore’s Law, much

faster. Earlier day: optimizing hardware usage.

Assembly language C

Page 7: An Introduction to Software Engineering CSCI 3333 Data Structures

System Speed

Moore Law for hardware. No Moore Law for software?

Cloud computing, e.g. virtual servers, pay-per-use service, no licensing.

Wirth Law: software speed is decreasing more quickly than hardware speed is increasing. This is why efficient programs are always

needed.

Page 8: An Introduction to Software Engineering CSCI 3333 Data Structures

Consequences

Hardware is now relatively ‘free’? Selling software, not hardware:

Microsoft. Some software is becoming

relatively ‘free’? Selling service, advertisement instead

of software: Google.

Page 9: An Introduction to Software Engineering CSCI 3333 Data Structures

Software Crisis (1965-1985)

Budget and Cost Overrun Cancelled Projects Damaged properties Injury and death

Page 10: An Introduction to Software Engineering CSCI 3333 Data Structures

Examples: Software Disasters

Software has played a role in many high-profile disasters.

Mars probe - data calculated on the ground in Imperial units and reported that way to the navigation team who were expecting the data in metric units caused it to be destroyed.

Therac-25 - A radiation therapy machine responsible for six overdoses due to faulty software.

Airbus A320 - In the Airbus flight control systems, the computer has the final say on all decisions, meaning the safety of passengers depends upon the accuracy of the software specification, and the competence of the engineering teams producing the (multiple, independent) software stacks. The Strasbourg A320 crash of Jan 21, 1992 is partially related to software in that poor user interface design was a contributing factor.

Page 11: An Introduction to Software Engineering CSCI 3333 Data Structures

Cause of the Software ‘Crisis’

Causes of the software crisis were linked to the overall complexity of the process and the relative immaturity of software engineering as a profession. The crisis manifested itself in several ways: Projects running over-budget. Projects running over-time. Software was of low quality. Software often did not meet requirements. Projects were unmanageable and code difficult to

maintain.

Page 12: An Introduction to Software Engineering CSCI 3333 Data Structures

Software Engineering

This discipline deals with identifying, defining, and realizing the required performance characteristics of the resulting software. These performance characteristics include: reliability, maintainability, availability, testability, ease-of-use, portability, etc. Software engineering addresses these performance characteristics by preparing design and technology specifications, that if implemented properly, will enable the resulting software to meet these requirements.

Page 13: An Introduction to Software Engineering CSCI 3333 Data Structures

Software Development Process

What is the best way to make more and better software? Software engineers advocate many different technologies and practices, and the debate on how to accomplish this has gone on for many years and may continue forever.

Page 14: An Introduction to Software Engineering CSCI 3333 Data Structures

Software Life Cycle Models

With large numbers of software projects not meeting their expectations in terms of functionality, cost, or delivery schedule, effective project management is proving difficult. This has resulted in people apply project management techniques to writing software.

Page 15: An Introduction to Software Engineering CSCI 3333 Data Structures

15

Software Life Cycle Models

Some examples Waterfall model (Royce) Spiral model (Boehm) Rational Unified Process (Booch, Jacobson,

Rumbaugh)

Software Engineering

Page 16: An Introduction to Software Engineering CSCI 3333 Data Structures

Waterfall Model

In Royce's original waterfall model, the following phases are followed perfectly in order:

Requirements specification Design Construction (aka:

implementation or coding) Integration Testing and debugging (aka:

verification) Installation Maintenance

Page 17: An Introduction to Software Engineering CSCI 3333 Data Structures

Waterfall Model 2

Some drawbacks: Difficult to make revisions due to

unforeseen problems: no feedback loop Focus on paper documents

Major contributions: identify key activities.

Page 18: An Introduction to Software Engineering CSCI 3333 Data Structures

Key Software Activities

5 Phases of Software Life Cycle:

Phase 1: Problem Analysis and SpecificationPhase 2: DesignPhase 3: Implementation (Coding) Phase 4: Testing, Execution and DebuggingPhase 5: Maintenance

Page 19: An Introduction to Software Engineering CSCI 3333 Data Structures

Phase 1: Problem Analysis and Specification

Computer Science programming assignment -

specific statement of problem

quantitative description

clearly defined requirements:

input, output, calculations, test data

Computer Science programming assignment -

specific statement of problem

quantitative description

clearly defined requirements:

input, output, calculations, test data

Easy in CS courses, not always in the real world.

CPSC SomeCourse Assignment 1 The sum-of-the-years digits method of calculating depreciation is illustrated below. $15,000 is to be depreciated over five years. First calculate the “sum-of-the-years digits,” 1 + 2 + 3 + 4 + 5 = 15. Then depreciate 5/15 of $15,000 ($5,000) over the first year, 4/15 of $15,000 ($4,000) over the second year, 3/15 ($3,000) the third year, and so on. Write a program that reads the amount to be depreciated and the number of years over which it is to be depreciated. Then for each year from 1 through the specified number of years, print the year number and the amount of depreciation for that year under appropriate headings. Execute the program with the following data: $15,000 for 3 years; $7,000 for 10 years; $500 for 20 years; $100 for 1year.

Page 20: An Introduction to Software Engineering CSCI 3333 Data Structures

“Real World” request -

general statement of problem

qualitative not quantitative

precision missing for input, output, processing

“Real World” request -

general statement of problem

qualitative not quantitative

precision missing for input, output, processing

To: Bob Byte, Director of Computer Center From: Chuck Cash, V.P. of Scholarships and Financial Aid Date: Wednesday, March 11

Because of new government regulations, we must keep more accurate records of all students currently receiving financial aid and submit regular reports to FFAO (Federal Financial Aid Office). Could we get the computer to do this for us?

Phase 1: Problem Analysis and Specification

Page 21: An Introduction to Software Engineering CSCI 3333 Data Structures

Phase 2: Design

CS courses small systems few hundred lines of

code simple, straightforward self-contained

“Real” world large systems Tens of thousands

of lines of code complex many components

Page 22: An Introduction to Software Engineering CSCI 3333 Data Structures

OOD: Object-Oriented Design

1. Identify the objects in the problem's specification and their types.

2. Identify the operations of the objects (methods) needed to solve the problem.

3. Arrange the operations in a sequence of steps, called an algorithm, which, when applied to the objects, will solve the problem.

Page 23: An Introduction to Software Engineering CSCI 3333 Data Structures

OOD Goals

Robust “Capable of handling unexpected inputs”

Adaptable Able to evolve over time in response to changes

Reusable Code should be reusable in other applications

Components – e.g., code libraries like the Java libraries

Page 24: An Introduction to Software Engineering CSCI 3333 Data Structures

Phase 3: Implementation (Coding)

Select language of implementation Encode the design Verify integration Combining program units into a complete

software system. Ensure quality

programs must be correct, readable, and understandable, that is, well-structured, documented, and stylistic.

Page 25: An Introduction to Software Engineering CSCI 3333 Data Structures

Phase 4: Testing, Execution, and Debugging

Validation: "Are we building the right product?" The software should do what the user really

requires check that documents, program modules, etc.

match the customer's requirements.

Verification: "Are we building the product right?" The software should conform to its specification

check that products are correct, complete, consistent with each other and with those of the preceding phases.

Page 26: An Introduction to Software Engineering CSCI 3333 Data Structures

Errors can occur anytime

Specifications don't accurately reflect given information or the user's needs/requests

Logic errors in algorithms Incorrect coding or integrationFailure to handle boundary data or test

values

Page 27: An Introduction to Software Engineering CSCI 3333 Data Structures

Different kinds of tests required

Unit tests: Each individual program unit works?

Program components tested in isolation

Integration tests : Units combined correctly?

Component interface and information flow tested

System tests: Overall system works correctly?

Page 28: An Introduction to Software Engineering CSCI 3333 Data Structures

Unit testing

Probably the most rigorous and time-intensive

Surely the most fundamental and important

Kinds of errors tested: syntax linking run-time logic

Two major types: Black-box and White-box tests

Page 29: An Introduction to Software Engineering CSCI 3333 Data Structures

Black box or functional test

Outputs produced for various inputs are checked for correctness without considering the internal structure of the program component itself.

Program unit is viewed as a black box that accepts inputs and produces outputs, but the inner workings of the box are not visible.

Page 30: An Introduction to Software Engineering CSCI 3333 Data Structures

White box or structural test

Performance is tested by examining code’s internal structure.

Test data is carefully selected so that specific parts of the program unit are exercised. Boundary test: test data with boundary values Statement coverage test: test cases that cover all the

statement in a program Conditional statement coverage test: test cases that test all

the conditions in the conditional statements.

Page 31: An Introduction to Software Engineering CSCI 3333 Data Structures

Phase 5: Maintenance

Large % of computer center budgets Large % of programmer's time Largest % of software development cost

Why? Includes modifications and enhancements Due to poor structure, poor documentation, poor style

less likely to catch bugs before release make fixing of bugs difficult and time-consuming impede implementation of enhancements

Page 32: An Introduction to Software Engineering CSCI 3333 Data Structures

Some Lessons

Implementation (Coding) A small part of the software lifecycle. Easy to outsource (or out-shore) than

requirement analysis and design. A program is not successful if it

gives some output. Course assignments are usually not

a good training for the whole software life-cycle.

Page 33: An Introduction to Software Engineering CSCI 3333 Data Structures

Iterative Process

Waterfall model: no visible feedback loop.

Iterative models/overlapping phases: Spiral model – top down and bottom up

concepts Rational Unified Process

Page 34: An Introduction to Software Engineering CSCI 3333 Data Structures

Rational Unified Process

An example of an iterative process

Page 35: An Introduction to Software Engineering CSCI 3333 Data Structures

New Factors

The Internet age (1994-2003) Browsers as the universal client agents.

Web 2.0 (~2004-present) New software distribution: software as

a service perpetual beta Machine to machine interaction

Page 36: An Introduction to Software Engineering CSCI 3333 Data Structures

New Trends: Lightweight Methodologies

Examples: Extreme Programming Agile Software Development Scrum list for software project

management - iterative incremental process of software development

Page 37: An Introduction to Software Engineering CSCI 3333 Data Structures

What should we do?

Aware of the software life-cycle. Aware of the new forces affecting

software development. Aware of the new software

methodologies. Eventually need to learn:

Modeling Language: e.g. UML Software Process

Page 38: An Introduction to Software Engineering CSCI 3333 Data Structures

Relevance to our course

Software will always need to be correct and efficient: Need to learn data structures and

algorithms well.

Page 39: An Introduction to Software Engineering CSCI 3333 Data Structures

Questions?