Software Engineering a

Document Sample
Software Engineering a Powered By Docstoc
					  SEC 308 Yazılım Mühendisliği

Software and Software

                  Lecture Plan
0 What is Software?
0 Why Software Engineering?
0 What is Software Engineering?
0 Who does Software Engineering?
0 Why does Software Fail?
0 Software Failure Examples
0 Software Myths

                What is Software?
0 Software is: (1) instructions (computer programs) that
  when executed provide desired features, function, and
  performance; (2) data structures that enable the
  programs to adequately manipulate information and (3)
  documentation that describes the operation and use of
  the programs.
0 Computer programs and associated documentation

0 Software = Program + Documentation
            + Operating Procedures
               Software Product
0 Software product is a product designated for
  delivery to the user

            Documentation Manuals
0 Documentation consists of different types of manuals are

       Documentation Manuals (cont.)
0 Documentation consists of different types of manuals are

                Software Characteristics
0 Software is developed or engineered, it is not manufactured in the
  classical sense.
0 Software doesn't "wear out.“, but it does deteriorate.
0 Although the industry is moving toward component-based
  construction, most software continues to be custom-built.
   Failure curve for hardware

             Software’s Dual Role
0 Software is a product
   0 Delivers computing potential
   0 Produces, manages, acquires, modifies, displays, or
     transmits information
0 Software is a vehicle for delivering a product
   0 Supports or directly provides system functionality
   0 Controls other programs (e.g., an operating system)
   0 Effects communications (e.g., networking software)
   0 Helps build other software (e.g., software tools)

                   Software Product
0 Software products may be developed for a particular
  customer or may be developed for a general market
0 Software products may be
  0 Generic - developed to be sold to a range of different
  0 Bespoke (custom) - developed for a single customer according
    to their specification

Software Applications

      Software – New Categories
0 Open world computing—pervasive,
  distributed computing
0 Ubiquitous computing—wireless networks
0 Netsourcing—the Web as a computing engine
0 Open source—”free” source code open to the
  computing community

                      Legacy Software
0 Were developed decades ago and have been continually
  modified to meet changes in business requirements and
  computing platforms.
0 Why must it change?
   0   software must be adapted to meet the needs of new computing
       environments or technology.
   0   software must be enhanced to implement new business requirements.
   0   software must be extended to make it interoperable with other more
       modern systems or databases.
   0   software must be re-architected to make it viable within a network

         Some attributes of good software
The software should deliver the required functionality
and performance to the user
   Maintainability
        Software must evolve to meet changing needs
   Dependability
        Software must be trustworthy
   Efficiency
        Software should not make wasteful use of system resources
   Usability
        Software must be usable by the users for which it was designed

Some Software Development Questions
0 Why does it take so long to get software finished?
0 Why are development costs so high?
0 Why can’t we find all errors before giving software to
0 Why do we spend so much time and effort
  maintaining existing programs?
0 Why do we have difficulty in measuring progress as
  software is being developed and maintained?

Why is Software Development Hard?
0 Millions of lines of code
  0 Single failure  entire system fails
0 Hundreds of developers
  0 Many of whom enter/leave project at different
0 Requirement change rapidly
  0 Software may be obsolete before it is completed
  Possibly most complex human activity ever!
  Why Software Engineering? (cont.)
0 The problem is complexity
0 Complexity leads to failure
   0 Software takes too long to develop
   0 More costly than expected
   0 Not reliable enough
   0 Does not do what users want or need
   0 Difficult to maintain/modify as needs change
   0 The majority of commercial software projects started are never
 Software engineering is about managing this complexity.

     Why Software Engineering?
