SEC 308 Yazlm Mhendislii Software and Software Engineering

  • Slides: 66
Download presentation
SEC 308 Yazılım Mühendisliği Software and Software Engineering 1

SEC 308 Yazılım Mühendisliği Software and Software Engineering 1

Lecture Plan 0 What is Software? 0 Why Software Engineering? 0 What is 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 2

What is Software? 0 Software is: (1) instructions (computer programs) that when executed provide

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 3

Software Product 0 Software product is a product designated for delivery to the user

Software Product 0 Software product is a product designated for delivery to the user 4

Documentation Manuals 0 Documentation consists of different types of manuals are 5

Documentation Manuals 0 Documentation consists of different types of manuals are 5

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

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

Software Characteristics 0 Software is developed or engineered, it is not manufactured in the

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 7

Software’s Dual Role 0 Software is a product 0 Delivers computing potential 0 Produces,

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 0 Supports or directly provides system functionality Controls other programs (e. g. , an operating system) Effects communications (e. g. , networking software) Helps build other software (e. g. , software tools) 8

Software Product 0 Software products may be developed for a particular customer or may

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 customers 0 Bespoke (custom) - developed for a single customer according to their specification 9

Software Applications 10

Software Applications 10

Software – New Categories 0 Open world computing—pervasive, distributed computing 0 Ubiquitous computing—wireless networks

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 11

Legacy Software 0 Were developed decades ago and have been continually modified to meet

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 0 software must be adapted to meet the needs of new computing environments or technology. software must be enhanced to implement new business requirements. software must be extended to make it interoperable with other more modern systems or databases. software must be re-architected to make it viable within a network environment. 12

Some attributes of good software The software should deliver the required functionality and performance

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

Some Software Development Questions 0 Why does it take so long to get software

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 customer? 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? 14

15

15

Why is Software Development Hard? 0 Millions of lines of code 0 Single failure

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 times 0 Requirement change rapidly 0 Software may be obsolete before it is completed Possibly most complex human activity ever! 16

Why Software Engineering? (cont. ) 0 The problem is complexity 0 Complexity leads to

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 completed Software engineering is about managing this complexity. 17

Why Software Engineering? 0 Important to distinguish “easy” systems (one developer, one user, experimental

Why Software Engineering? 0 Important to distinguish “easy” systems (one developer, one user, experimental use only) from “hard” systems (multiple developers, multiple users, products) 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) 18

Why Software Engineering? (cont. ) 19

Why Software Engineering? (cont. ) 19

What is Software Engineering? 0 Applying engineering principles to software development 0 Build software

What is Software Engineering? 0 Applying engineering principles to software development 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

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

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

What is software engineering? (cont. ) Software engineering is an engineering discipline which is concerned with all aspects of software production Software engineers should 0 adopt a systematic and organised approach to their work 0 use appropriate tools and techniques depending on 0 the problem to be solved, 0 the development constraints and 0 the resources available 23

What is software engineering? (cont. ) 0 At the first conference on software engineering

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 machines”. 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”. 24

What is the difference between software engineering and computer science? 0 Computer science is

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). 25

Where do software engineers fit in? 0 Computer science: focusing on computer hardware and

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 26

What is the difference between software engineering and system engineering? 0 System engineering is

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. 27

Some Realities of Software Engineering 0 a concerted effort should be made to understand

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 28

A Layered Technology tools methods process model a “quality” focus Software Engineering 29

A Layered Technology tools methods process model a “quality” focus Software Engineering 29

A Process Framework Process framework Framework activities – applied iteratively as a project progresses

A Process Framework Process framework Framework activities – applied iteratively as a project progresses • • • 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 Risk management 30

What is a software process? 0 A set of activities whose goal is the

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 31

What is a software process model? Software Process Model is a simplified representation of

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 0 Waterfall Iterative development Agile Development Component-based software engineering 32

What are the costs of software engineering? 0 Roughly 60% of costs are development

What are the costs of software engineering? 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 reliability 0 Distribution of costs depends on the development model that is used 33

Aspects of Software Engineering 0 Problem solving process as a team 0 Software products

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 34

Two aspects of Software Engineering: The analysis process 35

Two aspects of Software Engineering: The analysis process 35

Two aspects of Software Engineering: The synthesis process 36

Two aspects of Software Engineering: The synthesis process 36

The Essence of Software Engineering Practice 1. Understand the problem (communication and analysis). 2.

The Essence of Software Engineering Practice 1. Understand the problem (communication and analysis). 2. Plan a solution (modeling and software design). 3. Carry out the plan (code generation). 4. Examine the result for accuracy (testing and quality assurance). 37

Understand the Problem 0 Who has a stake in the solution to the problem?

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 understand? 0 Can the problem be represented graphically? Can an analysis model be created? 38

