22
COMP 6710 Course Notes Slide 1-1 Auburn University Computer Science and Software Engineering Course Notes Set 1: Introduction to Software Engineering Computer Science and Software Engineering Auburn University

COMP 6710 Course NotesSlide 1-0 Auburn University Computer Science and Software Engineering Course Notes Set 1: Introduction to Software Engineering Computer

  • View
    217

  • Download
    1

Embed Size (px)

Citation preview

COMP 6710 Course NotesSlide 1-1Auburn UniversityComputer Science and Software Engineering

Course Notes Set 1:

Introduction toSoftware Engineering

Computer Science and Software EngineeringAuburn University

COMP 6710 Course NotesSlide 1-2Auburn UniversityComputer Science and Software Engineering

Desirable Attributes of Software

• Maintainability– It should be possible to evolve software to

meet the changing needs of customers.

• Dependability– Software dependability includes a variety

of things such as reliability, security and safety. Dependable software should not cause physical or economic damage in the event of a system failure.

COMP 6710 Course NotesSlide 1-3Auburn UniversityComputer Science and Software Engineering

Desirable Attributes of Software

• Efficiency– Software should not waste system resources

such as memory and processor cycles.

• Usability– Software should have an appropriate user

interface and adequate documentation.

• Etc., etc.

Achieving these qualities in software is hard to do!

COMP 6710 Course NotesSlide 1-4Auburn UniversityComputer Science and Software Engineering

No Silver Bullet

But as we look to the horizon of a decade hence, we see no silverbullet. There is no single development, either in technology ormanagement technique, which by itself promises even one orderof magnitude improvement in productivity, in reliability, in simplicity.Not only are there no silver bullets in view, the very nature of softwaremakes it unlikely there will be any.

Frederick Brooks, The Mythical Man Month

COMP 6710 Course NotesSlide 1-5Auburn UniversityComputer Science and Software Engineering

Software Characteristics

• Software is a crucial element of our society.• Software is becoming ubiquitous and invisible.• Software is both a product and a vehicle for delivering a

product.• Software consists of programs, documents, and data.• Software is developed or engineered, not manufactured.• Software is primarily custom-built, not assembled from

existing components.• Software deteriorates, but doesn’t “wear out.”• Software has a “chronic affliction” [Pressman 5th Ed].

COMP 6710 Course NotesSlide 1-6Auburn UniversityComputer Science and Software Engineering

Software Death

idealized curve

change

actual curve

Failurerate

Time

increased failurerate due to side effects

[Adapted from Figure 1.2, Pressman5E]

COMP 6710 Course NotesSlide 1-7Auburn UniversityComputer Science and Software Engineering

Software Has Changed

• Ran on single processor, usually a mainframe

• Input was linear, sequential• Output was alphanumeric• System design dominated by

– Transform systems– Transaction systems

• Delivered across a network; distributed, multiple processors; client-server.

• Input often from multiple concurrent sources

• Output must meet demands for sophisticated visualization

• In addition to functional requirements, must also address:– network control– security– UI issues– data/object management

Demarco: We’ve solved the easy problems first. The ones that are left are the hard ones.

Then: Now:

COMP 6710 Course NotesSlide 1-8Auburn UniversityComputer Science and Software Engineering

Major Agents of Change

• Compressed time-to-market, tight labor market

• Hardware costs down, software costs up• Powerful computing in small boxes• Pervasive networking• Ubiquity of object technology• Expectation of sophisticated GUIs• Inappropriateness of classic software

development processAdapted from “Toward a Discipline of Software Engineering,” IEEE Software, Vol. 13, No. 6.

COMP 6710 Course NotesSlide 1-9Auburn UniversityComputer Science and Software Engineering

Problems• Many critical systems are controlled or influenced by

legacy software which is difficult or impossible to maintain, not understandable, or irreplaceable.

• Little data exists on the process of developing software.• Software quality is difficult to define and measure.• Software doesn’t have spare parts.• Software project managers are sometimes far removed

from software development.• Software developers are sometimes unaware of

engineering approaches to developing software.• Programming as an art versus programming as a

science.• Many myths pervade the software development culture.

COMP 6710 Course NotesSlide 1-10Auburn UniversityComputer Science and Software Engineering

