Software Development
Software development supports the incremental development of features that can be delivered to streams or other stakeholders. Included are design, implementation, unit tests, component tests, and bug fixing. Software development can result in deliverables, e.g., firmware, applications, and tools.
For embedded systems, the software or firmware is dependent on the hardware, and the software and hardware processes need to be tightly integrated.
Process Overview
Principles
- Design and document the solution parallel with the code. Use design patterns for classes and methods.
- Plan for providing secure code.
- Commit code frequently, preferably daily, to ensure quality and development speed.
- Protect the code base with automated unit tests, component tests, static code analysis, and code reviews applied before acceptance.
- Ensure consistency and traceability from requirements and architecture to design code and test.
- Continuously refactor and refine the design, code, and tests to reduce technical debt.
- Provide input to end-user documentation.
Activities
Artifacts
Artifact | Description | RACI | Receiver | Comments |
---|---|---|---|---|
Component Capability | Describes what the component is capable to do. Lives with the component lifecycle. | (R): Development Team (A): Product Owner (C): Architect, Development Team, Ex Component Responsible, Safety Engineer (I): Cyber Security Engineer | Dev. Team | - |
Detailed Design | Details the high-level design and describes the component structure with modules and classes as well as internal/external interfaces. | (R): Development Team (A): Product Owner (C): Architect, Development Team, Ex Component Responsible, Safety Engineer (I): Cyber Security Engineer, Quality Control Manager | Dev. Team | Format can be decided per stream. |
Code | High-quality code | (R): Development Team (A): Development Team (C): - (I): - | Dev. Team | - |
Unit test | Unit test that ensures the quality of the units/code. | (R): Development Team (A): Development Team (C): - (I): - | Dev. Team | - |
Unit test result | Result from automated unit tests managed in tools. | (R): Dev Team (A): Product Owner (C): - (I): - | Dev. Team | - |
Component test | Component test that ensures the quality of the component. | (R): Development Team (A): Development Team (C): Cyber Security Engineer (I): Product Owner | Dev. Team | - |
Component test result | Result from automated component tests managed in tools. | (R): Dev Team (A): Product Owner (C): - (I): - | Dev. Team | - |
User Documentation | Drafts of user documentation describing the functionality from a user perspective. | (R): Development Team (A): Product Manager (C): - (I): - | Product Manager, Test Team, User | - |
Dependencies
References
Related
- How-to Manage Bugs
- Pull Request Reference
- Work Item State Description
- Cyber Security In User Documentation
- Security Testing Guideline
- How-to Perform Binary Composition Analysis with BDBA
- Secure Design Best Practices
- SW Development Security Best Practices
- Code Review Guideline
- Code Signing
- Component Capabilities
- Component Test Overview
- Functional Description and Detailed Design Review Guideline
- Functional Description and Detailed Design Guideline
- Performance Testing
- Product Capability Example (Device Provisioning)
- Secure Coding Guideline, C
- Secure Coding Guideline, .NET
- Secure Coding Guideline, ReactJS
- Secure Coding Guideline
- Software Artifact Model
- Specific Code Review Guideline for Control (Git)
- Static Code Analysis
- Recommended Component Test Frameworks
- Recommended Unit Test Frameworks
- Test Techniques
- Unit Test Overview
- Unit Test Writing Guideline
- Software Development
- Component Capability Template
- Component Description Template
- Component Dynamic Behavior Template
- Describe the Usage of SCA Tool Template
- Implementation Proposal
- Pull Request Software Template
Owner: Software Development Team