基于序列的规范过程

基于序列的规范过程

未经允许,严禁转载本栏目内容

本文经许可转载自软件工程专家网www.21cmm.com

未经CSDN许可,请勿随便转载,谢谢合作

  规范制定有很多方法。基于顺序的规范是指逐步构造出完备、一致和正确的黑盒和状态盒规范的过程。本节讨论的就是这种方法。

  在基于序列的规范过程中,按严格顺序系统地举出所有可能的激励(历史激励)序列,如按长度0、1、2……排列。因为每个序列映射至其正确的响应,所以可通过应用归约规则辨识等价序列,当完备和一致地定义了系统以后枚举过程结束。

  基于Mills(1975)、Pamas(1992)、Mao(1993)Drowell(1996)和 Poore(Prowell和Poore,1998)的工作,基于序列的规范产生了明显的问题,软件使用的各种情况的组合产生的用例个数是天文数字。通过序列枚举,开发人员考虑系统激励的所有排列和组合。每种序列代表一种使用场景。在逐步枚举过程中,要区别可能的场景和不可能的场景,计划中的使用和错误的使用,可规约的序列和不可规约的序列。这些不可规约的序列(称为典型序列)是软件行为的精确规范的基础,这种精确是指数学意义上的完备性、一致性和可追踪正确性。

  序列书面枚举提供了完备性的直接验证。能按序列的从小到大的长度(1,2,3……)逐一验证激励的所有组合和排列是否已映射到一个响应。

  序列顺序枚举保证了任何所给使用场景只出现一次。和完备性一样,一致性也是枚举的直接的推论。

  基于序列的规范的每一元素都可追溯到最初的需求。如果一个序列的正确响应在需求中找不到,那么必须澄清所期望的行为并修改需求。

  基于序列的规范工作流程以连续方式对掌握需求分析、黑盒规范、状态盒规范方面提供了自动支持的可能性。其步骤在下面的小节中作简要说明。

黑盒定义

  加上标签的需求。将需求加上标签序号用于验证后续工作产品的每一要素的正确性。有条理的顺序枚举过程可暴露出需求的含糊不清或遗漏的地方。在基于序列的规范中得到清晰的需求是很自然的事。
定义系统边界。系统边界决定了组件是在系统的内部还是外部。处于系统外部的实体是激励来源和响应的目的地。激

  励和响应的标识始于最基本层次。进一步考虑(可能包括初期枚举)后常用抽象这种方法来简化枚举进程。
抽象用于隐藏易于明白的细节。以反映问题的自然划分或将一个较大的元素集归约为较小的元素集。必须有一个好的定义将大集合中的元素映射到小集合中的元素。激励集(或响应集)可能由不同的粒度混合而成(有基本的,有抽象的)。不管是什么粒度层次,激励集(或响应集)必须是互斥的。

  顺序枚举。将所有序列的排列组合按长度顺序列举。对每个序列进行检查时,完成如下评价工作:

  1. 不可能的序列(如在系统启动之前的激励)标上"非法"。任何非法序列的扩展仍是非法的,所以标有"非法"的序列在列举时不再扩展。

  2. 对应于需求,对每个序列的正确响应要记录归档。如果没有需求与之对应,要记下一个导出需求。导出需求代表假设或解释,所以必须和原来的需求一起进行确认。

  3. 如果两个序列对未来激励的响应是一样的,则称它们是等价的。既然两个等价序列的扩展对应同样的行为,就没有必要都扩展,只需将较短的进行扩展。

  当一个给定长度的所有序列或者非法或者和先前的序列等价时,就停止枚举。

  完全的枚举表示数学上完备的、一致的和可验证正确的黑盒规范。因为每一个序列映射到一个响应,所以规范是完备的;因为每个序列只对应一个响应,所以规范是一致的。由领域专家去验证其正确性,每序列对应的行为追溯到需求正好是所需的行为,则验证了正确性。

  典型序列分析。枚举中的合法的不与任何先前序列等价的序列,称为典型序列。典型序列代表了系统使用的独一无二的情况,对于给定抽象层次的黑盒子,对典型序列的分析将产生系统的状态空间。

  在典型序列分析中,用变量来封装每一激励序列的条件。这些变量可视为系统的状态数据。对相关变量的典型序列进行检查可得到每个变量的范围。对每一典型序列,变量值的组合是惟一的。这使得在分析完成时典型序列都是不相交的。

