Page1软件需求工程SoftwareRequirementsEngineering(SRE)通过原型法减少质量风险郭树行博士Page2学习目标在学完本章内容之后,你应该能够:1)知道使用软件原型的主要目的与作用;2)了解水平原型、垂直原型、抛弃型原型、进化型原型、书面原型和电子原型的特点、区别和典型应用;3)学会原型评价技术与方法;4)掌握建立有效原型的原则和方法。Page3什么是原型一个软件原型是所提出的新产品的部分实现。原型作为一种需求工具,它初步实现所理解的系统的一部分。采用原型法的目的Page4软件开发商通过原型的建立来掌握客户的需求和目的、获得用户的信任和了解、体现公司的势力和经验、储备开发技术和能力。客户通过对原型的了解,确定实现目标、明确系统需求、掌握系统规模、统一系统风格,了解开发技术、分析开发商的能力。采用原型法的目的Page5采用原型法的目的使用原型有三个主要目的:1)明确并完善需求;2)探索设计选择方案;3)发展为最终的产品原型。Page61原型法方法快速分析或修改原型构造运行评价计算机运行开发要求图1原型法软件生命周期Page71原型法方法快速分析规格说明快速分析构造原型原型运行原型评价原型修改意见修改原型修改说明图2原型法软件开发框架Page8建立原型的主要原因是为了解决在产品开发的早期阶段不确定的问题;必须利用这些不确定性来决定系统中的哪部分需要建立原型;必须利用这些不确定性来判断客户对原型的期望和评价结果的价值;1原型法方法Page92水平原型水平原型也叫做行为原型或模型。当人们谈到“软件原型”时,通常是指用户界面的“水平原型”。使用水平原型探索预期系统的一些特定行为,并达到细化需求的目的。通过水平原型,展示用户界面和这些界面之间的一些导航,但是它仅包含少量的功能。水平原型中看到的功能菜单和功能一般大部分都没有完全实现。Page102水平原型建立水平原型,可以使用户判断是否有遗漏、错误或不必要的功能。原型代表了开发者对于如何实现一个特定的use-case的一种观念。用户对原型的评价可以指出使用实例的可选过程,遗漏的过程步骤,或原先没有发现的异常情况。Page112水平原型在相当抽象的级别上建立原型时,用户可以把注意力集中在需求和工作流问题上,而不会被精细的外形或屏幕上元素的位置所干扰。在澄清了需求并确定了界面中的框架之后,可以建立更详细的原型来探索用户界面的设计。还可以使用不同的屏幕设计工具或甚至使用纸和铅笔来建立水平原型。Page122水平原型垂直原型也叫结构化原型或概念的证明。当不能确信所提出的构造软件的方法是否完善或者当需要优化算法,评价一个数据库的图表或测试临界时间需求时,就要开发一个垂直原型。垂直原型通常用在生产运行环境中的生产工具构造,它能使结果一目了然。Page133垂直原型比起在软件的需求开发阶段,垂直原型更常用于软件的设计阶段以减少风险。一个垂直原型只实现客户一部分用户界面和相应的功能。选择那一部分来建立垂直原型,对系统的成功将起关键作用。Page144抛弃型原型建立抛弃型原型或称探索型原型的目的是为解决不可测性并提高需求质量。通过花最小的代价,采用忽略很多具体的软件构造技术、快速地建立原型,并在原型达到预期目的以后选择抛弃或者进化。当遇到需求中的不确定性、二义性、不完整性或含糊性时,就建立抛弃式模型。抛弃型原型可帮助用户和开发者想象如何实现需求和可以发现需求中的漏洞;还可使用户判断出这些需求是否可以完成必要的业务过程。Page154抛弃型原型使用实例描述对话图抛弃型原型详细用户界面设计评价反馈评价反馈图3利用抛弃型原型从用户任务到界面设计的活动序列图Page165进化型原型与抛弃型原型相对应的是进化型原型;在已经清楚地定义了需求的情况下,进化型原型为开发渐增式产品提供了坚实的构造基础;进化型原型是螺旋式软件开发生存周期模型的一部分,也是一些面向对象软件开发过程的一部分。P165Page173抛弃型原型和进化型原型2)进化型原型进化型原型在原型法生命周期中不断改进,逐步逼近真实产品的原型;与抛弃型原型的快速、粗略的特点相比,进化型原型一开始就必须具有健壮性和产品质量级的代码;一个进化型原型必须重视软件系统性和完整性的设计原则,它必须易于升级和优化的。Page183抛弃型原型和进化型原型2)进化型原型从测试和使用中获得的信息将引起下一次软件原型的更新。原型的不断增长和更新,使软件从一系列进化型原型发展为最终的产品。进化型原型比建立抛弃型原型所花的时间和代价要多得多。Page193抛弃型原型和进化型原型3)综合使用原型的方法在软件开发过程中,可以综合使用多种原型方法。可从一系列抛弃型原型中获得的知识来精化需求,然后通过一个进化型原型序列来渐增式地实现需求。在最终设计用户界面之前,将使用抛弃型原型澄清需求,然后使用垂直原型使核心应用程序算法有效。Page203抛弃型原型和进化型原型3)综合使用原型的方法精化用户需求收集用户需求开发抛弃式水平原型构造演化式原型构造垂直原型设计用户界面设计软件结构构造和验证产品构造和验证产品演化原型;验证和交付增量交付产品图4在软件开发过程中使用原型法的一些方法Page213抛弃型原型和进化型原型3)综合使用原型的方法表13-1软件原型的典型应用抛弃型进化型水平•澄清并精化use-case和功能需求•查明遗漏的功能•探索用户界面方法•实现核心的use-case•根据优先级,实现附加的use-case•开发并精化Web站点垂直•证明技术的可行性•实现并发展核心的客户/服务器功能层和通信层•实现并优化核心算法Page224书面原型和电子原型1)书面原型从构造原型的手段上,人们把原型分为书面原型和电子原型。书面原型所包括的工具仅仅是纸张、索引卡、粘贴纸、塑料板、白板和标记器,是一种廉价、快速并且不涉及高技术的方法。书面原型方便了原型的快速反复性,而在需求开发中反复性是一个关键的成功因素。Page234书面原型和电子原型1)书面原型在许多情况下,一个可执行的原型未必可以获取用于解决关于需求不确定性的信息。在运用自动化工具建立详细用户界面原型,构造一个演化型原型或者从事传统设计和构造活动之前,书面原型对于精化需求是一种优秀的技术,它还提供了一个管理客户期望的有用工具。Page244书面原型和电子原型2)电子原型与书面原型相对应的是电子原型。建立电子抛弃型原型,可以采用许多工具,包括:编程语言,脚本语言,商品化的建立原型的工具包、屏幕绘图器和图形用户界面工具等。建立进演化型模型,必须一开始就使用产品开发工具如CASE等。Page255原型评价原型只有通过评价才有意义和价值。没有通过评审的原型可能包含许多陷阱;采用没通过评价的原型比没有原型更可怕。通过建立脚本让用户遵从一系列步骤,并回答一些特定的问题以获取所需要的信息,以提高原型评价的有效性。通过脚本可以让用户执行特定的任务并且指导他们评价觉得最不确定的原型部分。Page265原型评价务必让一些合适的人从恰当的角度评价原型。原型的评价者必须是所期望的用户群的代表。评价组必须从使用原型中功能的用户类里挑选出具有经验和经验不足的用户。应该使评价人员了解到,提交的原型并不包括所有的业务逻辑,这些功能将在以后的系统中才能实现。Page275原型评价在对原型进行评价时,要观察用户使用原型的过程,以获得更多信息。通过询问以下一般性的问题,判断原型是否符合需求:1)这个原型所实现的功能与你所期望的一致吗?2)有遗漏的功能吗?3)能考虑一下这个原型所没涉及的一些出错情况吗?4)有多余的功能吗?5)这些导航意味着怎样的逻辑性和完整性?6)有更简单的方法来完成这一任务吗?Page286原型法的最大风险原型法是一种减少软件项目失败风险的技术。然而,原型法又引入了自身的风险。最大的风险是用户看到一个正在运行的原型从而以为产品即将完成。处理风险承担者的期望是成功原型法的一个关键因素,因此要保证那些见到原型的人理解为什么要建立原型并且怎样建立原型。Page296原型法的最大风险对于正在演示或评价的一个抛弃型原型,无论它与真正的产品是如何相像,它决不会达到产品的使用程度。它仅是一个模型,一种模拟或一次实验。决不能把抛弃型原型当作可交付的产品,因为原型的设计和编码并没有考虑到软件质量和容错性。Page306原型法的最大风险不要因为害怕提交不成熟产品的压力而阻碍你建立原型,但是你必须让见到原型的人明白你不会交付原型,甚至不会将它称之为软件。控制这种风险的一种方法是利用书面原型而不是电子原型。另一种可能的方法是使用不同于在真正开发时所用的原型法工具,这将有助于你抵抗“已完成”原型开发并可把它当作产品交付的压力。Page316原型法的最大风险如果评价者看到原型可以对一个模拟的数据库查询响应甚快,那么他们可能期望在最终的软件产品中也具有同样惊人的性能。在对最终产品的行为进行模拟时,要考虑现实中的时间延迟,当用户了解了这些差别时,他就可以理解原型不能被看作可即将交付的产品的原因了。Page327原型法的成功因素风险建立有效的原型应遵循的原则:1)项目计划中应包括原型风险;2)计划开发多个原型;3)尽快并且廉价地建立抛弃型原型;4)对于已经理解的需求不要建立原型;5)不能随意地增加功能;6)不要从水平原型的性能推测最终产品的性能;7)在原型屏幕显示和报表中使用合理的模拟数据;8)不要期望原型可以代替需求文档。9)把从原型评价中获得的信息编写成文档。Page33本章小结软件原型是一种技术,采用原型方法是得到客户真实意图和宝贵信息的最有效方式。一个软件原型是所提出的新产品的部分实现。水平原型也叫做行为原型或模型,使用水平原型探索预期系统的一些特定行为,并达到细化需求的目的。垂直原型也叫做结构化原型或概念的证明,一个垂直原型实现客户一部分用户界面和相应的功能。抛弃型原型忽略很多具体的软件构造技术、快速地建立原型,并在原型达到预期目的以后选择抛弃或者进化。进化型原型在原型法生命周期中不断改进,逐步逼近真实产品的原型;原型只有通过评价才有意义和价值;Page34