Introduction to Software Engineering
51 Slides495.50 KB
Introduction to Software Engineering
Introduction to Software Engineering Outline Part 1 - Background and Introductory Information – Software Engineering History – Software Development Statistics – What is Software Engineering? Part 2 - Software Engineering Concepts – – – – – – – Software Engineering Relationships Principles Development Methods & Techniques Management Methods & Techniques Life-Cycle Methodologies Software Engineering Processes & Procedures Automated Tools
Software Engineering History Computers were invented in the 1940’s Then - computing programming languages were invented Eventually - program language training was developed However, training was unable to provide sufficient methods & techniques for developing large reliable systems on time & within budget By the late 1960’s, digital computers were less than 25 years old and already facing a software crisis Software Engineering term first emerged as title of a 1968 NATO conference [1]
Software Development Statistics 1979 General Accounting Office Report [2] – 50% of contracts had cost overruns – 60% of contracts had schedule overruns – 45% of software contracted for could not be used – 29% of software was paid for and never delivered – 22% of software contracted for had to be reworked/modified to be used
Software Development Statistics Other Studies – 1982 - Tom DeMarco » 25% of large systems development projects never finished – 1991 Capers Jones Study » Average Management Information System* project is 1 year late and 100% over budget Software crisis stubbornly persists * Management Information System - a system for providing information to support organizational activities and management functions.
Summary While there has been some progress, there still are serious problems to overcome in software development – schedule and cost estimates are still inaccurate – productivity of developers is not keeping up with the demand – quality of software is not meeting customer expectations Still a need to bring engineering discipline into the software process
Software Engineering Definition 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 Std 610.12-1990] Institution of engineering discipline in the manufacturing of computer software
Part 2 - Software Engineering Concepts Part 1 - Background and Introductory Information Part 2 - Software Engineering Concepts – – – – – – – Software Engineering Relationships Principles Development Methods & Techniques Management Methods & Techniques Life-Cycle Methodologies Software Engineering Processes & Procedures Automated Tools
Software Engineering Relationships Automated tools Processes & procedures Life-cycle methodologies Methods & techniques Principles
Selected Software Engineering Principles Rigor and Formality Modularity Abstraction Anticipation of Change Generality Incrementality
Methods & Techniques Automated tools Processes & procedures Life-cycle methodologies Methods & techniques Principles
Basic Problem Solving Flow WHAT HOW DO TEST USE
Development Methods & Techniques Development Methods & Techniques System Requirements Engineering Analysis Design Software Testing Implementation Verification & Validation Management Methods & Techniques Project Planning Project Tracking & Oversight Quality Assurance Configuration Management Integration Maintenance
Systems Engineering Development Methods & Techniques System Requirements Engineering Analysis Design Software Testing Implementation Integration Maintenance Verification & Validation System Design Document User Need Concept Definition Requirements Definition System Design System Requirements Concept Allocated Hardware Reqs Allocated Software Reqs
Software Requirements Analysis Development Methods & Techniques System Requirements Engineering Analysis Design Software Testing Implementation Integration Maintenance Verification & Validation Allocated Software Requirements Review System Requirements Allocated to Software Write Software Requirements SW Requirements Document Review/Inspect Requirements & Write Trouble Reports Perform corrective action Trouble Reports
Software Requirements Checklist Clarity – Is the terminology consistent with the user’s? – Are the requirements clear and unambiguous? – If assumptions that affect implementation have been made, are they stated? Completeness – Have all requirements been assigned a priority? – Have the criteria for assigning priority levels been defined? – Have the requirements been stated for each staged implementation? Consistency – Are the requirements consistent with each other? – Are the requirements here consistent with the requirements in related documents? Testability – Have the test methods (test, demonstration, analysis or inspection) been stated for each requirement?
Requirements Document NASA-STD-2100 [4] Table of Contents 1.0 2.0 3.0 4.0 5.0 Introduction Related Documentation Requirements Approach and Tradeoffs External Interface Requirements Requirements Specification 5.1 Process and Data Requirements 5.2 Performance and Quality Engineering Requirements 5.3 Safety Requirements 5.4 Security and Privacy Requirements 5.5 Implementation Constraints 5.6 Site Adaptation 5.7 Design Goals 6.0 Traceability to Parent’s Design 7.0 Partitioning for Phased Delivery
Object Oriented Software Design* Development Methods & Techniques System Requirements Engineering Analysis Design Software Testing Implementation Integration Maintenance Verification & Validation Software Req. Document Create state diagram for each object Translate reqs into objects and create object model Object Model Data Flow Diagrams State Diagrams Develop Data Flow Diagram for each state *This diagram is based partly on the Rumbaugh OOD technique[5]
Detailed Design DocumentNASA-STD-2100 [4] Table of Contents 1.0 2.0 3.0 4.0 Introduction Related Documentation Detailed Design Approach and Tradeoffs Detailed Design Description 4.1 Compilation Unit Design and Traceability 4.2 Detailed Design of Compilation Units 5.0 External Interface Detailed Design 5.1 Interface Allocation Design 5.2 Physical Interface Design 6.0 Coding and Implementation Notes 7.0 Firmware Support Manual
Software Implementation Design Document Development Methods & Techniques System Requirements Engineering Analysis Design Software Testing Implementation Verification & Validation Translate design into programming language Source code Compile, link, load onto processor corrected source code Load module Run program, identify & fix errors Integration Maintenance
Ada Code -- package specification package Simple IO is procedure Get (Item : out Integer); procedure Put (Item : in Integer); end Simple IO; -- package body with Text IO; package body Simple IO is -- hidden declarations package Int IO is new Text IO.Integer IO (Integer); -- body stubs procedure Get (Item : out Integer) is separate; procedure Put (Item : in Integer) is separate; end Simple IO;
Development Methods & Techniques System Requirements Engineering Analysis Testing Produce test plans and procedures Design Software Testing Implementation Integration Maintenance Verification & Validation Source Code Expected Results Conduct tests & Evaluate Result Test plan and procedures Deliverable Software Debug & fix
Trouble Report [1] Program ID - TR # [2] Current Status [3] Program Title [4] Problem Description [5] Rationale (Proposed Approach to be Taken) Disposition Information [6] Status [7] Schedule
Test Procedures Document NASA-STD-2100 [4] Table of Contents 1.0 Introduction 2.0 Related Documentation 3.0 Test Identification and Objective 4.0 Procedures 5.0 Evaluation Criteria 6.0 Expected Results 7.0 Actual Results 8.0 Abbreviations and Acronyms 9.0 Glossary 10.0 Notes 11.0 Appendices
Development Methods & Techniques Integration System Requirements Engineering Analysis Design Receive & Install Hardware/ Software Tested software Integration Maintenance Verification & Validation Acceptance test plans and procedures Tested hardware Software Testing Implementation Expected results Production system Run acceptance test Integrated system Write trouble reports & fix errors
Development Methods & Techniques Maintenance Production system System Requirements Engineering Analysis Design Software Testing Implementation Verification & Validation Operations Change requests/trouble reports Perform Testing Maintenance Software changes Integration Maintenance
Development Methods & Techniques Verification & Validation System Requirements Engineering Analysis Design Software Testing Implementation Integration Maintenance Verification & Validation Validate Validate Validate Requirements Analysis Verify Design Code Testing Verify Verify Verify
Requirements Traceability Matrix Ref. # 1 Paragraph # Description 5.1.6.1.1 Accelerate from 0 to 60 within 10 seconds under standard conditions. 2 5.1.6.1.1 Maintain cruising speed Module ID 4.1.6.1.1-1 7.1.6-2 3.1.1-3 5.1.1.1-4 within 2 mph of set speed. 3 5.1.6.1.2 Update speed display 10 times per second. 2.1.6.1.2-1
Management Methods & Techniques Development Methods & Techniques System Requirements Engineering Analysis Design Software Implementation Testing Verification & Validation Management Methods & Techniques Project Planning Project Tracking & Oversight Quality Assurance Configuration Management Integration Maintenance
Management Methods & Techniques Management Plan Document NASA-STD-2100 [4] Project Planning Project Tracking & Oversight Quality Assurance Configuration Management 1.0 Introduction 2.0 Related Documentation 3.0 Purpose and Description of the Software 4.0 Resources, Budgets, Schedules, and Organization 4.1 Business Practices Definition and Revision Processes 4.2 Work Breakdown Structure 4.3 Resource Estimation and Allocation to WBS 4.4 Work Authorization 5.0 Acquisition Activities Plan 6.0 Development Activities Plan 7.0 Sustaining Engineering and Operations Activities Plan 8.0 Assurance Plan 9.0 Risk Management Plan 10.0 Configuration Management Plan 11.0 Delivery and Operational Transition Plan 12.0 Abbreviations and Acronyms 13.0 Glossary 14.0 Notes 15.0 Appendices
Project Planning Q1 System Engineering Software Requirements Analysis Software Design Preliminary Detailed Code Test Integration Plan Actual Q2 Management Methods & Techniques Project Planning Project Tracking & Oversight Quality Assurance Configuration Management Q3 Q4 Q1 Q2 Q3
Project Tracking And Oversight Q1 System Engineering Software Requirements Analysis Software Design Preliminary Detailed Code Test Integration Plan Actual Q2 Management Methods & Techniques Project Planning Project Tracking & Oversight Quality Assurance Configuration Management Q3 Q4 Q1 Q2 Q3
Quality Assurance Management Methods & Techniques Project Planning Project Tracking & Oversight Quality Assurance Configuration Management Procedures Products Activity being performed Standards Product Reviews Process Reviews Errors Errors
Configuration Management Change/Trouble Reports Management Methods & Techniques Project Planning Project Tracking & Oversight Quality Assurance Configuration Management Change Control & Impact Analysis Approved Request Development Staff Configuration Management Library Corrected Products Version Controlled Products Copy of Products
Life-Cycle Methodologies Automated tools Processes & procedures Life-cycle methodologies Methods & techniques Principles
Life-cycle Models System Requirements Engineering Analysis Design Software Testing Implementation Verification & Validation Waterfall Incremental Spiral Integration Maintenance
The Waterfall Life-cycle Systems Engineering Req Analysis Design Code Test Integration Maintenance
Incremental Life-Cycle Systems Eng Build 1 Rqmts Analysis Build 2 Rqmts. Analysis Design Rqmts Analysis Build 3 System Implementation Code Test Design Code Rqmts Analysis Design Maintenance Integrate Test Code Integrate Test Integrate
Spiral Life-cycle Determine objectives, alternatives, constraints Evaluate alternatives, identify, resolve risks Risk Analysis Risk Mitigation Concept of operation Requirements analysis Design Implementation and test Plan next phases Develop, verify next level product
Processes & Procedures Automated tools Processes & procedures Life-cycle methodologies Methods & techniques Principles
Software Engineering Processes and Procedures Responsible Group 006 Configuration Management Baseline Software Design Document Baselined Software Requirements Document Quality Assurance 004 Hardware Engineering Formal Inspection 001 Software Engineering Translate Requirements into objects and develop object model 003 002 Create state diagram for each object Develop Data Flow Diagram for each state * - the processes and procedures defined in this slide apply to the software design phase of a complex software project.
Software Engineering Processes and Procedures Responsible Group 008 Math Library Management Baseline Routine 001 User Needs Task Monitor User 004 Formal Inspection 002 Local Contractor Task Plan 003 Software Requirements Data Flow Diagram For Design 007 006 005 Code Test * - the processes and procedures defined in this slide show the possible phases applicable for adding a simple routine to a math library.
Tools V E R T I C A L T O O L S H O R I Z O N T A L T O O L S Analysis Tools Design Tools Coding Tools Reverse Testing Engineering Tools Tools Configuration Management Tools Project/Process Management Tools Documentation Tools
Tool Examples - 1 Vertical Tools – McCabe Tools - source code analyzers that generate measures of software complexity Horizontal Tools – Microsoft Project - commercial project management tool – Polytron Version Control System - controls multiple versions of software, documents, procedures, etc.
Tool Examples - 2 Computer Aided Software Engineering (CASE) Environments – Tools supporting analysis, design, code (Fortran, C,C ), simulation, and reverse engineering – Tools supporting vertical areas using object-oriented methods and code generation Test Beds – PC Data Acquisition Hardware and Software Miscellaneous – Oscilloscopes/Logic Analyzers and other test equipment – Testing equipment and tools – Circuit analyzers
Footnotes
Glossary