Developing Safety-Critical Software

Book description

As the complexity and criticality of software increase and projects are pressed to develop software faster and more cheaply, it becomes even more important to ensure that software-intensive systems are reliable and safe. This book helps you develop, manage, and approve safety-critical software more efficiently and effectively. Although the focus is on aviation software and compliance with RTCA/DO-178C and its supplements, the principles also apply to other safety-critical software. Written by an international authority on the subject, this book brings you a wealth of best practices, real-world examples, and concrete recommendations.

Table of contents

  1. Cover
  2. Half title
  3. Title Page
  4. Copyright
  5. Dedication
  6. Preface
  7. Acknowledgments
  8. Author
  9. Part I Introduction
    1. 1 Introduction and Overview
      1. 1.1 Defining Safety-Critical Software
      2. 1.2 Importance of Safety Focus
      3. 1.3 Book Purpose and Important Caveats
      4. 1.4 Book Overview
  10. Part II Context of Safety-Critical Software Development
    1. 2 Software in the Context of the System
      1. 2.1 Overview of System Development
      2. 2.2 System Requirements
        1. 2.2.1 Importance of System Requirements
        2. 2.2.2 Types of System Requirements
        3. 2.2.3 Characteristics of Good Requirements
        4. 2.2.4 System Requirements Considerations
          1. 2.2.4.1 Integrity and Availability Considerations
          2. 2.2.4.2 Other System Requirements Considerations
        5. 2.2.5 Requirements Assumptions
        6. 2.2.6 Allocation to Items
      3. 2.3 System Requirements Validation and Verification
        1. 2.3.1 Requirements Validation
        2. 2.3.2 Implementation Verification
        3. 2.3.3 Validation and Verification Recommendations
      4. 2.4 Best Practices for Systems Engineers
      5. 2.5 Software’s Relationship to the System
    2. 3 Software in the Context of the System Safety Assessment
      1. 3.1 Overview of the Aircraft and System Safety Assessment Process
        1. 3.1.1 Safety Program Plan
        2. 3.1.2 Functional Hazard Assessment
        3. 3.1.3 System Functional Hazard Assessment
        4. 3.1.4 Preliminary Aircraft Safety Assessment
        5. 3.1.5 Preliminary System Safety Assessment
        6. 3.1.6 Common Cause Analysis
        7. 3.1.7 Aircraft and System Safety Assessments
      2. 3.2 Development Assurance
        1. 3.2.1 Development Assurance Levels
      3. 3.3 How Does Software Fit into the Safety Process?
        1. 3.3.1 Software’s Uniqueness
        2. 3.3.2 Software Development Assurance
        3. 3.3.3 Other Views
        4. 3.3.4 Some Suggestions for Addressing Software in the System Safety Process
  11. Part III Developing Safety-Critical Software Using DO-178C
    1. 4 Overview of DO-178C and Supporting Documents
      1. 4.1 History of DO-178
      2. 4.2 DO-178C and DO-278A Core Documents
        1. 4.2.1 DO-278A and DO-178C Differences
        2. 4.2.2 Overview of the DO-178C Annex A Objectives Tables
      3. 4.3 DO-330: Software Tool Qualification Considerations
      4. 4.4 DO-178C Technology Supplements
        1. 4.4.1 DO-331: Model-Based Development Supplement
        2. 4.4.2 DO-332: Object-Oriented Technology Supplement
        3. 4.4.3 DO-333: Formal Methods Supplement
      5. 4.5 DO-248C: Supporting Material
    2. 5 Software Planning
      1. 5.1 Introduction
      2. 5.2 General Planning Recommendations
      3. 5.3 Five Software Plans
        1. 5.3.1 Plan for Software Aspects of Certification
        2. 5.3.2 Software Development Plan
        3. 5.3.3 Software Verification Plan
        4. 5.3.4 Software Configuration Management Plan
        5. 5.3.5 Software Quality Assurance Plan
      4. 5.4 Three Development Standards
        1. 5.4.1 Software Requirements Standards
        2. 5.4.2 Software Design Standards
        3. 5.4.3 Software Coding Standards
      5. 5.5 Tool Qualification Planning
      6. 5.6 Other Plans
        1. 5.6.1 Project Management Plan
        2. 5.6.2 Requirements Management Plan
        3. 5.6.3 Test Plan
    3. 6 Software Requirements
      1. 6.1 Introduction
      2. 6.2 Defining Requirement
      3. 6.3 Importance of Good Software Requirements
        1. 6.3.1 Reason 1: Requirements Are the Foundation for the Software Development
        2. 6.3.2 Reason 2: Good Requirements Save Time and Money
        3. 6.3.3 Reason 3: Good Requirements Are Essential to Safety
        4. 6.3.4 Reason 4: Good Requirements Are Necessary to Meet the Customer Needs
        5. 6.3.5 Reason 5: Good Requirements Are Important for Testing
      4. 6.4 The Software Requirements Engineer
      5. 6.5 Overview of Software Requirements Development
      6. 6.6 Gathering and Analyzing Input to the Software Requirements
        1. 6.6.1 Requirements Gathering Activities
        2. 6.6.2 Requirements Analyzing Activities
      7. 6.7 Writing the Software Requirements
        1. 6.7.1 Task 1: Determine the Methodology
        2. 6.7.2 Task 2: Determine the Software Requirements Document Layout
        3. 6.7.3 Task 3: Divide Software Functionality into Subsystems and/or Features
        4. 6.7.4 Task 4: Determine Requirements Priorities
        5. 6.7.5 A Brief Detour (Not a Task): Slippery Slopes to Avoid
          1. 6.7.5.1 Slippery Slope #1: Going to Design Too Quickly
          2. 6.7.5.2 Slippery Slope #2: One Level of Requirements
          3. 6.7.5.3 Slippery Slope #3: Going Straight to Code
        6. 6.7.6 Task 5: Document the Requirements
          1. 6.7.6.1 Document Functional Requirements
          2. 6.7.6.2 Document Nonfunctional Requirements
          3. 6.7.6.3 Document Interfaces
          4. 6.7.6.4 Uniquely Identify Each Requirement
          5. 6.7.6.5 Document Rationale
          6. 6.7.6.6 Trace Requirements to Their Source
          7. 6.7.6.7 Identify Uncertainties and Assumptions
          8. 6.7.6.8 Start a Data Dictionary
          9. 6.7.6.9 Implement Characteristics of Good Requirements
        7. 6.7.7 Task 6: Provide Feedback on the System Requirements
      8. 6.8 Verifying (Reviewing) Requirements
        1. 6.8.1 Peer Review Recommended Practices
      9. 6.9 Managing Requirements
        1. 6.9.1 Basics of Requirements Management
        2. 6.9.2 Requirements Management Tools
      10. 6.10 Requirements Prototyping
      11. 6.11 Traceability
        1. 6.11.1 Importance and Benefits of Traceability
        2. 6.11.2 Bidirectional Traceability
        3. 6.11.3 DO-178C and Traceability
        4. 6.11.4 Traceability Challenges
    4. 7 Software Design
      1. 7.1 Overview of Software Design
        1. 7.1.1 Software Architecture
        2. 7.1.2 Software Low-Level Requirements
        3. 7.1.3 Design Packaging
      2. 7.2 Approaches to Design
        1. 7.2.1 Structure-Based Design (Traditional)
        2. 7.2.2 Object-Oriented Design
      3. 7.3 Characteristics of Good Design
      4. 7.4 Design Verification
    5. 8 Software Implementation: Coding and Integration
      1. 8.1 Introduction
      2. 8.2 Coding
        1. 8.2.1 Overview of DO-178C Coding Guidance
        2. 8.2.2 Languages Used in Safety-Critical Software
          1. 8.2.2.1 Assembly Language
          2. 8.2.2.2 Ada
          3. 8.2.2.3 C
        3. 8.2.3 Choosing a Language and Compiler
        4. 8.2.4 General Recommendations for Programming
        5. 8.2.5 Special Code-Related Topics
          1. 8.2.5.1 Coding Standards
          2. 8.2.5.2 Compiler-Supplied Libraries
          3. 8.2.5.3 Autocode Generators
      3. 8.3 Verifying the Source Code
      4. 8.4 Development Integration
        1. 8.4.1 Build Process
        2. 8.4.2 Load Process
      5. 8.5 Verifying the Development Integration
    6. 9 Software Verification
      1. 9.1 Introduction
      2. 9.2 Importance of Verification
      3. 9.3 Independence and Verification
      4. 9.4 Reviews
        1. 9.4.1 Software Planning Review
        2. 9.4.2 Software Requirements, Design, and Code Reviews
        3. 9.4.3 Test Data Reviews
        4. 9.4.4 Review of Other Data Items
      5. 9.5 Analyses
        1. 9.5.1 Worst-Case Execution Time Analysis
        2. 9.5.2 Memory Margin Analysis
        3. 9.5.3 Link and Memory Map Analysis
        4. 9.5.4 Load Analysis
        5. 9.5.5 Interrupt Analysis
        6. 9.5.6 Math Analysis
        7. 9.5.7 Errors and Warnings Analysis
        8. 9.5.8 Partitioning Analysis
      6. 9.6 Software Testing
        1. 9.6.1 Purpose of Software Testing
        2. 9.6.2 Overview of DO-178C’s Software Testing Guidance
          1. 9.6.2.1 Requirements-Based Test Methods
          2. 9.6.2.2 Normal and Robustness Tests
            1. 9.6.2.2.1 Normal Test Cases
            2. 9.6.2.2.2 Robustness Test Cases
        3. 9.6.3 Survey of Testing Strategies
          1. 9.6.3.1 Equivalence Class Partitioning
          2. 9.6.3.2 Boundary Value Testing
          3. 9.6.3.3 State Transition Testing
          4. 9.6.3.4 Decision Table Testing
          5. 9.6.3.5 Integration Testing
          6. 9.6.3.6 Performance Testing
          7. 9.6.3.7 Other Strategies
          8. 9.6.3.8 Complexity Measurements
          9. 9.6.3.9 Summary and Characteristics of a Good Test
        4. 9.6.4 Test Planning
        5. 9.6.5 Test Development
          1. 9.6.5.1 Test Cases
          2. 9.6.5.2 Test Procedures
          3. 9.6.5.3 DO-178C Requirements
          4. 9.6.5.4 Low-Level Requirements Testing versus Unit Testing
          5. 9.6.5.5 Handling Requirements That Cannot Be Tested
          6. 9.6.5.6 Obtaining Credit for Multiple Levels of Testing
          7. 9.6.5.7 Testing Additional Levels of Requirements
        6. 9.6.6 Test Execution
          1. 9.6.6.1 Performing Dry Runs
          2. 9.6.6.2 Reviewing Test Cases and Procedures
          3. 9.6.6.3 Using Target Computer versus Emulator or Simulator
          4. 9.6.6.4 Documenting the Verification Environment
          5. 9.6.6.5 Test Readiness Review
          6. 9.6.6.6 Running Tests for Certification Credit
        7. 9.6.7 Test Reporting
        8. 9.6.8 Test Traceability
        9. 9.6.9 Regression Testing
        10. 9.6.10 Testability
        11. 9.6.11 Automation in the Verification Processes
      7. 9.7 Verification of Verification
        1. 9.7.1 Review of Test Procedures
        2. 9.7.2 Review of Test Results
        3. 9.7.3 Requirements Coverage Analysis
        4. 9.7.4 Structural Coverage Analysis
          1. 9.7.4.1 Statement Coverage (DO-178C Table A-7 Objective 7)
          2. 9.7.4.2 Decision Coverage (DO-178C Table A-7 Objective 6)
          3. 9.7.4.3 Modified Condition/Decision Coverage (DO-178C Table A-7 Objective 5)
          4. 9.7.4.4 Additional Code Verification (DO-178C Table A-7 Objective 9)
          5. 9.7.4.5 Data Coupling and Control Coupling Analyses (DO-178C Table A-7 Objective 8)
          6. 9.7.4.6 Addressing Structural Coverage Gaps
          7. 9.7.4.7 Final Thoughts on Structural Coverage Analysis
      8. 9.8 Problem Reporting
      9. 9.9 Recommendations for the Verification Processes
    7. 10 Software Configuration Management
      1. 10.1 Introduction
        1. 10.1.2 Why Is Software Configuration Management Needed?
        2. 10.1.3 Who Is Responsible for Implementing Software Configuration Management?
        3. 10.1.4 What Does Software Configuration Management Involve?
      2. 10.2 SCM Activities
        1. 10.2.1 Configuration Identification
        2. 10.2.2 Baselines
        3. 10.2.3 Traceability
        4. 10.2.4 Problem Reporting
          1. 10.2.4.1 Problem Report Management with Multiple Stakeholders
          2. 10.2.4.2 Managing Open/Deferred Problem Reports
        5. 10.2.5 Change Control and Review
        6. 10.2.6 Configuration Status Accounting
        7. 10.2.7 Release
        8. 10.2.8 Archival and Retrieval
        9. 10.2.9 Data Control Categories
        10. 10.2.10 Load Control
        11. 10.2.11 Software Life Cycle Environment Control
      3. 10.3 Special SCM Skills
      4. 10.4 SCM Data
        1. 10.4.1 SCM Plan
        2. 10.4.2 Problem Reports
        3. 10.4.3 Software Life Cycle Environment Configuration Index
        4. 10.4.4 Software Configuration Index
        5. 10.4.5 SCM Records
      5. 10.5 SCM Pitfalls
      6. 10.6 Change Impact Analysis
    8. 11 Software Quality Assurance
      1. 11.1 Introduction: Software Quality and Software Quality Assurance (SQA)
        1. 11.1.1 Defining Software Quality
        2. 11.1.2 Characteristics of High-Quality Software
        3. 11.1.3 Software Quality Assurance
        4. 11.1.4 Examples of Common Quality Process and Product Issues
      2. 11.2 Characteristics of Effective and Ineffective SQA
        1. 11.2.1 Effective SQA
        2. 11.2.2 Ineffective SQA
      3. 11.3 SQA Activities
    9. 12 Certification Liaison
      1. 12.1 What Is Certification Liaison?
      2. 12.2 Communicating with the Certification Authorities
        1. 12.2.1 Best Practices for Coordinating with Certification Authorities
      3. 12.3 Software Accomplishment Summary
      4. 12.4 Stage of Involvement (SOI) Audits
        1. 12.4.1 Overview of SOI Audits
        2. 12.4.2 Overview of the Software Job Aid
        3. 12.4.3 Using the Software Job Aid
        4. 12.4.4 General Recommendations for the Auditor
        5. 12.4.5 General Recommendations for the Auditee (the Applicant/Developer)
        6. 12.4.6 SOI Review Specifics
          1. 12.4.6.1 SOI 1 Entry Criteria, Expectations, and Preparation Recommendations
            1. 12.4.6.1.1 SOI 1: When It Occurs
            2. 12.4.6.1.2 SOI 1: What to Expect
            3. 12.4.6.1.3 SOI 1: How to Prepare
          2. 12.4.6.2 SOI 2 Entry Criteria, Expectations, and Preparation Recommendations
            1. 12.4.6.2.1 SOI 2: When It Occurs
            2. 12.4.6.2.2 SOI 2: What to Expect
            3. 12.4.6.2.3 SOI 2: How to Prepare
          3. 12.4.6.3 SOI 3 Entry Criteria, Expectations, and Preparation Recommendations
            1. 12.4.6.3.1 SOI 3: When It Occurs
            2. 12.4.6.3.2 SOI 3: What to Expect
            3. 12.4.6.3.3 SOI 3: How to Prepare
          4. 12.4.6.4 SOI 4 Entry Criteria, Expectations, and Preparation Recommendations
            1. 12.4.6.4.1 SOI 4: When It Occurs
            2. 12.4.6.4.2 SOI 4: What to Expect
            3. 12.4.6.4.3 SOI 4: How to Prepare
      5. 12.5 Software Maturity Prior to Certification Flight Tests
  12. Part IV Tool Qualification and DO-178C Supplements
    1. 13 DO-330 and Software Tool Qualification
      1. 13.1 Introduction
      2. 13.2 Determining Tool Qualification Need and Level (DO-178C Section 12.2)
      3. 13.3 Qualifying a Tool (DO-330 Overview)
        1. 13.3.1 Need for DO-330
        2. 13.3.2 DO-330 Tool Qualification Process
      4. 13.4 Special Tool Qualification Topics
        1. 13.4.1 FAA Order 8110.49
        2. 13.4.2 Tool Determinism
        3. 13.4.3 Additional Tool Qualification Considerations
        4. 13.4.4 Tool Qualification Pitfalls
        5. 13.4.5 DO-330 and DO-178C Supplements
        6. 13.4.6 Using DO-330 for Other Domains
    2. 14 DO-331 and Model-Based Development and Verification
      1. 14.1 Introduction
      2. 14.2 Potential Benefits of Model-Based Development and Verification
      3. 14.3 Potential Risks of Model-Based Development and Verification
      4. 14.4 Overview of DO-331
      5. 14.5 Certification Authorities Recognition of DO-331
    3. 15 DO-332 and Object-Oriented Technology and Related Techniques
      1. 15.1 Introduction to Object-Oriented Technology
      2. 15.2 Use of OOT in Aviation
      3. 15.3 OOT in Aviation Handbook
      4. 15.4 FAA-Sponsored Research on OOT and Structural Coverage
      5. 15.5 DO-332 Overview
        1. 15.5.1 Planning
        2. 15.5.2 Development
        3. 15.5.3 Verification
        4. 15.5.4 Vulnerabilities
        5. 15.5.5 Type Safety
        6. 15.5.6 Related Techniques
        7. 15.5.7 Frequently Asked Questions
      6. 15.6 OOT Recommendations
      7. 15.7 Conclusion
    4. 16 DO-333 and Formal Methods
      1. 16.1 Introduction to Formal Methods
      2. 16.2 What Are Formal Methods?
      3. 16.3 Potential Benefits of Formal Methods
      4. 16.4 Challenges of Formal Methods
      5. 16.5 DO-333 Overview
        1. 16.5.1 Purpose of DO-333
        2. 16.5.2 DO-333 and DO-178C Compared
          1. 16.5.2.1 Planning and Development
          2. 16.5.2.2 Configuration Management, Quality Assurance, and Certification Liaison
          3. 16.5.2.3 Verification
      6. 16.6 Other Resources
  13. Part V Special Topics
    1. 17 Noncovered Code (Dead, Extraneous, and Deactivated Code)
      1. 17.1 Introduction
      2. 17.2 Extraneous and Dead Code
        1. 17.2.1 Avoiding Late Discoveries of Extraneous and Dead Code
        2. 17.2.2 Evaluating Extraneous or Dead Code
      3. 17.3 Deactivated Code
        1. 17.3.1 Planning
        2. 17.3.2 Development
        3. 17.3.3 Verification
    2. 18 Field-Loadable Software
      1. 18.1 Introduction
      2. 18.2 What Is Field-Loadable Software?
      3. 18.3 Benefits of Field-Loadable Software
      4. 18.4 Challenges of Field-Loadable Software
      5. 18.5 Developing and Loading Field-Loadable Software
        1. 18.5.1 Developing the System to Be Field-Loadable
        2. 18.5.2 Developing the Field-Loadable Software
        3. 18.5.3 Loading the Field-Loadable Software
        4. 18.5.4 Modifying the Field-Loadable Software
      6. 18.6 Summary
    3. 19 User-Modifiable Software
      1. 19.1 Introduction
      2. 19.2 What Is User-Modifiable Software?
      3. 19.3 Examples of UMS
      4. 19.4 Designing the System for UMS
      5. 19.5 Modifying and Maintaining UMS
    4. 20 Real-Time Operating Systems
      1. 20.1 Introduction
      2. 20.2 What Is an RTOS?
      3. 20.3 Why Use an RTOS?
      4. 20.4 RTOS Kernel and Its Supporting Software
        1. 20.4.1 RTOS Kernel
        2. 20.4.2 Application Program Interface
        3. 20.4.3 Board Support Package
        4. 20.4.4 Device Driver
        5. 20.4.5 Support Libraries
      5. 20.5 Characteristics of an RTOS Used in Safety-Critical Systems
        1. 20.5.1 Deterministic
        2. 20.5.2 Reliable Performance
        3. 20.5.3 Compatible with the Hardware
        4. 20.5.4 Compatible with the Environment
        5. 20.5.5 Fault Tolerant
        6. 20.5.6 Health Monitoring
        7. 20.5.7 Certifiable
        8. 20.5.8 Maintainable
        9. 20.5.9 Reusable
      6. 20.6 Features of an RTOS Used in Safety-Critical Systems
        1. 20.6.1 Multitasking
        2. 20.6.2 Guaranteed and Deterministic Schedulability
          1. 20.6.2.1 Scheduling between Partitions
          2. 20.6.2.2 Scheduling within Partitions
        3. 20.6.3 Deterministic Intertask Communication
        4. 20.6.4 Reliable Memory Management
        5. 20.6.5 Interrupt Processing
        6. 20.6.6 Hook Functions
        7. 20.6.7 Robustness Checking
        8. 20.6.8 File System
        9. 20.6.9 Robust Partitioning
      7. 20.7 RTOS Issues to Consider
        1. 20.7.1 Technical Issues to Consider
          1. 20.7.1.1 Resource Contention
          2. 20.7.1.2 Priority Inversion
          3. 20.7.1.3 Memory Leaks
          4. 20.7.1.4 Memory Fragmentation
          5. 20.7.1.5 Intertask Interference
          6. 20.7.1.6 Jitter
          7. 20.7.1.7 Vulnerabilities
        2. 20.7.2 Certification Issues to Consider
          1. 20.7.2.1 Creating a Safe Subset
          2. 20.7.2.2 User’s Manual
          3. 20.7.2.3 Reverse Engineering
          4. 20.7.2.4 Deactivated Features
          5. 20.7.2.5 Complexity
          6. 20.7.2.6 Disconnect with the System
          7. 20.7.2.7 Code Compliance Issues
          8. 20.7.2.8 Error Handling Issues
          9. 20.7.2.9 Problem Reporting
          10. 20.7.2.10 Partitioning Analysis
          11. 20.7.2.11 Other Supporting Software
          12. 20.7.2.12 Target Testing
          13. 20.7.2.13 Modifications
      8. 20.8 Other RTOS-Related Topics
        1. 20.8.1 ARINC 653 Overview
        2. 20.8.2 Tool Support
        3. 20.8.3 Open Source RTOSs
        4. 20.8.4 Multicore Processors, Virtualization, and Hypervisors
        5. 20.8.5 Security
        6. 20.8.6 RTOS Selection Questions
    5. 21 Software Partitioning
      1. 21.1 Introduction to Partitioning
        1. 21.1.1 Partitioning: A Subset of Protection
        2. 21.1.2 DO-178C and Partitioning
        3. 21.1.3 Robust Partitioning
      2. 21.2 Shared Memory (Spatial Partitioning)
      3. 21.3 Shared Central Processing Unit (Temporal Partitioning)
      4. 21.4 Shared Input/Output
      5. 21.5 Some Partitioning-Related Challenges
        1. 21.5.1 Direct Memory Access
        2. 21.5.2 Cache Memory
        3. 21.5.3 Interrupts
        4. 21.5.4 Interpartition Communication
      6. 21.6 Recommendations for Partitioning
    6. 22 Configuration Data
      1. 22.1 Introduction
      2. 22.2 Terminology and Examples
      3. 22.3 Summary of DO-178C Guidance on Parameter Data
      4. 22.4 Recommendations
    7. 23 Aeronautical Data
      1. 23.1 Introduction
      2. 23.2 DO-200A: Standards for Processing Aeronautical Data
      3. 23.3 FAA Advisory Circular 20-153A
      4. 23.4 Tools Used for Processing Aeronautical Data
      5. 23.5 Other Industry Documents Related to Aeronautical Data
        1. 23.5.1 DO-201A: Standards for Aeronautical Information
        2. 23.5.2 DO-236B: Minimum Aviation System Performance Standards: Required Navigation Performance for Area Navigation
        3. 23.5.3 DO-272C: User Requirements for Aerodrome Mapping Information
        4. 23.5.4 DO-276A: User Requirements for Terrain and Obstacle Data
        5. 23.5.5 DO-291B: Interchange Standards for Terrain, Obstacle, and Aerodrome Mapping Data
        6. 23.5.6 ARINC 424: Standard, Navigation System Database
        7. 23.5.7 ARINC 816-1: Embedded Interchange Format for Airport Mapping Database
    8. 24 Software Reuse
      1. 24.1 Introduction
      2. 24.2 Designing Reusable Components
      3. 24.3 Reusing Previously Developed Software
        1. 24.3.1 Evaluating PDS for Use in Civil Aviation Products
        2. 24.3.2 Reusing PDS That Was Not Developed Using DO-178[ ]
        3. 24.3.3 Additional Thoughts on COTS Software
      4. 24.4 Product Service History
        1. 24.4.1 Definition of Product Service History
        2. 24.4.2 Difficulties in Seeking Credit Using Product Service History
        3. 24.4.3 Factors to Consider When Claiming Credit Using Product Service History
    9. 25 Reverse Engineering
      1. 25.1 What Is Reverse Engineering?
      2. 25.2 Examples of Reverse Engineering
      3. 25.3 Issues to Be Addressed When Reverse Engineering
      4. 25.4 Recommendations for Reverse Engineering
    10. 26 Outsourcing and Offshoring Software Life Cycle Activities
      1. 26.1 Introduction
      2. 26.2 Reasons for Outsourcing
      3. 26.3 Challenges and Risks in Outsourcing
      4. 26.4 Recommendations to Overcome the Challenges and Risks
      5. 26.5 Summary
  14. Appendix A: Example Transition Criteria
  15. Appendix B: Real-Time Operating System Areas of Concern
  16. Appendix C: Questions to Consider When Selecting a Real-Time Operating System for a Safety-Critical System
  17. Appendix D: Software Service History Questions
  18. Index

Product information

  • Title: Developing Safety-Critical Software
  • Author(s): Leanna Rierson
  • Release date: December 2017
  • Publisher(s): CRC Press
  • ISBN: 9781351834056