很多项目在应用ASPICE时,首先都会感觉到需要比以往项目更多的工作量,这些增加的工作量里面,有很多工作量是分配到了软件详细设计、软件单元验证和软件集成测试活动中。
本文谈谈“软件详细设计”的话题。
说明:本文如下的讨论以手写代码为场景。
1. 软件详细设计是什么?
软件代码是按照一定的逻辑来开发的,如果直接阅读源代码的话,代码逻辑很难被直观和全面的把握和看懂。软件详细设计是软件代码实现逻辑的直观展现。例如包括:
- 软件单元与软件单元之间的交互关系,如:通过时序图或函数调用关系图展现
- 软件单元定义及其内部逻辑,如:函数定义、函数流程图等
- 数据及结构,如:静态变量,全局变量,数据结构等
2 软件详细设计的目的是什么?
①
如上图所示,如何来回答这些疑问呢?或者说,如何有信心地来回答这些疑问呢?
软件详细设计是软件代码实现逻辑的直观展现,软件详细设计可以回答:
- 软件需求是否都被正确实现了?
- 是否有非预期的功能?
- 是否符合软件架构设计?
- …… ?
②
车载嵌入式软件产品的生命周期很长(通常至少15年以上),软件的可维护性、软件的设计质量至关重要。
软件详细设计是软件代码实现逻辑的直观展现。软件详细设计可以帮助工程师来把握软件的设计,确保软件设计符合相关的设计原则,例如:模块化、封装、低复杂度、接口简单、高内聚、低耦合等。
3 通过工具来基于代码生成软件详细设计,可以吗?
近日,有个小伙伴问了一个问题,比较有代表性:
杨老师好,请教您一个问题。
我了解到有一个根据代码来生成流程调用图和数据流图的工具,叫crystal flow的,
有一个疑惑想问一下,在做ASPICE的时候是要求先有设计,再有编码。
但做设计的时候,人工画流程图确实是花费精力比较多的一个部分,
而通过工具,可以快速地出流程图,相比人工更能确保代码和流程图的一致性。
那么,问题来了:
有没有既能使用这类工具,又同时满足ASPICE的实践呢?
模拟一下开发人员的开发步骤:
① 编码人员基于需求&软件架构设计,有一个对于软件组件内部逻辑的初步思路。(思路可以在脑子里,或者写在一张草稿纸上)
② 编码人员进行编码,将思路落实在代码上,边实践,边完善。
③ 当所有的代码基本完成后,基于代码生成详细设计。
④ 基于生成的详细设计,对软件组件的设计/实现进行考虑,考虑整体的软件组件的设计,例如:是否正确实现了需求,是否遵循了架构设计,是否满足模块化/封装/高内聚/低耦合等设计原则。
⑤ 必要时,返回②进行调整。
在这样的场景下,软件详细设计活动和软件编码活动是耦合在一起的。
- 软件详细设计是软件代码实现逻辑的直观展现。
- 基于软件详细设计,判断了软件实现与软件需求&软件架构设计的一致性/正确性。
- 基于软件详细设计,判断了软件实现是否遵循了设计原则。
因此,这样的软件详细设计是可以被接受的。
但是如果开发人员是直接基于需求和架构设计进行代码开发,然后基于代码生成详细设计,然后就结束了。(没有基于生成的详细设计去看与架构设计/需求的一致性,没有去检查与设计原则的符合性),这样的话,就是不可以接受的。
推荐阅读:
- Automotive SPICE和Automotive SPICE评估的那些事
- 如何达到并维持Automotive SPICE能力度级别
- 引入Automotive SPICE,企业要知道的二三事
- 引入Automotive SPICE,企业要知道的二三事(续)
文章转载自公众号:仨人谈起