0%

The amount of software used in safety-critical systems is increasing at a rapid rate. At the same time, software technology is changing, projects are pressed to develop software faster and more cheaply, and the software is being used in more critical ways. Developing Safety-Critical Software: A Practical Guide for Aviation Software and DO-178C Compliance equips you with the information you need to effectively and efficiently develop safety-critical, life-critical, and mission-critical software for aviation. The principles also apply to software for automotive, medical, nuclear, and other safety-critical domains.

An international authority on safety-critical software, the author helped write DO-178C and the U.S. Federal Aviation Administration’s policy and guidance on safety-critical software. In this book, she draws on more than 20 years of experience as a certification authority, an avionics manufacturer, an aircraft integrator, and a software developer to present best practices, real-world examples, and concrete recommendations.

The book includes:

  • An overview of how software fits into the systems and safety processes
  • Detailed examination of DO-178C and how to effectively apply the guidance
  • Insight into the DO-178C-related documents on tool qualification (DO-330), model-based development (DO-331), object-oriented technology (DO-332), and formal methods (DO-333)
  • Practical tips for the successful development of safety-critical software and certification
  • Insightful coverage of some of the more challenging topics in safety-critical software development and verification, including real-time operating systems, partitioning, configuration data, software reuse, previously developed software, reverse engineering, and outsourcing and offshoring

An invaluable reference for systems and software managers, developers, and quality assurance personnel, this book provides a wealth of information to help you develop, manage, and approve safety-critical software more confidently.

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