Plan the solution 0 Have you seen similar problems before? Are there patterns that

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

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 algorithm? 40

Examine the Result 0 Is it possible to test each component part of the

Examine the Result 0 Is it possible to test each component part of the solution? Has a reasonable testing strategy been implemented? 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 requirements? 41

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

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

What does Software Engineer do? 0 Spend less than 10% of their time writing

What does Software Engineer do? 0 Spend less than 10% of their time writing code 0 Other 90% of their time (partial list) 0 0 0 0 Eliciting requirements Analyzing requirements Writing software requirements documents Building and analyzing prototypes Developing software designs Writing software design documents Researching software engineering techniques or obtaining information about the application domain 43

What does Software Engineer do? (cont. ) 0 Other 90% of their time (cont.

What does Software Engineer do? (cont. ) 0 Other 90% of their time (cont. ) Developing test strategies and test cases Testing the software and recording the results Isolating problems and solving them 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 supervisors 0 Archiving software and readying it for distribution 0 0 44

Members of the Development Team 0 Requirement analysts: work with the customers to identify

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 requirements 0 Configuration management team: maintain correspondence among various artifacts 45

Members of the Development Team (cont. ) 0 Typical roles played by the members

Members of the Development Team (cont. ) 0 Typical roles played by the members of a development team 46

Why does Software Fail? 0 Software is too expensive 0 Software takes too long

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 47

Software Cost 0 The cost of Change 0 Software projects often go over budget

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 48

Software Time 0 Software projects often take too long 0 Loss of revenue and

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 quality 49

Some Questions 0 Studies of IT projects by the Standish Group 0 80000+ applications

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 2009 Year 2006 Year 2004 Year 2002 Year 2000 Year 1998 Year 1996 Year 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% 50

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

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

Overruns and Deficiencies 0 Cost overruns: 189% of original estimate 0 Time overruns: 222%

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 implemented 52

Some ideas of Failure 0 The application doesn’t work – catastrophic failure 0 The

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 (ROI) 53

Some ideas for Challenged 0 Exceeds budget, but within manageable tolerances 0 Overruns, but

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 54

Why Projects Fail/Succeed? The bottom 10 project failure factors 1. 2. 3. 4. 5.

Why Projects Fail/Succeed? The bottom 10 project failure factors 1. 2. 3. 4. 5. 6. Incomplete requirements Lack of user involvement Lack of resources Unrealistic expectations Lack of executive support Changing requirements and specifications 7. Lack of planning 8. Didn’t need it any longer 9. Lack of it management 10. Technology illiteracy The top 10 project success factors 1. User involvement 2. Executive management support 3. Clear statement of requirements 4. Proper planning 5. Realistic expectations 6. Smaller project milestones 7. Competent staff 8. Ownership 9. Clear vision & objectives 10. Hard-working, focused staff (Source: Turning Chaos into Success, " softwaremag. com, December 1999) 55

Software Quality 0 Software defects result in failures 0 Example 1: Windows crashes while

Software Quality 0 Software defects result in failures 0 Example 1: Windows crashes while you play a game at home 0 Example 2: The software that controls a nuclear reactor crashes 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 56

Software Failures Examples 0 Therac-25 (1985 -1987): six people overexposed during treatments for cancer

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 integer) 0 The Mars Climate Orbiter assumed to be lost by NASA officials (1999): different measurement systems (Imperial and metric) 57

Example: Ariane 5 0 Ariane 5 rocket 0 Built by the European Space Agency

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 58

What Happened? 0 Overflow when velocity was converted from 64 -bit floating point to

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 59

How Has Software Engineering Changed? 0 The key factors that have changed the software

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

What are the key challenges facing software engineering? Software engineering in the 21 st

What are the key challenges facing software engineering? Software engineering in the 21 st 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 61

Software Myths 0 Affect managers, customers (and other non-technical stakeholders) and developers 0 Are

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

Manager Myths 0 Management may be confident about good standards and clear procedures of

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 replace 0 This is not always true. 63

Developer Myths 0 Once the software is demonstrated, the job is done. 0 Usually,

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! 64

Customer Myths 0 A general statement of objectives is sufficient to get started with

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! 65

Question Answer What is software? Computer programs and associated documentation. Software products may be

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 engineering activities? Software specification, software development, software validation and software evolution. What is the difference between software engineering and computer science? Computer science focuses on theory and fundamentals; software engineering is concerned with the practicalities of developing and delivering useful software. What is the difference between software engineering and system engineering? System engineering is concerned with all aspects of 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 software engineering? Coping with increasing diversity, demands for reduced delivery times and developing trustworthy software. What are the engineering? Roughly 60% of software costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs. 66 costs of software