北京邮电大学软件学院本章内容1.需求评审2.设计评审1.需求评审统计表明,软件开发过程中70%85%的返工正是由于需求方面的错误所致,50%以上的软件项目失败都源于需求分析的问题。可以认为,好的需求分析是项目成功的重要基础或者必要条件。但是,由于受到软件计划方、需求分析人员等专业水平的限制,需求规格说明书中存在问题往往是必然的,其错误类型主要包括:不完整、不清晰、二义性、不一致、不正确、不可行等。需求定义错误会导致软件开发过程中的缺陷发散,并最终导致软件项目的失败。1.需求评审对需求进行测试最有效的方法是需求评审,是软件界公认的最有效的需求排错手段之一。进行需求评审需要注意几个问题:(1)参加人员:用户或用户代表、项目的管理者、系统工程师及相关开发人员、测试人员、市场人员、维护人员等。一般来讲,一个评审小组人员的数量在37个人比较合适。(2)评审的规模不宜过大:标准推荐的每次需求评审测试规模大约是1030页。(3)评审时间不宜太长:一个合理的评审周期应当控制在2个星期以内,一个合理的评审会议应当控制在2个小时以内。需求评审内容需求特性评审内容清晰性/无二义性所有定义、实现方法是否清楚地表达了用户的原要求?在功能实现过程、方法和技术要求的描述上,是否背离了功能的实际要求?是否有不能理解或造成误解的描述?完整性是否有一个内容表格、该表格包含了所有需求描述,是否所有的图形、表格都进行了标号,是否所有的需求都被进行了标号、并提供了索引,是否所有的需求都被定义的最细致、在需求的编制细节上是否一致?需求评审内容需求特性评审内容完整性是否所有与需求相关的设计约束、性能、属性、外部接口、通信、硬件、软件、数据库、输入/输出、安装特性、维护特性、安全特性等都被包含了?需求定义是否包含了有关文件(指质量手册、质量计划等)中所规定的需求定义所应该包含的内容?需求定义是否包含了有关功能、性能、限制、目标、质量等方面的需求?功能性需求是否覆盖了所有非正常情况的处理,是否对各种操作模式(正常、非正常、干扰等)下的环境都作了规定?是否详细描述了有关硬件、软件、操作人员、操作过程等方面的安全特性?是否对所有功能与时间因素有关的方面都作了考虑,是否标出了所有与时间有关的功能,时间准则是否都被说明了?是否定义了系统的所有输入/输出、输入的来源、输入/输出的类型(值域、单位、格式)和精度、输入的合法性检查?需求评审内容需求特性评审内容完整性是否规定了系统性能的各个方面、是否规定了系统的生产率、响应时间?是否按时间、重要性对系统功能、外部接口、性能进行了排序?所有对其它需求的内部交叉引用是否正确?需求是否为设计提供了足够的基础?是否包含了每个需求的优先级?是否充分定义了关于人机界面的需求?是否对需求定义进行了可行性分析?是否对影响需求实现的因素进行了调研?是否对商业行为进行了分析?是否评估了本项目对用户、其它系统、环境的影响?需求评审内容需求特性评审内容兼容性需求定义的文档是否满足项目文档的编写标准?界面需求是否使软硬件系统具有兼容性?一致性各个需求之间是否一致?是否有矛盾冲突?所规定的模型、算法和数值方法是否一致?是否使用了标准的术语和定义形式?需求是否与软硬件操作环境兼容?是否说明了软件对其系统和环境的影响?是否说明了环境对软件的影响?所采用的技术是否与用户要求的技术一致?需求评审内容需求特性评审内容正确性需求定义是否满足标准的要求?算法和规则是否正确?是否定义了对相关故障模式和错误类型的反应?是否对每一个需求都给出了理由,理由是否充分?对设计和实现的限制是否都有论证?是否参照了有关标准?可行性需求定义是否使软件的设计、实现、操作和维护都可行?所规定的模型、算法和数值方法是否对解决问题合适,能否在相应的条件下实现?是否能够达到质量要求?需求评审内容需求特性评审内容易修改性需求定义的描述是否易于修改?是否有冗余信息?健壮性是否有容错的需求?易跟踪性是否每个需求都具有惟一性并且可以正确识别它?是否可以从上一阶段的文档中找到需求定义中的相应内容?需求定义是否明确的表明前阶段中提出的有关需求和设计限制都已被覆盖了?需求定义是否便于向后继开发阶段查找信息?需求评审内容需求特性评审内容可理解性每个需求和产品的每个特性是否只有一种解析?是否有术语定义一览表?是否使用形式化或半形式化语言描述?语言是否有歧义性?功能性需求是否以模块方式描述?是否明确的标识其功能?需求定义的细致程度是否恰当?需求定义是否足够清楚和明确使其能够作为开发设计规约和功能性测试数据的技术?可测试性需求是否可以验证?是否对每个需求都指定了验证过程?数学函数的描述是否都形式化?需求评审内容需求特性评审内容性能是否精确的描述了所有性能需求和可容忍的性能降低程度?对每个性能应包括两方面的内容:(1)最坏情况的执行结果;(2)本性能失效后,对系统产生的影响。是否指定了所有期望的处理时间?是否指定了数据的传输速率和系统的吞吐量?功能是否清楚、明确地描述了所有的功能?所有描述的功能是否是必须的?是否能满足任务书和系统目标的要求?接口是否清楚的定义了所有内部接口和外部接口?所有接口是否都是必须的?各接口的关系是否一致、正确?数据对异常数据产生的结果是否都作了精确的描述?是否考虑了所有的异常数据?需求评审内容需求特性评审内容硬件是否指定了最小内存和最小存储空间的需求?是否指定了最大内存和最大存储空间的需求?软件是否指定了需要的软件环境/操作系统?是否指定了所有的软件设施?通信是否指定了目标网络、需要的网络协议、估计的网络吞吐量、估计的网络的连接数量、最小/最大的网络性能需求?可维护性是否包含了可行的系统维护方法?模块的关系是否是松耦合的?可靠性是否为每个需求指定了软件失效的结果?是否指定了特定的失效保护信息?是否指定了特定的错误检测策略?是否指定了纠正错误策略?2.设计评审设计是把抽象的需求描述转化成可操作的系统构架,设计测试是对系统结构设计进行检测,主要测试设计的质量,包括可靠性、稳定性、可扩展性等。如果系统设计的问题没有及时发现,按照设计方案完成系统开发后,往往会导致系统的可扩展性、可维护性、可移植性和性能等方面的问题,进而降低系统使用的寿命。设计测试包括了文档评审、模型测试、原型测试和模拟测试等多种方法。概要设计评审内容评审要素评审内容检查要素检查内容概述是否准确且充分阐述了设计系统在软件中的地位和作用,其与同等、上级系统的关系是否描述?系统描述和可追溯性需求规格概述是否与需求规格说明书一致?应具体到需求配置项的引用?是否每一部分的设计都可以追溯到需求说明书,接口规格说明书或者其它文档?应具体到配置项的引用?是否对需求分析中不完整、易变动、潜在的需求进行了相应的设计分析?模块的规格是否和软件的需求文档的功能需求和软件接口规格要求保持一致?设计和算法是否能满足模块的所有需求?是否阐述了设计中的风险和对风险的评估?概要设计评审内容评审要素评审内容总体设计设计目标是否明确清晰的进行了定义?是否阐述了设计所依赖的运行环境,以及和需求中运行环境的一致性是否满足?是否全面准确的解释了设计中使用到的一些基本概念?设计中逻辑是否正确和完备?是否全面考虑了各种实际限制?是否有不同的设计方案的比较?是否有选择方案的结论?是否清楚阐述了方案选择的理由?是否合理的划分了模块并阐述了模块间的关系?系统结构和处理流程是否正确地实现全部的功能需求?概要设计评审内容评审要素评审内容接口设计用户接口设计是否正确且全面?是否有单独的用户界面设计文档?是否有硬件接口设计?硬件接口设计是否正确且全面?是否有软件接口设计?接口设计是否正确且全面?是否有通信接口设计?通信接口设计是否正确且全面?内部接口设计是否正确且全面?是否描述了接口的功能特征?接口是否便于查错?接口相互之间、接口和其它模块、接口和需求说明书及接口规格书是否保持一致?是否所有的接口都有类型、数量、质量的信息?概要设计评审内容评审要素评审内容属性设计是否有可靠性设计,设计是否具体、合理、有效?是否有安全性设计,设计是否具体、合理、有效?是否有可维护性设计,设计是否具体、合理、有效?是否有可移植性设计,设计是否具体、合理、有效?是否有可测试性设计,设计是否具体、合理、有效?是否明确规定了测试信息的输出格式?概要设计评审内容评审要素评审内容数据结构是否准确定义了主要的常量?全局变量的定义是否准确?定义的全局变量的必要性是否充分?主要的数据结构是否都有定义?是否说明了数据结构存储要求及一致性约束条件?是否对所有的数据成员、参数、对象进行了描述?是否所有需要的数据结构都进行了定义,或者定义了不需要的数据结构?是否所有的数据成员都进行了足够详细的描述?数据成员的有效值区间是否定义?共享和存储数据的使用是否描述清楚?概要设计评审内容评审要素评审内容运行设计对系统运行时的顺序、控制、过程及时间的说明是否全面、准确?出错处理是否列出了主要的错误类别,每一个错误类别是否都有对应的出错处理?设计是否考虑了检错和恢复措施?出错处理是否正确合理?运行环境硬件平台、工具的选择是否合理?软件平台、工具的选择是否合理?调试方法调试方法是否完备且可实现?测试用例是否包含输入的有效等价类和无效等价类?测试用例是否有合法边缘值和非法边缘值?是否有针对函数入口、出口参数的调试方法和信息?是否有针对运行流程的调试方法和信息?概要设计评审内容评审要素评审内容清晰性程序结构,包含数据流、控制流和接口的描述是否清楚?一致性程序、模块、函数、数据成员的名称是否一致?设计是否反映了真正的操作环境、硬件环境、软件环境?对系统设计的多种可能的描述之间是否保持一致?(例如:静态结构的描述和动态结构的描述)设计在计划、预算、技术上是否可行?详细程度是否估计了每个子模块的规模(代码的行数)?程序执行过程中关键路径是否都被标名和经过分析?是否考虑了足够数量及代表性的系统状态?详细程度是否足够进行下一步的详细设计?概要设计评审内容评审要素评审内容可维护性是否模块化设计?模块是否为了高内聚、低耦合?性能是否进行了性能分析?是否有存在论证过程的性能数据和规格?是否描述了所有的性能参数?(例如实时性能约束、存储空间、速度要求、磁盘I/O空间)?详细设计评审内容评审要素评审内容清晰性是否所有的单元和进程的设计目的都已文档化?单元设计,包括数据流、控制流、接口描述是否清楚?单元整体功能是否描述清楚?完整性是否提供了所有程序单元的规格?是否描述了所采用的设计标准?是否确定了单元应用的算法?是否列出了单元的所有调用?是否记录了设计继承的历史和已知的风险?详细设计评审内容评审要素评审内容规范性文档是否遵从了公司的标准?单元设计是否使用了要求的方法和工具?一致性在单元和单元的接口中数据成员的名称是否保持一致?接口之间,接口和接口规格书之间是否保持一致?详细设计和概要设计文档是否能够完全描述“正在构建”的系统?正确性是否有逻辑错误?需要使用常量名称的地方是否有错误?是否所有的条件都被处理(,=,0,switch,case)?分支所处的状态是否正确?详细设计评审内容评审要素评审内容数据是否所有声明的数据块都已经使用?定位于单元的数据结构是否已经描述?如果有对共享数据、文件的修改,对数据的访问是否按照正确的共享协议进行?是否所有的逻辑单元、事件标记、同步标记都已经定义和初始化?是否所有的变量、指针、常量都已经定义并已初始化?功能性设计是否使用了指定的算法?设计是否能够满足需求?详细设计评审内容评审要素评审内容接口参数表是否在数量、类型和顺序上保持一致?是否所有的输入输出都已经正确定义并检查过?所传递的参数的顺序是否描述清楚?参数传递的机制是否确定?通过接口传递的常量和变量是否与单元设计的相同?传入、传出函数的参数,控制标记是否都已经描述清楚?是否以度量单位描述了参数的值区间、准确性和精度?过程对共享数据的理解是否一致?详细设计评审内容评审要素评审内容详细程度代码和文档间的展开率是否小于10:1?对模块的所有需求都已经定义?详