第五步: 需求写模棱两可么?

  恩,我们的描述太模棱两可了.输出端切换的速度要多快? 跟电压的关系如何? 输入电压的范围是多少? 让我们加一些更细节的描述吧:

  版本0.1

  1、输出端应当由一个自由活动的定时器进行控制

  2、自由运行定时器的频率高不得高于每秒10次,不得低于每秒1次.

  3、自由运行定时器的触发频率应当在高和低值之间呈线性变化,并与ADC端的输入电压成正比.

  4、ADC端的输入电压应当每100毫秒读取一次

  5、当ADC端的输入电压端被读入时,控制自由运行定时器周期时间的注册值也应当被更新.

  6、ADC输入端的电压有效范围应当被控制在0到1伏之间.

  第六步: 你的需求是可测试的么?

  ● 首先,自由运行的定时器在这里不需要提及. 因为对它基本上无法进行黑盒测试,它既不是输入也不是输出,而且跟这两者也没有什么联系。

  让我们用“数字输出端变化的频率应控制在每秒10次和每秒1次之间”来代替自由运 行定时器的测试标准。

  ● 对于上述的第四条需求,可能需要一些小修改才能作为测试标准。让我们用“ADC端的输入电压应当保证在每100毫秒内至少被读取一次”来加以描述,这样的描述能让我们预期的测试行为显得更加通俗易懂。

  ● 需求的第五条也需要一些小修改。我们如何才能检测电压的输出范围是在0到1伏之间呢? 总不能给个2伏的电压,然后看看元器件有没有被烧毁吧?

  那么,说“检验系统在ADC端输入电压为1到2伏之间的时候,工作是否正常”,这样检验容易多了。需求描述应当是“正面”的,应当描述设备“应该”的行为,而不是设备“不应该”的行为。否则的话,测试将会无法进行。

  版本0.2

  1、数字输出端的切换频率应当控制在每秒10次到每秒1次之间

  2、数字输出端的切换频率应当在大值和小值之间呈线性变化,并与ADC端的输入电压成正比

  3、ADC端的输入电压应当保证在每100毫秒内至少被读取一次

  4、检验当ADC端的输入电压范围在0到1伏之间的时候,系统工作是否正常

  第七步:你的需求是否通俗易懂?

  相比于我们原来的描述:“根据弯曲传感器的输出不同频率来控制LED闪烁”,我们上面的那些需求描述显得难以阅读和理解。

  我发现,让需求文档变得通俗易懂,简单办法莫过于,把过于细节的东西抽取出来,然后以条目的形式单独定义。

  版本1

  1、弯曲传感器应当保证至少在100毫秒内读取一次数据(放到注释单独列出)

  2、切换LED的状态,使其与弯曲传感器的读数保持一致

  3、当弯曲传感器的读数为1伏特时,LED状态切换的次数应当保持在平均一秒十次;当传感器的读数为0伏特时,LED的切换次数应保持在一秒1次。

  定义:

  ● 弯曲传感器:输入电压位于ADC的X端。安全电压范围为0到1伏特(放到注释单独列出)

  ● LED状态:数字状态由Y端输出

  这样好多了(尽管还不完美)。这些需求通俗易懂,不涉及到系统内部实现,且易于测试。对于系统行为的限定也仅于需要做什么,点到为止。(例如,对弯曲传感器的采样频率,在实现上也可以更高,只要不产生非预期行为,一切都可以)。

  编写需求仿佛是在大脑中构建软件的过程。因此要重于执行操作。