净室规范和设计的盒子结构(1)
未经允许,严禁转载本栏目内容
本文经许可转载自软件工程专家网www.21cmm.com,
未经CSDN许可,请勿随便转载,谢谢合作[url=http://www.21cmm.com/prelogin.asp?page=/bbs/index.asp?Type=D][/url]
盒子结构是在规范和设计中对现实系统的外在基本属性的功能描述。图3.1描绘了三种盒子:黑盒、状态盒、明盒。这些盒子不仅展示了外部行为,而且还提高了内部可见度。黑盒确定了一个系统或系统组件的外部行为。状态盒则进一步指定了完成外部行为所需的状态数据。明盒则进一步把状态盒具体化,它确定了完成状态盒行为的过程设计。它可使用已有的黑盒或引入新的黑盒,这些黑盒将在以后细化(明盒由程序控制结构组成),每步细化是根据前一步进行验证的。这样盒子结构将系统开发的三个方面(行为、数据和过程的规范)分离开,但又把它们联成一个细化和验证的内聚过程。
1、黑盒行为
黑盒定义了一个系统或系统组件的外部行为。当系统接受激励S(视为从其环境的输入)时,它将产生响应R(作为对其环境的输出),响应不仅与当前激励有关,还与到目前为止收到的激励有关。例如,我们考虑一个计算器的外部行为。假设正在进行一次计算,当前的激励是按了键5;如果此前的历史激励是C718(C表示清零)。那么响应将是7185。也就是说,计算器将当前显示的数字左移一位,并在单元位置插入5。如果此前的历史激励是C718+,计算器将在单元位置显示一新的字符串5。因此,系统的当前激励及此前的历史激励惟一地确定了它的响应。
我们可以从外部行为来看待系统及其组件。例如,工作站接受键盘和鼠标的激励会改变当前窗口内容或显示新的窗口以作出响应。用户可能对工作站的内部操作一无所知,仅仅感受到的是它的外部行为。当然,内部操作可能是与之联网的其他支持这种外部行为的机器完成的。
图盒子结构精化和验证BB=黑盒
黑盒行为的数学语义可写成如下函数:
历史激励→响应
简记为
SH→R
SH表示包括当前激励的所有历史激励。
黑盒定义不包含状态数据及过程实现。它定义了仅取决于历史使用的能被用户感受到的外部可见行为。因此,黑盒关心的是从用户角度看待系统行为的问题,而并不考虑状态和过程的设计。黑盒子规范定义了所有可能使用情况所需的行为。也就是说,在黑盒规范中为所有可能的当前激励和历史激励以及它们的组合定义了正确的响应,在净室项目中黑盒规范的如下三个原则对高效系统开发很关键。
1. 对系统拥有者和用户而言,黑盒定义了他们分析和协商的所需行为,这是他们准备资源、着手开发和测试的前提。
2. 对系统开发者而言,黑盒定义了待设计和实现的所需行为。
3. 对系统测试者而言,黑盒定义了在测试过程中待确认的所需行为。
黑盒可以用表格形式来定义,表中的三列分别对应于激励、历史条件和响应。这些表可用任意合适的形式(从自然语言到集合论)来叙述。请看表3.1中的非形式黑盒定义。这个低层黑盒定义了一个基于12个月平均销售额的预测系统,用于为一个产品清单控制系统中数以千计的产品预报销售额。该系统接受产品的月销售额组成的激励。并产生相应的响应。黑盒中规则1指定了某一产品少于12个月销售额时的正确响应。规则2指定了至少有12个月销售额时的正确行为。这张表以一种非形式的方式描述了系统行为,其中尖括号中内容是要进一步定义和细化的重要实体。这张表可能是在系统规范制定的早期产生的,这时与用户的分析和讨论在需求方面取得了一致,但还没组织进一步的细化工作。例如对规则1的讨论可能导致更多的计算需求,比如3或6个月的平均销售额。对规则2 的讨论可能导致这样的需求:一个月的销售额做激励,在计算平均值之前,确定销售额值的集合中不小心疏忽的元素。这些变化都会指定新的行为。在黑盒规范中提倡进行这样的讨论。这样可避免浪费资源并防止开发不符合用户要求的系统。
2、状态盒行为
状态盒规范对系统或其组件进行初步细化,定义了状态空间。状态盒把激励历史封装成状态数据,但仍没有涉及具体过程。它把旧的OS(old state)和激励S映射到新的状态NS(new state)响应R。而新的状态在下一次变换时则变成了旧状态。状态盒子行为的语义是一个如下的变换函数:
(旧状态,激励)→(新状态,响应)
或简写为
(OS,S)→(NS,R)
状态盒根据黑盒来细化和验证。状态信息就是为了符合黑盒子规范而必须保存的激励历史,这样信息来自于黑盒,无需再定义。因为每个历史激励可用状态来表示,所以每个黑盒有一个状态盒描述。而且,对于一个黑盒子,可设计许多不同的状态盒子,因为对一个状态可能有多种不同的表示和访问方法。
状态盒可用表格来定义,对应的列包括旧状态、激励、新状态、响应以及对应的黑盒规则。我们来考虑销售额预测系统的状态盒,如下表所示,它与上表相对应。在此例中,对黑盒的激励历史条件分析导致了〈销售文件〉状态项,用来保存每种产品最近11个月的销售额。文件中每条记录用〈产品〉来标识,并包含一个能存11个月销售额的数组。因为当前激励加上前11个便可求出所需的平均值,所以只需存11个值就够了,不必保留更早的,因而接下来的激励将导致删除早于11个月的销售额。下表中的变换1定义了当激励引入一个新产品时所需的行为。变换2定义了当状态盒已知的产品还没达到11个月的销售额时所需的行为,变换1和2只是产生文字信息,将激励显示给用户。最后,变换3定义了不断计算平均植的稳定状态。注意,每一个变换都要进行相应的状态更新,为处理随后的激励作好准备。例如,变换3是这样处理状态的累积过程的,删除最早的〈销售额植〉和把当前激励作为最新的〈销售额值〉加入到〈销售文件〉的该〈产品〉记录中。
状态盒的验证是导出相应黑盒行为并与原来的黑盒相比较看是否等价。这种导出就是将状态操作转换成激励历史形式。
3、明盒行为
系统或其组件的明盒设计定义了状态盒行为的过程。明盒是一个计算机程序或程序集,基于程序的内部状态OS,它接受激励S,产生新的内部状态NS,并产生响应R。这些过程由基于结构化程序设计的控制结构(顺序、选择、循环,如果引入并发机制还要加上并行结构)来定义。明盒用这些控制结构来完成新状态和响应的计算。对于所给状态盒可以定义多种不同的明盒。明盒可用一个变换函数表示:
(旧状态,激励)→(新状态,响应),借助过程
或简记为:
(OS,S)→(NS,R),借助过程
明盒的过程可以重用已有的黑盒,也可在后续求精过程的状态盒笥明盒中引入新的黑盒。定义明盒是一个关键步骤,因为它必须组织和连接处于一个盒子结构层次的黑盒。通过定义每个黑盒用途的准确内容,这种显式的连接有助于对项目开发保持智能控制。另外,组件及其连接是从明盒设计中局部处理需求导出的。从本质上,盒子结构的信息不是"分离、征服",而是"分离、连接和征服"。
明盒的验证是把其操作抽象成一个导出的状态盒并与原来的状态盒进行比较。明盒的设计和验证在以后讨论。