状态盒定义

  黑盒规范中每一序列可看作是个元组(当前的激励、以前的激励)。黑盒中位于每个序列上的以前的激励事实上是典型序列。基于这一点,制定系统的状态盒子规范只是一个装配的事。可将每个合法的黑盒映射(序列→响应)替换成状态盒映射(当前激励、状态→响应、状态更新)。状态盒可以自动从黑盒生成,如果借助认证工具生成,则无需再验证。

  状态盒的最后形式是一系列映射表的集合,每个激励对应一个映射表。映射表的格式如下图所示。

  状态盒规范是规范的最后产品。在从状态盒细化到明盒子的过程中将继续用到净室盒子结构规范和设计方法。在明盒中将进行完整的过程设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 首先,C语言是一种面向过程的编程语言,它广泛应用于嵌入式系统、操作系统和网络编程等方面。C语言的主要特点是语法简单,运行速度快,与硬件的接口能力强。 C语言的基础知识包括语法、数据类型、运算符、控制语句和函数等。在掌握这些基础知识之后,C语言的高级特性如指针、结构体和文件操作等就可以更好地应用。 C语言的优势在于它具有高度的可移植性和可扩展性。由于它不依赖于任何特殊的硬件或软件,所以它可以在各种各样的计算机平台上运行。而且,C语言的语法非常灵活,可以方便地进行扩展和修改。 在实际开发中,C语言经常用来编写操作系统、驱动程序和嵌入式系统等底层代码。此外,C语言在游戏开发、科学计算和网络编程等方面也有广泛的应用。 需要注意的是,C语言的开发需要正确地管理内存,否则就会出现内存泄漏或程序崩溃等问题。此外,C语言的编译器对程序的错误检测能力较弱,需要开发者自己进行错误检查和调试。 总之,学习和掌握C语言是非常有用的,它不仅可以帮助我们更好地理解计算机原理,还可以为我们提供开发底层和高性能应用的能力。 ### 回答2: ++的编程,你喜欢哪些特性?在编写程序时如何保证代码的质量? C++是一门功能强大、通用性广泛的编程语言,拥有许多令人喜爱的特性。其中我最喜欢的特性包括: 1. 面向对象编程:C++支持面向对象编程,使程序设计更加合理,易于理解和维护。 2. 泛型编程:C++能够使用泛型编程技术来实现模板类和模板函数,使得代码更加通用和可复用。这是提高生产效率的重要手段。 3. 内存管理:C++允许程序员手动分配和释放内存,同时也支持智能指针等高级内存管理技术,可以有效减少内存泄漏和内存错误。 为了保证编写的程序具有高质量,我通常会采取以下几个步骤: 1. 规范化代码风格:遵循团队规范的代码风格,包括缩进、命名、注释和代码结构等,可以提高代码可读性和可维护性。 2. 代码审查:团队成员之间相互审查代码,有助于发现错误和潜在的问题,避免潜在的性能问题、错误或安全隐患。 3. 单元测试:编写全面的单元测试代码,可以确保代码的正确性和可靠性,减少bug数量和修复时间。 4. 性能优化:针对程序的瓶颈进行性能优化,如减少内存分配、缓存、多线程、异步IO等,从而提高效率和性能。 以上措施可以确保代码的可靠性、可维护性、可读性和可拓展性。 ### 回答3: 在计算机科学中,C语言是一种通用、高效、底层的编程语言,被广泛应用于系统软件、嵌入式系统、网络编程、游戏开发等领域。 首先,C语言的语法简洁、结构清晰,适合开发大型软件系统。它可以直接控制硬件,提供了指针类型和位运算等底层操作,方便对计算机的各种硬件资源进行细致的管理和操作。 其次,C语言的代码可移植性强,可以在不同的操作系统上运行,同时还可以在不同的计算机系统中编译和运行。因此,开发人员不用花费太多的时间和精力做代码的移植,而可以专注于系统架构和功能开发。 其次,C语言的开源社区非常活跃。有大量的开源库和工具可以供使用,如C++、Java等语言的编译器、操作系统底层库、网络协议栈等,开发人员可以方便地引入这些库来加快开发进度。 最后,C语言的语法和设计基础,是其他很多语言的基础,掌握C语言对于学习其他编程语言也大有裨益。因此,无论是计算机专业学生、操作系统开发人员、嵌入式开发人员还是游戏开发人员,掌握C语言都有着非常重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gigix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值