… I would try to make some improvements in the codes. Many codes or subroutines are more than 40 years old, and the guys who wrote them are either in heaven or hell. Some codes are impossible to refine because nobody knows what the original programmer was trying to do. To figure it out, you have to read the code in FORTRAN line by line, to try to understand the underlying mathematics picture – and these codes are hundreds of thousands, even millions of line long. Once someone found a bug in the code and removed it – but then the code wouldn’t work. So they put the bug back in, even though no one knew why the program work that way.

(by a nuclear scientist) - Page 113, My Country verse Me, Dr. Wen-ho Lee, Hyperion Pub., 2001

COMP 6710 Course NotesSlide 1-11Auburn UniversityComputer Science and Software Engineering

Myths

• A general statement of objectives is enough to get going. Fill in the details later.

• Project requirements continually change, but change can be easily accommodated because software is flexible.

• Once a program is developed, tested, and delivered, the developer’s job is done.

• Until a program is running, there is no way to assess its quality.

• The only deliverable for a successful project is a working program.

• We can always add more programmers if the project gets behind.

• All programmers are created equal.

[Adapted from public domain SEI course notes by Carter and Conn]

COMP 6710 Course NotesSlide 1-12Auburn UniversityComputer Science and Software Engineering

What is Software Engineering?

codingcoding

testingtesting

maintenancemaintenancedesigndesign

structured analysisstructured analysis

dataflow diagramsdataflow diagrams

structure chartsstructure charts

software quality assurancesoftware quality assurance

configuration managementconfiguration management

project managementproject management

CASECASE

requirementsrequirements

KLOCKLOC

metricsmetrics

COMP 6710 Course NotesSlide 1-13Auburn UniversityComputer Science and Software Engineering

Software Engineering

• The establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines. [Bauer]

• The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. [IEEE Standard 610.12-1990]

a focus on quality

process

methods

tools

[Adapted from Pressman 5th Ed]

COMP 6710 Course NotesSlide 1-14Auburn UniversityComputer Science and Software Engineering

Principles of Software Engineering

• Abstraction• Analysis and Design Methods and

Notations• Prototyping• Software Architecture• Reuse• Measurement• Tools and Environments• Software Process

Adapted from “Toward a Discipline of Software Engineering,” IEEE Software, Vol. 13, No. 6.

COMP 6710 Course NotesSlide 1-15Auburn UniversityComputer Science and Software Engineering

Principles

• Abstraction– Primary tool for managing complexity– View a system in terms of layers or a

hierarchy or abstraction

COMP 6710 Course NotesSlide 1-16Auburn UniversityComputer Science and Software Engineering

Principles

• Analysis and Design Methods and Notations– Notations

• A formal way of documenting and communicating design decisions

• Issues: Cognitive aspects, readership skills, no standards

– Methods• A formal or semi-formal approach to building

models• Allows for completeness and consistency checks

(ideally)

COMP 6710 Course NotesSlide 1-17Auburn UniversityComputer Science and Software Engineering

Principles

• Prototyping– Help identify requirements– Explore feasibility– Simulate functions to be implemented

in hardware

COMP 6710 Course NotesSlide 1-18Auburn UniversityComputer Science and Software Engineering

Principles

• Software Architecture– Specifies a system in terms of

architectural units and how they relate

– Good architecture aids implementation, testing, maintenance

– Becoming a sub-discipline (e.g., Garlan and Shaw)

COMP 6710 Course NotesSlide 1-19Auburn UniversityComputer Science and Software Engineering

Principles• Reuse

– Make use of commonalities among systems to reuse requirements, designs, code, test scripts, etc.

– Reusable components can be a business asset– Barriers to reuse:

• Can be faster to build a small component from scratch• May take extra time to build a reusable component• Potential adopters may hesitate due to SQA concerns• Liability issues in the event of failure or needed

updates• Program understanding issues

COMP 6710 Course NotesSlide 1-20Auburn UniversityComputer Science and Software Engineering

Principles

• Measurement– Quantification of attributes of product

and process– Critical for assessment and

improvement

COMP 6710 Course NotesSlide 1-21Auburn UniversityComputer Science and Software Engineering

Principles

• Tools and Environments– Automated Software Engineering– Vertical v. Horizontal tools– Critical issues include

• Integration• repositories

COMP 6710 Course NotesSlide 1-22Auburn UniversityComputer Science and Software Engineering

Principles

• Software Process– The organization and discipline of the

activities of developing software– Process diversity needed