1、软件需求只包含必要描述性、定义性的信息,而不能包含解释性的内容。
2、每条需求都必须是组成某个功能的最基本单元,不能够再继续分解。
3、每条软件需求都必须具备可测试性,意味着有明确的输入输出。
一份清晰而又准确的需求文档是一个项目是否优秀的基石。
系统工程师需求写好之后,开始召集相关的软件开发工程师、测试工程师,进行需求的宣导,并且对齐各方对需求的理解偏差。这样需求就交接给他们了。
软件工程师在收到需求后,开始编码进行功能实现,为了使编码符合编码规范,一方面团队会有一份编码规范文档,在入职会进行宣贯,以及考试验收,第二通常会在IDE中集成静态代码检查工具来执行MISRA C/C++静态代码检查,保证代码的质量。另外在开发过程中,难免还需要与系统工程师反复地确认需求。
当开发工程师完成开发后,就开始反复地测试、优化过程了。
首先开发工程师会进行自测,如果是模型开发,会有模型在环MIL、软件在环SIL等仿真测试。然后会在单板离线环境进行功能的自测。
这些测试OK之后,团队内有个内部的测试小组,会对每条需求进行硬件在环HIL测试,以及老化测试,测试后会将结果反馈给开发工程师,工程师对FAIL项进行确认和修复,然后继续测试,直到所有的需求都测试通过。
团队内部测试OK之后,会出具测试报告,然后将测试报告和软件包交给独立的测试部门,进行测试。这里又会有一个反复的过程,比如测试部测完之后,如果有测试FAIL项,会将测试结果反馈给开发团队,团队的开发和测试小组会进行FAIL项的确认、分析和修复。团队内部测试OK之后,再次提交给测试部测试。
当测试部测试完成之后,会整理测试报告和测试结果,将软件释放给主机厂。
这其实就是汽车行业传统的V模型开发模式。