个体软件过程与小组软件过程1小组软件开发过程TSPi个体软件过程与小组软件过程TSPiPhases–TodayLAUNCHSTRATEGYPLANREQUIREMENTSDESIGNIMPLEMENTATIONTEST测试阶段POSTMAINTAINANCE个体软件过程与小组软件过程惨痛教训•2002年11月11日,欧洲航天局改进型阿丽亚娜5ECA型火箭发射,火箭起飞96秒后,主级发动机Vulcain-2的冷却循环系统出现故障,飞行186秒后,火箭飞行控制受到严重干扰,火箭偏离预定轨道,456秒后,火箭自毁爆炸。•火箭运载的总价值为6.34亿美元的两颗卫星落入大西洋。•事故调查委员会的报告指出,Vulcain-2主级发动机冷却循环系统的故障导致了这次事故。•个体软件过程与小组软件过程TSP集成与系统测试Integration&Test一个集成、系统测试完的产品对每一个测试完成LOGTEST、LOGD表完成和评审用户文档更新的项目手册•完成评审的SRS和SDS•编码完成,单元测试完成个体软件过程与小组软件过程今天,我来陪大家一起学习TSPi!大家都要认真听课哦!个体软件过程与小组软件过程测试原则•测试的目的——评估产品(√)修正缺陷(×)我们应该在测试阶段以前已经发现和修正了几乎全部的缺陷OurIdealis质量差的产品的测试时间会急剧变长,而且我们可能也发现不了全部缺陷E.W.Dijkstra不是有一句名言吗?“程序测试只能表明错误的存在,而不能表明错误不存在。”个体软件过程与小组软件过程测试原则•有能力和经验的工程师,使用传统软件开发和测试方法•空间飞行器的控制软件——2年半的系统测试•22KLOC,186个缺陷,42个严重。只有一个严重缺陷是在第一年被发现的。个体软件过程与小组软件过程•测试用了6年,最后10个严重缺陷是在经过了288个星期的测试后才发现的。个体软件过程与小组软件过程O,原来一个产品的质量是在它被开发时决定的。今天我才明白,如果测试一个质量差的产品时,测试之后你仍然得到的是质量差的产品。麦兜恍然大悟:麦兜说:“看来,靠基于测试的质量策略是不行滴!”个体软件过程与小组软件过程咦,不对呀,如果软件质量已经很高了,那还要测试做什么呢?IEEE在1983年提出了软件测试的定义:“使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。”“软件测试的目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。”O,原来测试的目的是为了验证软件需求的啊~~~个体软件过程与小组软件过程TSPi集成与测试步骤1.使用已开发的单元测试过的部分来建立系统2.集成测试这个系统来验证它是否被很适当地建立起来,所有部分是否都存在,它们是否能够共同工作。3.系统测试这个产品来确认它满足了系统要求4.确认后续的开发工作没有改变上一周期的功能。改变是否会引起回归问题。建立集成测试系统测试回归测试个体软件过程与小组软件过程系统集成的模式与方法•集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)集成为子系统或系统,进行集成测试。个体软件过程与小组软件过程非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合进来测试。非渐增式集成渐增式集成集成策略策略大棒策略自底向上自顶向下三明治策略个体软件过程与小组软件过程集成测试的目的和意义•目的——所有部件是否存在,部件间的调用和交互是否起作用,而不关注部件的功能。•在系统比较庞大、接口关系十分复杂的产品上,如果因争取时间或过于自信的原因忽略集成,而直接跨越到系统测试,往往导致模块间接口问题难以发现或发现问题后查错十分困难,或反复更改模块内部代码和接口协议,造成欲速则不达的后果。•完整的测试流程是:单元测试-〉建立-〉集成测试-〉系统测试个体软件过程与小组软件过程系统集成的模式与方法•驱动模块(driver):用以模拟被测模块的上级模块的一次性代码。•桩模块(stub):也称存根程序,模拟被调用模块的一次性代码。ABCDriverStubWewanttoTestB个体软件过程与小组软件过程集成测试策略——非渐增集成•大棒集成方法(big-bangintegeration)——一次性集成采用大棒集成方法,先对每一个模块进行测试,然后将所有模块全部集成起来一次性进行集成测试。ABCDEF个体软件过程与小组软件过程集成测试策略——渐增集成•递增集成法,即逐次将未曾测试的模块和已测试的模块(或子系统)结合成程序包,然后将这些模块集成为较大系统,在集成的过程中边连接边测试,以发现连接过程中产生的问题。最后逐步集成为要求的软件系统。从主控模块开始,沿着软件的控制层次向下移动,逐渐把各个模块结合起来。从“原子”模块(即在软件结构最层的模块)开始集成以进行测试。渐增式集成自底向上自顶向下三明治策略个体软件过程与小组软件过程自顶向下集成方法M1M2M3M5S4M6S7M8深度优先:M1-M2-M5-M8-M6-M3-S7-S4宽度优先:M1-M2-M3-S4-M5-M6-S7-M8自顶向下集成方法示意图个体软件过程与小组软件过程自顶向下的增殖方式—这种集成方式是将模块按系统的程序结构,沿控制层次自顶向下进行集成。步骤:(1)以主模块为所测模块兼驱动模块,所有直属于主模块的下属模块全部用桩模块对主模块进行测试。(2)采用深度优先或宽度优先的策略,用实际模块替换相应桩模块,再用桩代替它们的直接下属模块,与已测试的模块或子系统集成为新的子系统。(3)判断是否所有的模块都已集成到系统中,是则结束测试。ACBAs3s1Es2s3ABs4s3s2AEs3s2BADCBS5EABCDEF加入B加入E加入C加入D加入F按深度方向组装个体软件过程与小组软件过程自顶向下的集成和测试存在一个逻辑次序问题。在为了充分测试较高层的处理而需要较低层的处理信息时,就会出现这类问题。在自顶向下集成阶段,还需要用桩模块代替较低层的模块,所以关于桩模块的编写,根据情况可能有所不同,有如下几种选择。只包含返回语句或只显示该模块已调用信息、不执行任何功能的哑模块。桩模块stubA桩模块stubD桩模块stubC桩模块stubB显示跟踪信息显示传递的信息从一个表(或外部文件)返回一个值进行一项表查询以根据输入参数返回输出参数表示传递的数据消息个体软件过程与小组软件过程自顶向下的优点1.在测试过程中较早地验证了主要的控制程序。检查和克服主控程序中潜藏的错误和缺陷。2.功能可行性较早得到证实,还能给开发者和用户带来成功地信心。个体软件过程与小组软件过程自顶向下的缺点•需要建立桩模块。•为了能够准确地实施测试,应当让桩模块正确而有效地模拟子模块的功能和合理的接口。•要使桩模块能够模拟实际子模块的功能十分困难,同时涉及复杂算法,真正输入/输出的模块一般在底层,他们是最容易出问题的模块,到测试和集成的后期才遇到这些模块,一旦发现问题导致过多的回归测试。个体软件过程与小组软件过程wangchunxiu@ccniit.com自底向上集成方法McMaMbD1D2D3自底向上集成方法示意图个体软件过程与小组软件过程2.2自底向上的增殖方式这种集成的方式是从程序模块结构的最底层的模块开始集成和测试。因为模块是自底向上进行集成,对于一个给定的模块,它的子模块(包括子模块的所有下属模块)已经集成并测试完成,所以不再需要桩模块。自底向上增殖的步骤如下:(1)由驱动模块控制最底层模块的并行测试,也可以把最底层模块组合成实现某一特定软件功能的簇,由驱动模块控制它进行测试。(2)用实际模块代替驱动模块,与它已测试的直属子模块集成为子系统。(3)为子系统配备驱动模块,进行新的测试。(4)判断是否已集成到达主模块,是否结束测试,否则执行(2)。d1Ed2Cd3Fd4DBd5FEAFEDCB个体软件过程与小组软件过程自底向上进行集成和测试时,需要为所测模块或子系统编制相应的驱动模块。常见的几种类型的驱动模块如图所示:随着集成层次的向上移动,驱动模块将大为减少。如果对程序模块结构的最上面两层模块采用自顶向下进行集成和测试,可以明显地减少驱动模块的数目,而且可以大大减少把几个系统集成起来所需要做的工作。驱动程序DriverA驱动程序DriverB驱动程序DriverC驱动程序DriverD调用从属模块从表(或外部文件)中传递参数显示参数兼有驱动程序B、C的功能表示传送的参数信息个体软件过程与小组软件过程自底向上优缺点优点不需要桩模块,而建立驱动模块一般比建立桩模块容易,同时由于涉及到复杂算法和真正输入/输出的模块最先得到集成和测试,可以把最容易出问题的部分在早期解决。此外,自底向上的方式可以实施多个模块的并行测试,提高测试效率。缺点“程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体”。就是说,在自底向上集成和测试的过程中,对主要的控制直到最后才接触到。个体软件过程与小组软件过程三明治集成方法•三明治集成方法(sandwichintegration)三明治集成方法自两头向中间集成。自底向上-自顶向下的双向测试:自底向上——一部分驱动模块,尽快碰到测试完成的真正的驱动模块自顶向下——一部分桩模块,尽快碰到测试完成的真正下属模块对含读操作的子系统自底向上直至根结点模块进行集成和测试对含写操作的子系统作自顶向下的集成与测试。个体软件过程与小组软件过程注意问题在集成测试时,测试者应当确定关键模块,对这些关键模块及早进行测试。关键模块至少应具有以下几种特征之一:1.满足某些软件需求;2.在程序的模块结构中位于较高的层次(高层控制模块);3.较复杂、较易发生错误;4.有明显定义的性能要求。个体软件过程与小组软件过程持续集成•通常系统集成都会采用持续集成的策略,软件开发中各个模块不是同时完成,根据进度将完成的模块尽可能早的集成,有助于尽快发现缺陷,避免大量缺陷集中涌现。•DailyBuild日常构建个体软件过程与小组软件过程系统测试•系统测试是将经过集成测试后的软件,作为计算机系统的一个部分,与计算机硬件、某些支持软件、数据和人员等系统元素结合起来,在实际运行环境下对计算机系统进行一系列的严格有效的测试来发现软件的潜在问题,保证系统的运行。个体软件过程与小组软件过程系统测试问题——关键•系统是否已经安装了?•是否适当地启动了?•是否能执行在需求时所要求的功能?•是否能在硬件缺陷或启动失败中恢复?•它的功能是不是足够?•性能能否满足要求?—相应时间、吞吐量、容量。•系统是不是可用?•用户是否将发现它很方便?•用户是否在回答正常操作问题时有麻烦?个体软件过程与小组软件过程系统测试的内容•压力测试(stresstest)•容量测试(capacitytest)•性能测试(performancetest)•安全测试(securitytest)•容错测试(recoverytest)个体软件过程与小组软件过程压力测试1、压力测试估算是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。对每个单独的组件进行压力测试后,应对带有其所有组件和支持服务的整个应用程序进行压力测试。2、测试环境准备包括硬件环境、网络环境、测试程序、数据准备等方面。个体软件过程与小组软件过程容量测试•容量可以看作系统性能指标中一个特定环境下的一个特定性能指标,即设定的界限或极限值。•容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。•如某个电子商务网站所能承受的、同时进行交易或结算的在线用户数。知道了系统的实际容量,如果不能满足设计要求,就应该寻求新的技术解决方案,以提高系统的容量。个体软件过程与小组软件过程性能测试•测试软件能否在真实环境中满足性能要求。•性能测试系统的性能指标,一般应在产