您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   模型库  
会员   
   
人工智能、机器学习 TensorFlow
6月30日-7月1日 直播
基于 UML 和EA进行分析设计
7月30-31日 北京+线上
图数据库与知识图谱
8月21日-22日 北京+线上
   
 
 订阅
【ASPICE4.0】实例讲解软件详细设计
 
 
  38  次浏览      4 次
 2025-6-30
 
编辑推荐:
本文主要实例讲解了软件详细设计相关内容。 希望对您的学习有所帮助。
本文来自于微信公众号耐思时刻,由火龙果软件Linda编辑、推荐。

1、软件详细设计实例引言

之前的系列文章分别写到了《软件需求设计》、《软件架构设计》、《软件详细设计》等相关ASPICE设计。本文主要讲解软件详细设计的实操部分。

下面先放一张图,让大家直观感受下软件需求设计、软件架构设计、软件详细设计之间的联系。

软件详细设计:即,针对每个组件,展开详细描述,分析清楚其内部是怎么实现这个组件的。

故,每个组件,从大到小,展开描述,一般需包含如下信息:

本软件组件是由几个.c和.h组成的?其主要用途描述。

本软件组件由几个软件单元组成?共包含哪些函数,其用途描述。

软件包含哪些全局变量、静态变量、宏定义等。

每个软件单元之间怎么形成本软件组件,怎么形成对应的功能?

a) 动态行为图

b) 软件单元之间的接口要定义描述清楚。

软件组件分析:是否为关键组件的分析,软件复杂度的分析、软件资源使用情况分析等。

注意,如上图所示:一个软件单元,可能包含1个或多个函数。

2、软件详细设计实例

2.1、背景描述

继续之前的例子,先描述下该例子的背景,已经看过前面文章的,此小节的内容可以跳过。

系统需求:

1) SYSReq_001:ECU需要采集外部设备A输入的电压信息

2) SYSReq_002:当电压持续超过16V时(持续时间1000ms),判断为过压。

3) SYSReq_003:当发生过压情况时,切断电源;

软件需求:

4) SWReq_001:软件间隔10ms,从MCU的哪个PIN脚,进行电压ADC采样;

5) SWReq_002:当电压持续超过16V时(持续时间1000ms),判断为过压。

6) SWReq_003:当发生过压情况时,通过MCU有哪个PIN脚,切断外部ECU2的电源供电;

系统架构动态图:

软件架构静态架构图:

软件架构动态图:

今天的详细设计示例,针对上图的ADC软件组件展开详细描述。

2.2、软件单元静态设计

ADC组件由两个文件组成:Adc.c和Adc.h。

此组件实现了如下功能:

1) 初始化ADC功能

2) 周期进行ADC采样

3) 执行ADC滤波

4) 将ADC转换为实际电压值

静态设计图如下:

该ADC软件组件由如下4个单元,7个函数组成:

AdcTask:Adc_Task ()

AdcDriver:Adc_GetRawValue()、Adc_Init()

Adc_Filter:Adc_UpdateAdcWindow()、Adc_CalculateAverage()

Adc_Voltage:Adc_AdcToVoltage()、Adc_GetVoltage()

具体如下表:

2.3、软件接口设计

需罗列出所有的接口,包含全局变量或函数接口,且最好区分出内部接口与外部接口。

1、外部接口(即本组件与其他组件之间互相交互的接口)

2、内部接口(本组件内部,不同单元之间互相交互的接口)

2.4、变量与符号

需要罗列出所有的全局变量、变量类型、内部静态变量、宏定义等,具体如下:

1、全局变量定义:无

2、变量类型定义:无

3、内部静态变量定义:

4、宏定义:

2.5、 动态行为图

涉及到由不同单元共同形成某个功能时,则需要画出各自单元之间互相交互的动态行为图,参考下图:

这边重点补充说明下,软件详细设计是软件架构设计的进一步细化与延续,具体看下图:

2.6、函数设计

注意:下面的软件流程图,主要是示例用,让大家直观了解下该部分需要包含的内容。为了节省时间,我是结合AI工具,用UML自动生成的,没有再细细核对,所以可能画得没那很完善,哈。

若对如何用AI工具来画流程图,可以参考我上篇文章《UML代码自动生成软件流程图》。

2.6.1、Adc_GetRawValue

函数名称:Adc_GetRawValue()

输入参数:none

输出参数:uint16_t adc_value,即值范围0-1023

功能说明:该函数主要实现ADC寄存器获取当前的ADC值。

软件流程图:

2.6.2、Adc_UpdateAdcWindow

函数名称:Adc_UpdateAdcWindow()

输入参数:uint16_t adc_value,即值范围0-1023

输出参数:none

功能说明:该函数主要实现将当前ADC值存入滤波的滑动窗口中。

软件流程图:

2.6.3、Adc_CalculateAverage

函数名称:Adc_CalculateAverage ()

输入参数:none

输出参数:uint8_t avg_adc_value

功能说明:该函数主要实现ADC值滤波功能。

软件流程图:

2.6.4、Adc_FilterValue

函数名称:Adc_FilterValue ()

输入参数:uint16_t adc_value,即值范围0-1023

输出参数:uint8_t avg_adc_value

功能说明:该函数主要实现ADC值滤波功能。

软件流程图:

2.6.5、Adc_Task

函数名称:Adc_Task ()

输入参数:none

输出参数:none

功能说明:Adc主任务调度接口函数。

软件流程图:

2.7、其他

软件详细设计中还需要说明如下相关内容:

1、关于关键性的分析

例如分类标准:

高关键性:全新开发的组件,或软件的功能、可靠性和法规合规性有重大影响的组件。

一般关键性:不影响软件的正常运行,或影响较小的软件组件,主要涉及辅助功能或用户界面的组件。

本组件设计:该ADC组件会影响到功能的开启关闭,所以是一个关键组件。

2、关于复杂性的分析

可以通过圈复杂度的大小,来判断软件的复杂度。

例如:1-9为低,10-19为中,20-29为高

3、关于可测试性的分析

可通过相关工具进行软件单元的白盒测试。

4、关于资源的一些限制条件,如Flash占用多少,RAM占用多少,CPU负载占用多少等。

5、关于软件质量的要求的分析,如静态路径树,圈复杂度等。

3、总结

这部分总结的内容,和前面引言的内容很相似。本来想着要不要删除掉,但后面想说,留着也不错,大家看起来方便些,省得再翻到前面去。

首先,软件需求设计,软件架构设计、软件详细设计的关系,可以梳理为下图:

软件详细设计需要针对每个组件,展开详细描述,分析清楚其内部是怎么实现这个组件的。

一般需包含如下信息:

1、静态设计:

a) 本软件组件是由几个.c和.h组成的?其主要用途描述。

b) 本软件组件由几个软件单元组成?共包含哪些函数,其用途描述。

2、软件包含哪些变量与符号,如:全局变量、静态变量、宏定义等。

3、动态行为图:

a) 每个软件单元之间怎么形成本软件组件,怎么形成对应的功能?

b) 软件单元之间的接口要定义描述清楚。

4、软件组件分析:是否为关键组件的分析,软件复杂度的分析、软件资源使用情况分析等。

5、一个软件单元,可能包含1个或多个函数。

 

   
38 次浏览       4
 
相关文章

CMM之后对CMMI的思考
对软件研发项目管理的深入探讨
软件过程改进
软件过程改进的实现
 
相关文档

软件过程改进框架
软件过程改进的CMM-TSP-PSP模型
过程塑造(小型软件团队过程改进)
软件过程改进:经验和教训
 
相关课程

以"我"为中心的过程改进(iProcess )
iProcess过程改进实践
CMMI体系与实践
基于CMMI标准的软件质量保证

最新活动计划
人工智能.机器学习TensorFlow 6-30[直播]
基于 UML 和EA进行分析设计 7-30[北京]
软件架构设计方法、案例与实践 7-24[北京]
用户体验、易用性测试与评估 7-25[西安]
图数据库与知识图谱 8-23[北京]
需求分析师能力培养 8-28[北京]
 
 
最新文章
iPerson的过程观:要 过程 or 结果
基于模型的需求管理方法与工具
敏捷产品管理之 Story
敏捷开发需求管理(产品backlog)
Kanban看板管理实践精要
最新课程
基于iProcess的敏捷过程
软件开发过程中的项目管理
持续集成与敏捷开发
敏捷过程实践
敏捷测试-简单而可行
更多...   
成功案例
英特尔 SCRUM-敏捷开发实战
某著名汽车 敏捷开发过程与管理实践
北京 敏捷开发过程与项目管理
东方证券 基于看板的敏捷方法实践
亚信 工作量估算
更多...