0 Important to distinguish “easy” systems (one
  developer, one user, experimental use only) from
  “hard” systems (multiple developers, multiple users,
0 Experience with “easy” systems is misleading
   0 One person techniques do not scale up
0 Analogy with bridge building:
  0 Over a stream = easy, one person job
  0 Over River Nile … ?   (the techniques do not scale)

Why Software Engineering? (cont.)

    What is Software Engineering?
0 Applying engineering principles to software
  0 Build software like we build bridges!

0 IEEE Definition:
 “Software Engineering is the application of a systematic,
 disciplined, quantifiable approach to the development,
 operation, and maintenance of software; that is, the
 application of engineering to software”
             Engineering Principles
0 Systematic
   0 Clear process followed by all involved
     0 Only way to coordinate 100’s of developers

0 Quantifiable
   0 Can accurately measure/estimate key qualities
     0 Cost and time to develop software
     0 Correctness, reliability, usability of final product
     Engineering Principles (cont.)
0 Disciplined
  0 Commitment to quality by all involved
     0 Developers, management, etc.

  0 Ethics
     0 Do not accept project that you do not have the skills to
       complete correctly
     0 Do not release product until you know it meets standards
What is software engineering? (cont.)
Software engineering is an engineering discipline
 which is concerned with all aspects of software
Software engineers should
  0 adopt a systematic and organised approach to their
  0 use appropriate tools and
    techniques depending on
    0 the problem to be solved,
    0 the development constraints and
    0 the resources available

What is software engineering? (cont.)
0 At the first conference on software engineering in
  1968, Fritz Bauer defined software engineering as
  “The establishment and use of sound engineering
  principles in order to obtain economically developed
  software that is reliable and works efficiently on real
0 Stephen Schach defined the same as “A discipline
  whose aim is the production of quality software,
  software that is delivered on time, within budget, and
  that satisfies its requirements”.

What is the difference between software
 engineering and computer science?
 0 Computer science is concerned with theory and
   fundamentals; software engineering is concerned
   with the practicalities of developing and delivering
   useful software.
 0 Computer science theories are still insufficient to act
   as a complete underpinning for software engineering
   (unlike e.g. physics and electrical engineering).

 Where do software engineers fit in?
0 Computer science: focusing on computer hardware
  and programming languages
0 Software engineering: focusing on computer as a
  problem-solving tool
0 Relationship between
  computer science and
  software engineering

What is the difference between software
 engineering and system engineering?
 0 System engineering is concerned with all aspects of
   computer-based systems development including
   hardware, software and process engineering. Software
   engineering is part of this process concerned with
   developing the software infrastructure, control,
   applications and databases in the system.
 0 System engineers are involved in system specification,
   architectural design, integration and deployment.

Some Realities of Software Engineering

0 a concerted effort should be made to
 understand the problem before a
 software solution is developed
0 design becomes a pivotal activity
0 software should exhibit high quality
0 software should be maintainable

A Layered Technology



      process model

     a “quality” focus

    Software Engineering

                 A Process Framework
Process framework
   Framework activities – applied iteratively as a project
       •   Communication
       •   Planning
       •   Modeling
       •   Construction
       •   Deployment
   Umbrella Activities – manage and control progress, quality,
   change and risk
       •   Software project management
       •   Formal technical reviews
       •   Software quality assurance
       •   Software configuration management
       •   Work product preparation and production
       •   Reusability management
       •   Measurement                                           30
       •   Risk management
       What is a software process?
0 A set of activities whose goal is the development or
  evolution of software
0 Fundamental activities in all software processes are:
  0 Specification - what the system should do and its
    development constraints
  0 Development - production of the software system
    (design and implementation)
  0 Validation - checking that the software is what the
    customer wants
  0 Evolution - changing the software in response to
    changing demands

  What is a software process model?
Software Process Model is a simplified representation of a
  software process, presented from a specific perspective
0 Examples of process perspectives:
  Workflow perspective - represents inputs, outputs and dependencies
  Data-flow perspective - represents data transformation activities
  Role/action perspective - represents the roles/activities of the people
    involved in software process
0 Generic process models
  0   Waterfall
  0   Iterative development
  0   Agile Development
  0   Component-based software engineering

    What are the costs of software
0 Roughly 60% of costs are development costs, 40%
 are testing costs. For custom software, evolution
 costs often exceed development costs
0 Costs vary depending on the type of system being
 developed and the requirements of system
 attributes such as performance and system
0 Distribution of costs depends on the development
 model that is used
   Aspects of Software Engineering

0 Problem solving process as a team
0 Software products are large and complex
0 Development requires analysis and synthesis
  0 Analysis: decompose a large problem into smaller,
   understandable pieces
    0 abstraction is the key
  0 Synthesis: build (compose) software from smaller
   building blocks
    0 composition is challenging

Two aspects of Software Engineering:
           The analysis process

Two aspects of Software Engineering:
         The synthesis process

The Essence of Software Engineering
1. Understand the problem (communication
   and analysis).
2. Plan a solution (modeling and software
3. Carry out the plan (code generation).
4. Examine the result for accuracy (testing and
   quality assurance).
          Understand the Problem
0 Who has a stake in the solution to the problem? That is,
  who are the stakeholders?
0 What are the unknowns? What data, functions, and
  features are required to properly solve the problem?
0 Can the problem be compartmentalized? Is it possible
  to represent smaller problems that may be easier to
0 Can the problem be represented graphically? Can an
  analysis model be created?

               Plan the solution
0 Have you seen similar problems before? Are there
  patterns that are recognizable in a potential solution?
  Is there existing software that implements the data,
  functions, and features that are required?
0 Has a similar problem been solved? If so, are elements
  of the solution reusable?
0 Can subproblems be defined? If so, are solutions readily
  apparent for the subproblems?
0 Can you represent a solution in a manner that leads to
  effective implementation? Can a design model be
  created?                                                   39
              Carry out the plan
0 Does the solution conform to the plan? Is source code
  traceable to the design model?
0 Is each component part of the solution provably
  correct? Has the design and code been reviewed, or
  better, have correctness proofs been applied to

              Examine the Result
0 Is it possible to test each component part of the
  solution? Has a reasonable testing strategy been
0 Does the solution produce results that conform to the
  data, functions, and features that are required? Has the
  software been validated against all stakeholder

   Who Does Software Engineering?
0 Participants (stakeholders) in a software
 development project

   What does Software Engineer do?
0 Spend less than 10% of their time writing code
0 Other 90% of their time (partial list)
   0 Eliciting requirements
   0 Analyzing requirements
   0 Writing software requirements documents
   0 Building and analyzing prototypes
   0 Developing software designs
   0 Writing software design documents
   0 Researching software engineering techniques or
     obtaining information about the application domain
   What does Software Engineer do?
0 Other 90% of their time (cont.)
   0 Developing test strategies and test cases
   0 Testing the software and recording the results
   0 Isolating problems and solving them
   0 Learning to use or installing and configuring new
     software and hardware tools
   0 Writing documentation such as user manuals
   0 Attending meetings with colleagues, customers, and
   0 Archiving software and readying it for distribution
    Members of the Development Team
0 Requirement analysts: work with the customers to
    identify and document the requirements
0   Designers: generate a system-level description of what the
    system us supposed to do
0   Programmers: write lines of code to implement the design
0   Testers: catch faults
0   Trainers: show users how to use the system
0   Maintenance team: fix faults that show up later
0   Librarians: prepare and store documents such as software
0   Configuration management team: maintain
    correspondence among various artifacts

  Members of the Development Team
0 Typical roles played by the members of a development

        Why does Software Fail?
0 Software is too expensive
0 Software takes too long to build
0 Software quality is low
0 Software is too complex to support and maintain
0 Software does not age gracefully
0 Not enough highly-qualified people to design and
 build software

                     Software Cost
0 The cost of Change
0 Software projects often go over budget
   0 Hurts the company and the customer
0 Bad for the project/company
   0 Many projects are cancelled
   0 People may get fired or may quit
0 Bad for the final product
   0 Features are not implemented
   0 Bad quality: not enough money to get it right
     0 Expensive in the long run

                    Software Time
0 Software projects often take too long
0 Loss of revenue and market share
   0 Both for the vendor and for the client
   0 E.g.: baggage system at Denver airport
     0 Cost: $1 million per day
0 Projects may become obsolete
   0 Technology changes rapidly
   0 Competing products already on the market
0 Not enough time to implement all features and to ensure

                    Some Questions
0 Studies of IT projects by the Standish Group
  0 80000+ applications
0 What percentage of projects were
0 What was the cost/time overrun?

             Year   Year   Year   Year   Year   Year   Year   Year
             2009   2006   2004   2002   2000   1998   1996   1994
Successful   32%    35%    29%    34%    28%    26%    27%    16%
Challenged   44%    19%    53%    15%    23%    28%    40%    31%
Failed       24%    46%    18%    51%    49%    46%    33%    53%

                 Success Rate
0 2009/2010 Standish Chaos Report, Standish
  Group, indicating:

        Overruns and Deficiencies
0 Cost overruns: 189% of original estimate
0 Time overruns: 222% of original estimate
0 Feature deficiencies:
only 61% of the originally
specified features were

            Some ideas of Failure
0 The application doesn’t work – catastrophic failure
0 The delivery overruns the schedule
0 Project costs exceed budget
0 Insufficient functionality
0 Dissatisfied users
0 Poor performance
0 Lacks scalability
0 Fails to deliver an appropriate Return on Investment
        Some ideas for Challenged
0 Exceeds budget, but within manageable tolerances
0 Overruns, but within manageable tolerances
0 Non-essential functionality is defective
0 Non-essential functionality is missing
0 Flaws have workarounds
0 Fewer features and functions than originally specified

             Why Projects Fail/Succeed?
The bottom 10 project failure                The top 10 project success
factors                                      factors
   1.  Incomplete requirements                    1. User involvement
   2.  Lack of user involvement                   2. Executive management
   3.  Lack of resources                              support
   4.  Unrealistic expectations                   3. Clear statement of
   5.  Lack of executive support                      requirements
                                                  4. Proper planning
   6.  Changing requirements and
       specifications                             5. Realistic expectations
   7. Lack of planning                            6. Smaller project milestones
   8. Didn’t need it any longer                   7. Competent staff
   9. Lack of it management                       8. Ownership
   10. Technology illiteracy                      9. Clear vision & objectives
                                                  10. Hard-working, focused staff
        (Source: Turning Chaos into Success,", December 1999)       55
                 Software Quality
0 Software defects result in failures
   0 Example 1: Windows crashes while you play a game at
   0 Example 2: The software that controls a nuclear reactor
0 Direct loss of life and money
   0 Millions of dollars
0 Indirect loss: missed opportunities
   0 e.g. online purchases are down for a day
0 Loss of credibility, bad publicity

      Software Failures Examples
0 Therac-25 (1985-1987): six people overexposed during
  treatments for cancer
0 Taurus (1993): the planned automatic transaction
  settlement system for London Stock Exchange cancelled
  after five years of development
0 Ariane 5 (1996): rocket exploded soon after its launch due
  error conversion (64-bit floating point into 16-bit signed
0 The Mars Climate Orbiter assumed to be lost by NASA
  officials (1999): different measurement systems (Imperial
  and metric)

             Example: Ariane 5
0 Ariane 5 rocket
0 Built by the European Space Agency
0 First launch: June 1996
0 Crashed 40 seconds after launch
0 Cost: $500 million
0 No people on board
0 Problem: software failure

                 What Happened?
0 Overflow when velocity was converted from 64-bit
  floating point to 16-bit signed integer
0 The exception was not caught
  0 Inertial Reference System failed
     0 Backup system failed for the same reason
  0 Rocket went off course
  0 Self-destruct module (correctly) activated
0 The code was OK for Ariane 4
  0 Same software, different environment

How Has Software Engineering Changed?
0 The key factors that have changed the software
  development (Wasserman's Seven Key Factors)

  What are the key challenges facing
       software engineering?
Software engineering in the 21st century
 faces three key challenges:
0 Legacy systems
   0 Old, valuable systems must be maintained and updated
0 Heterogeneity
   0 Systems are distributed and include
     a mix of hardware and software
0 Delivery
   0 There is increasing pressure
     for faster delivery of software

                Software Myths
0 Affect managers, customers (and other non-technical
  stakeholders) and developers
0 Are believable because they often have elements of
  but …
0 Invariably lead to bad decisions,
  therefore …
0 Insist on reality as you navigate your way through
  software engineering

                     Manager Myths
0 Management may be confident about good standards and clear
  procedures of the company.
   0 But the taste of any food item is in the eating; not in the Recipe!
0 Company has latest computers and state-of-the-art software
  tools, so we shouldn’t worry about the quality of the product.
   0 The infrastructure is only one of the several factors that
     determine the quality of the product!
0 Addition of more software specialists, those with higher skills
  and longer experience may bring the schedule back on the track!
   0 Unfortunately, that may further delay the schedule!
0 Software is easy to change
   0 The reality is totally different.
0 Computers provide greater reliability than the devices they
   0 This is not always true.
                  Developer Myths
0 Once the software is demonstrated, the job is done.
   0 Usually, the problems just begin!
0 Software quality can not be assessed before testing.
   0 However, quality assessment techniques should be used
     through out the software development life cycle.
0 The only deliverable for a software development project is
  the tested code.
   0 Tested code is only one of the deliverable!
0 Aim is to develop working programs
   0 Those days are over. Now objective is to develop good quality
     maintainable programs!

                  Customer Myths

0 A 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.
  0 If we do so, we are heading towards a disaster.
0 Software with more features is better software
0 Software can work right the first time
  0 Both are only myths!

Question                                    Answer
What is software?                           Computer programs and associated documentation.
                                            Software products may be developed for a particular
                                            customer or may be developed for a general market.
What are the attributes of good software?   Good software should deliver the required functionality
                                            and performance to the user and should be
                                            maintainable, dependable and usable.
What is software engineering?               Software engineering is an engineering discipline that is
                                            concerned with all aspects of software production.
What are the fundamental         software Software specification, software development, software
engineering activities?                   validation and software evolution.
What is the difference between software Computer science focuses on theory and fundamentals;
engineering and computer science?       software engineering is concerned with the practicalities
                                        of developing and delivering useful software.
What is the difference between software System engineering is concerned with all aspects of
engineering and system engineering?     computer-based       systems     development     including
                                        hardware, software and process engineering. Software
                                        engineering is part of this more general process.
What are the key challenges facing Coping with increasing diversity, demands for reduced
software engineering?              delivery times and developing trustworthy software.
What are the        costs   of   software Roughly 60% of software costs are development costs,
engineering?                              40% are testing costs. For custom software, evolution
                                          costs often exceed development costs.

Shared By: