前面的几讲,我们讲完了如何计算功能点的方法,接下来我们看一个完整的案例。这是COSMIC官方网站上曾经发布的一个嵌入式软件的案例,有多个版本,我们改编自其中一个版本来讨论一下。
需求描述如下:
1. 电饭煲可以有3种模式煮饭:快,正常,慢。可以由人来手动设置,设置后直接记录在RAM中,不需要通过软件来存储。
2. 当按下START按钮后,启动定时器,开始煮饭。
3. 如果按下了START按钮,而没有选择煮饭模式,电饭煲自动选择正常模式。
4. 当电饭煲完成煮饭后,无论是哪种煮饭模式,电饭煲自动进入保温状态。
5. 指示灯会指示出当前是煮饭状态还是保温状态。
6. 加热器是受控的。软件必须能够按照一定的温控曲线(见图2),为给定的煮饭模式在给定的时间内确定目标温度。
7. 定时器能提供3种类型信号:流逝的时间,5秒和30秒的循环时间信号。
8. 每隔30秒要重新设定目标温度。
9. 每5秒钟,通过用目标温度减去实际温度的值以切换加热器的ON或OFF。
10. 根据选定的煮饭模式和流逝的时间,每30秒修改煮饭/保温指示灯的状态。
11. 如果按下了STOP按钮则切断电源。
电饭煲的面板如图一所示。
图一:电饭煲的面板
图二:电饭煲内存储的温控曲线
根据上述的功能需求描述,可以画出被度量软件的环境图:
图三:被度量软件的环境图
1 识别功能用户
根据需求,我们可以识别出的功能用户有:
定时器,温度传感器,加热器,指示灯(煮饭/保温)
持久存储介质有:
RAM:存储了煮饭模式
ROM:存储了温控曲线
需要注意的是:我们没有识别人作为功能用户。人按启动按钮,是启动了定时器,是定时器触发了软件工作。在第5讲中我们讲过了如何识别功能用户,大家可以去回顾一下。
2 识别触发事件
两个触发事件:5秒的时钟信号和30秒的时钟信号。
Ø 选择煮饭模式是否是触发事件呢?
我们假定选择煮饭模式是硬件直接写入RAM中,不需要软件参与,不是软件的责任,这样就不在度量范围内,不识别为功能处理。在需求中明确提到了这一点。
Ø 按下Start按钮是否是触发事件呢?
不是,因为这是加电启动软件的动作,不需要软件做什么工作。
3 识别功能处理
功能处理1: 控制加热器, 触发事件:5s时钟信号
功能处理2:设定目标温度, 触发事件:30s时钟信号
功能处理3:控制指示灯, 触发事件:30s时钟信号
注意:30s的时钟信号对应了2个功能处理。这2个功能处理是同时发生的,目的不同,并且目的独立,不是同一个功能处理的不同分支,所以是不同的功能处理。
4 识别功能点
功能处理1: 控制加热器:
E 5s触发
R 目标温度
E 实际温度(功能用户是温度传感器)
X 切换加热器状态
功能处理2: 设定目标温度:
E 30s触发事件,流逝的时间
R 煮饭模式(RAM)
R 温控曲线(ROM)
W 目标温度
功能处理3:控制指示灯:
E 30s触发,流逝的时间
R 煮饭模式
R 温控曲线(ROM)
X 切换指示灯
所以合计下来,本需求共计为:12个CFP。
注意:本案例是基于上述的需求描述来识别的功能点。有些功能是通过硬件来实现的,没有通过软件,所以没有识别在度量范围内。如果需求不是这样来描述的,识别的功能处理可能是有差别的。