开篇:润墨网以专业的文秘视角,为您筛选了八篇测试项目总结范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
关键词:国产化平台;信息系统;软件测试
计算机软硬件实现自主可控是国家重要的发展规划,近年来国产化软件平台取得了长足发展,操作系统、数据库、办公软件、中间件等均已出现不少商用国产化产品,为信息系统能够采用国产化平台进行研发奠定了基础。软件测试作为软件研发领域中的重要一环,直接影响软件产品质量,一直备受重视[1]。软件测试与软件开发紧密相连,软件研发采用国产化平台实现,这对软件测试有着重要的影响,决定着软件测试所需要的技术,因此研究国产化平台下的软件测试具有重要意义。相比于非国产化软件平台,国产化软件平台起步晚,发展时间短,其对应的软件测试技术也比较欠缺,尤其是在配套的测试软件方面。本文通过分析软件测试关键活动,根据国产化软件测试技术现状,提出一种适应于国产化平台信息系统软件测试技术。
1信息系统软件测试分析
信息系统软件测试在不同研发模型中所分阶段不同,而区别于不同的研发模型,整个软件测试过程一般都需要经过测试策划、测试设计、测试执行、测试总结四个基本活动。测试策划活动主要进行需求分析,识别软件测试项、测试所需软硬件、人力资源等;测试设计活动主要根据识别的软件测试项设计测试用例,包括手工测试用例、自动化测试用例等;测试执行活动通过手工、自动执行测试,发现软件缺陷,进行软件缺陷归零验证;测试总结活动对测试执行结果进行整理分析,编写测试报告。同样的,基于国产化平台研发的信息系统软件测试亦需要经过测试策划、测试设计、测试执行、测试总结四个活动。1)测试策划活动进行需求分析、识别软件测试项依赖于软件自身需求,其与研发平台具有无关性,识别测试所需的软硬件则取决于研发平台。目前国产化平台的测试工具也面临着起步晚、发展时间短的问题,应用于国产化平台的软件测试工具种类远没有丰国产化平台软件测试工具丰富[2]。测试策划过程中需要识别出可用于国产化平台的测试软件是其要解决的重要问题,一方面取决于已有的测试软件,另一方面取决于信息系统的技术实现。2)测试设计活动所编写的手工测试用例取决于被测信息系统软件自身,而编写自动化测试用例则取决于所使用的自动化测试平台,不同的自动化测试平台所适用的软件类别不同。基于国产化的自动化测试平台选择范围小,且成熟度相比于非国产化平台并不高。因此测试设计阶段所面临的是被测信息系统软件的可实现自动化测试的用例覆盖程度问题。3)测试执行活动一方面是执行测试用例,另一方面还需要对软件缺陷进行分析定位,对被测信息系统的内存、CPU、网络、磁盘IO等指标进行监控,其对国产化平台依赖性较高。国产化平台的操作系统、数据库、中间件乃至办公软件所提供的分析、监控工具直接影响着软件测试的执行和软件缺陷的分析定位。目前,国产计算机环境的应用面、规模相对较小,应对复杂环境时,兼容性、综合性能、可靠性验证不充分,缺乏有效的诊断分析工具和测试评估环境[1]。测试执行过程中面临着如何充分利用国产化平台所提供的分析和监控工具完成测试执行、如何通过第三方辅助软件解决国产化平台自身不具备的功能完成测试执行的问题。4)测试总结活动为测试过程的最后一个活动,对测试执行的结果进行整理分析。对于国产化平台研发的信息系统,测试总结需要分析前几项测试活动的结果形成测试报告,还需要对测试技术形成积累,为基于国产化平台信息系统的软件测试持续发展提供经验。图1为信息系统软件测试活动图以及基于国产化平台进行软件测试活动的所要解决的关键问题。
2软件测试技术应用
2.1测试策划
国产化平台信息系统软件测试策划活动所面临的主要问题是识别测试所需软件项,应用于项目,需要结合项目自身特点。每个项目的系统架构、软件开发语言、运行环境等各不一样,因此在识别时结合被测软件,从三个方面解决测用所需软件:开源软件[3]、商用软件、自研软件。图2所示在项目测试过程中开源软件、商用软件、自研软件选择比重,其中开源软件选择优先,其次可通过自研软件、商用软件覆盖测试所需。1)开源软件具有成本低、灵活性高、自由的优势,国产化平台信息系统识别测试所需软件项可以优先从开源软件中选择,获取满足项目软件功能测试、性能测试、接口测试、安全测试、可靠性测试等测试类型的开源软件。2)开源软件在支持方面、文档方面、稳定性方面不如商业软件,对于测试软件要求高的项目可选择商用软件进行支撑。商用软件具有支持度高、日常更新、技术难度低的优势,采用商用软件可以避免测试过程中的一些无法解决问题。3)商用软件所提供的是适用于大多数用户需求的接口,对于被测软件,在不同的测试阶段、不同测试类型中,存在商用软件无法实现测试内容的场景,需要项目通过研发专用测试工具以实现测试覆盖,解决测试软件问题。
2.2测试设计
测试设计过程中可以通过编写自动化测试用例代替手工测试的反复操作,自动化测试用例覆盖率高可以有效地提高测试用例复用率和执行效率。基于国产化平台信息系统软件自动化测试在采用的自动化测试平台上,可以通过不同维度的测试用例设计增加自动化测试用例覆盖率,即分别从单元测试、接口测试、GUI测试分别设计自动化测试用例[4]。自动化软件测试用例设计一般遵循图3所示的三角形用例覆盖率比例,单元测试与代码直接相关,软件代码改动对单元自动化用例的影响较小,单元测试自动化用例覆盖率最高,其次是接口测试自动化用例。GUI自动化测试用例实现难度高,且受代码改动影响大,因此其自动化测试用例覆盖率最低。国产化平台信息系统软件自动化测试平台缺少QTP、Loadrunner等工具,目前只有少数自动化平台支持国产化操作系统,如kylinTOP自动化测试工具,除此之外,还可以采用Selenium、Python等实现自动化测试。此类软件对于GUI自动化测试与非国产化软件类似,因此国产化平台信息系统自动化测试用例亦需要遵循图3的测试用例覆盖率。
2.3测试执行
在测试执行过程中需要对信息系统软件缺陷进行分析定位、对信息系统的指标进行监控。信息系统的缺陷分析和指标监控包括两部分,一部分与依赖的国产化平台相关,另一部分与信息系统软件自身相关。与国产化平台相关的缺陷分析和指标监控可以采用国产化平台自持软件,目前国产操作系统、国产数据库软件、国产中间件软件等均具备满足监控平台自身指标的工具[5]。基于国产化平台的第三方测试工具如WGCLOUD、PIGOSS、SugarNMS等可以实现多平台、分布式监控。表1为这三款工具软件可支持的国产化平台以及可用于信息系统软件测试的监控项。
2.4测试总结
测试总结活动是对之前几项测试活动的总结,在测试执行完成后对各项测试活动进行整理分析,形成测试报告。基于国产化平台的信息系统软件研发还未广泛开展,对应的软件测试技术也需要不断的探索与研究,相比于非国产化平台的软件测试,国产化平台信息系统的软件测试不再仅限于单一项目,还需要与其他项目的测试策划相关联。因此测试总结活动还需要以资源池的形式进行技术积累,将整个测试过程中的软件测试方法、测试工具、测试分析等进行技术储备与传播,为其他国产化平台的软件测试提供借鉴。同样的,在其他项目的软件测试策划活动中,可以从资源池中的技术储备选取用于支撑整个项目测试的技术。
以下对我在xxxx年所做的工作进行全面总结:
1、团队管理
我的团队,以现在的表现和对我的关怀与安慰而让我感动。
测试人员是一个比较特殊的群体,以发现缺陷和保障质量为根本目标。这就要求我们在公司并不规范的项目管理与工作流程背景下,测试既要服从于现状、又不能安于现状。自xxxx年x月被正式提升为测试团队负责人之后,我将绝大部分时间和精力倾注在团队建设上,主要体现为团队成员的技术提升与培养、部门制度建设和文档标准建设、测试与开发的工作交互流程等。
在团队管理上逐渐尝试,本着先理后管的原则,将原本人心涣散的团队建设为一支相互关心、相互帮助的高凝聚力团队。坦白的讲,因为自身管理经验的欠缺,这个摸索过程中我走了许多弯路,但结果却使我受益良多。是我的团队教会了我这些,让我初步懂得了什么是管理,让我明白管的是理而并非是人。如果事情难以理通,那么在此之上的管只能是强制的,仅仅在表象上完成事情而已。所以一定要先理清楚然后再管,这时其实已经不需要管了,因为已经理顺,大家都会去积极主动的执行。有理的同时,还要帮助整个团队去整理,给予团队每位成员必要的工作帮助,比如工作思路和工作资源。除此之外,还包括适当的日常沟通和思想引导,通过绩效考核、部门例会、部门培训、单人交谈和部门聚会等形式,在工作时间和非工作时间进行交流,实现了团队成员之间的相互信任和相互认可。
在这个过程中,我的性格优势得以充分体现,我能够在第一时间发觉团队成员的状态异常,并通过及时的交谈予以解决,同时也体现出了我的性格劣势。记得在一次例会结束后,我要求每位团队成员写出5条关于我的意见和建议,结果让我非常欣慰,这说明团队成员对我的信任,也期望我有所成长。我也会以此为戒,逐渐改进。
2、团队工作
对工作模式进行改进,在团队工作的执行模式上完全改变了之前测试人员归属项目组的不规范情况。统一测试管理平台增强了测试人员的沟通频度,促进了大家的相互交流和相互帮助,并使得测试工作可以根据实际情况执行交互性测试。
综合xxxx年的测试结果,我至少为整个团队的表现打90分,可以说这一年的工作结果是令人满意的,当然主要是指经历了八月调整之后的测试团队。最让人难忘的是xxxx年的八月、九月和十月期间,测试团队刚刚经历了八月末的人员调整,以3旧1新的4人阵容承担了原来7人的工作量,并在高强度的工作压力下顺利的度过了团队调整期。面对这一充满压力的过程,我想,只有“兔子在哪里”的故事是让大家难以忘记的。
如今的测试团队有着完备的内部机制和运作方式,我们已经做好了相应准备,随时应对公司发展所必须的各种调整。
3、个人工作
xxxx年xx月初,我已向郭总提交一份xxxx年xx月x日到xxxx年3月的工作总结,其中所描述的工作内容均为当时参与的arpt项目的工作进展情况。自xxxx年x月开始,我与项目组全体成员参与了arpt奥运项目的投标文件编写工作,这也是我第一次参与标书编写,但从自身来讲,我已经倾尽全部所能。
在标书编写结束后,除继续负责arpt软件的测试外,逐渐将工作重心向团队建设偏移。在合理分配工作任务的前提下,适当从事部分模块的测试工作。关于团队管理内容,之前已经有所介绍,在此不再赘述。
4.、总结
年终结束,我的人生观和价值观也随着时间的推移而逐步发生改变,更加清晰的了解了自身优势与不足,包括职业发展过程中的一些必要能力,我也会在此经验的基础上渐渐的总结和调整。
测试管理人员:我与企业共成长
校园回忆如一梦,遇见你仿佛很久。测试工作在中采购和网络建设中发挥重要作用,2018年5月,我有幸加入测试中心这个大家庭。测试中心,顾名思义承担着绝大部分测试工作,尤其是采购和网络建设项目测试,测试工作在网络建设中发挥重要作用,为现网运营及质量提升提供技术保障。测试中心通过多年的测试经验积累,持续建设测试管理体系并逐步推广到全院。2016年归口全院测试质量管理,建立独立测试质量监督团队,测试工作管理办法进一步规范测试工作,明确了十三项管理措施,通过三项创新管理方式,做到行为有依据、监督有抓手、提升有建议。
纸上得来终觉浅,绝知此事要躬行。作为研究院测试管理团队的一员,入职伊始我就参与了《管理办法》第二次修订工作,小小的一本《管理办法》,却是研究院的重大制度,我的工作也围绕它展开了。难以忘记萍慧姐亲自为我细细解读难懂的业务用语,难以忘记秦倩带我去测试现场查看测试项目及文档检查,难以忘记新妍与我共同梳理百条测试澄清信息、整理归档测试文件,短短几个月仿佛经历了很多,让我对于测试管理工作越来越熟悉,也逐渐体会到测试管理的要旨是为了让测试工作越来越好,流程质量有保证,工作效率才能真正得到提升,意义非凡。
欲穷千里目,更上一层楼。测试管理发现问题要有处理机制,通过不断的理论研究和实践经验,我们建立“建章立制-有效监督-数据挖掘-阶梯上升”四步走的测试澄清闭环模型,深入测试澄清全生命周期,覆盖率100%。测试管理不能只执行不总结,通过深入分析2017年以来全部121个测试澄清,总结归纳提升建议40余条,规范测试执行,加强测试管理,并通过事后改进,事先预警机制针对性解决项目存在问题,部分测试澄清问题复现率下降70%,测试项目质量大大提升,测试领域也从有投诉到无投诉,测试人员从被动响应到主动实施,得到专业部所领导、研究院院领导和集团采购共享中心等需求部门的一致认可。测试管理也要配合公司IT进程战略,实现自动化,通过不断总结修改需求、设计流程,我们的测试管理系统终于初建模型,即将上线了,相信它一定可以发挥不凡的作用。测试管理不能只懂管理更要懂得技术,新一年的工作计划中,我为自己制定了技术学习路线,感谢移动研究院这个很好的平台,让我可以学习和接触到很多通信领域的知识,深入测试现场,切身体会测试工程师日常工作,才能更好地做好测试管理,而不是让管理飘在云端。
爱她的人与好风光。我司除了完善的技术平台更有丰富的文娱活动。精彩的新员工培训让我感受到欣欣向荣、朝气勃发的企业文化;测试中心党支活动,让我很快融入,感受到大家庭的温暖;研究院工会数不清的文艺课程,全方面关照员工诉求,水彩课上我有了人生总第一幅艺术作品。感谢我的组织,我与企业共成长!
关键词:CMM;软件开发;软件测试
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)17-31397-02
Based on CMM Software Development and Testing
YANG Guang
(Northeastern University College of Software,Shenyang 110004,China)
Abstract:Demand for software development, including design, programming and testing, and software quality assurance testing software is the key steps have been more and more people's attention. Currently, the CMM (Capability Maturity Model, Capability Maturity Model) has become the world's most popular, most practical kind of software production process standards, received international recognition software industry has become in today's enterprise-scale software as an indispensable. In software development and testing process, the characteristics of the enterprise itself, using the CMM software development management processes, to improve software development quality and efficiency.
Key words:CMM;software development;software testing
1 引言
软件开发包括需求、设计、编程和测试,而软件测试是软件质量保证的关键步骤,已经得到人们越来越多的重视。目前,CMM (Capability Maturity Model,能力成熟度模型)已经成为国际上最流行、最实用的一种软件生产过程标准,得到了国际软件产业界的认可,成为当今企业从事规模软件生产不可缺少的一项内容。2000年,国务院的《鼓励软件产业和集成电路产业发展的若干政策》中第17条中表示,将对软件出口型企业CMM认证费用予以适当支持。如今,国内企业也越来越重视基于CMM的软件开发和测试。
2 CMM简介
20 世纪 80 年代中期,国际软件产业界对软件过程的研究十分重视,因为在采用软件工程方法克服软件危机的过程中,人们已认识到,软件过程是否完善是软件风险大小的决定因素。1986 年 11 月,美国卡内基梅隆大学的软件工程研究所( Software Engineering Institute , SEI )应美国联邦政府的要求,针对美国国防部对软件承包商的能力评价问题,研究 “ 过程成熟度框架 ”。1987 年 9 月, SEI 开发了一套软件能力成熟度框架和软件成熟度问卷,用来评估软件供应商的能力。1991 年, SEI 自己总结了成熟度框架和初版成熟度问卷的实践经验,并以此为基础推出了 “软件能力成熟度模型( Capability Maturity Model For Software , CMM ) 1.0 版 ”。1993 年, SEI 在广泛听取美国政府和各界软件专家的意见后,推出了目前世界上比较流行的通用的 CMM1.1 版。
CMM是一个用来描述软件组织的模型,用于评价软件承包能力并帮助其改善软件质量的方法。CMM是评估软件能力与成熟度的一套标准,它侧重于软件开发过程的管理和工程能力的提高与评估。CMM表现了软件组织能力成熟度的特称,确切的说,CMM是在软件流程上的能力成熟度。 CMM将软件组织抽象为能力成熟度模型。能力成熟度是软件组织解决“按时,按计划,高质量”这一问题的关键因素,而CMM的目的,就是要帮助软件组织在进度和预算范围之内生产出高质量的软件产品。
CMM标准共分五个等级(5级为最高级别),是一个动态的过程,企业可根据不同级别的要求,循序渐进,不断改进。从第一级到第五级分别为:初始级、可重复级、定义级、管理级和优化级,从低到高,软件开发生产的计划精度越来越高,每单位工程的生产周期越来越短,每单位工程的成本也越来越低。
3 基于CMM的软件开发与测试
CMM是一种管理方法,是一个软件过程改进框架,这个框架与软件生命周期无关,也与采用的技术无关。CMM目前代表着软件发展的一种思路,一种提高软件过程能力的途径。尽管它存在着某些不足。例如,成熟级别、关键过程域、公共属性和关键实践还需要在软件行业进一步深入地讨论和修订,但它确实为软件行业的发展提供了一个良好的框架,而且是浓度软件过程能力提高的有用工具。增强我国软件企业的竞争力,提高国产软件的水平是国人的共同愿望,但目前我国软件水平,尤其是软件开发能力和软件生产能力还很差。那么,如何提高我国软件的开发和生产能力,从而提高软件整体水平?软件企业实施基于CMM的软件开发与测试也许不失为一条有效的途径。
按照CMM要求将开发分为九个阶段:项目规划、小组启动、需求分析、概要设计、详细设计、编码调试、系统集成与测试、验收、项目关闭。其中软件的测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审。
下面从各个阶段主要项目活动、阶段交付文档和评审点出发,详细描述项目开发的各个阶段。
(1)项目规划
项目规划要对所要解决的问题进行总体定义,包括了解用户的要求及现实环境。计划阶段要从技术、经济和社会等3个方面研究并论证本软件项目的可行性,编写可行性研究报告,探讨解决问题的方案,并对可供使用的资源(如计算机硬件、系统软件、人力等)成本,可取得的效益和开发进度做出估计,以制订完成开发任务的实施计划。另外,项目的相关人员提出创新性的想法,并对自己的想法进行可行性分析,研究新想法的问题范围,探索这个问题是否值得去解决,是否有大概的解决办法,并对需要的资源进行估计。
本阶段的交付文档是立项说明书,立项说明书必须提交工程委员会进行评审。如果评审不通过,项目就此结束。
(2)小组启动
在项目立项评审后,根据先前的资源估计成立项目开发小组,确立开发小组中各个角色的成员,然后对项目开发需要的软件和硬件资源进行分配,并搭建好项目开发环境。结合项目最后的期限要求以及分析CMM 历史度量库,确立项目开发的一级计划,确定以下各个开发阶段的评审点。本阶段的交付文档主要有项目计划书和小组启动说明书。项目计划书必须经过工程委员会的评审,如果评审通不过,必须参考CMM的历史度量库来修改项目计划直至通过评审。
(3)需求分析
需求分析是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把需求用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。分析阶段的基本任务是和用户一起确定要解决的问题,建立软件的逻辑模型,编写需求规格说明书文档并最终得到用户的认可。需求分析的主要方法有结构化分析方法、数据流程图和数据字典等方法。
基于CMM的需求分析阶段更注重项目的管理流程。首先项目组要确立在该阶段的二级计划,然后开始需求分析,明确需要开发系统必须具备的功能。并要主动与用户交流,获取需求并分析需求。制定相应的系统测试计划,在这以后的每个阶段项目组长都必须提交阶段工作报告。
CMM的需求分析阶段主要交付的文档有更新后的项目计划书、需求跟踪矩阵、需求分析说明书、系统测试计划书、项目词汇表和阶段工作报告。需求分析说明书必须提交给工程委员会评审,只有在评审通过后,才能进入下一个开发阶段。
(4)概要设计
一般软件设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块。概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。
基于CMM的概要设计阶段不但要为系统描述系统流程图、构建系统的可能方案、确立的系统总体方案和进行模块划分及设计。而且还有进行一些系统的集成测试计划和设计评审等工作。该阶段主要的交付文档为更新的项目计划书、更新的需求跟踪矩阵、编程规范、概要设计说明书(包含总体方案)、集成测试计划书、意见反馈单、阶段工作报告。各个模块的概要设计说明书和总体方案必须经过评审。
(5)详细设计
详细设计阶段是对概要设计的结果的细化,概要设计已经达到函数级的分解,详细设计是对分解的函数进行实现的描述。一般详细设计的首先要设计模块的程序流程、算法和数据结构,其次,要设计数据库,常用方法还是结构化程序设计方法。
基于CMM的详细设计阶段必须依次补充完善需求跟踪矩阵,并确立单元测试计划和进行评审。该阶段的交付文档为更新的项目计划书、更新的需求跟踪矩阵、详细设计说明书、单元测试计划书、意见反馈单和阶段工作报告。各个模块的详细设计必须经过评审。
(6)编码调试
软件编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的"源程序清单"。充分了解软件开发语言、工具的特性和编程风格,有助于开发工具的选择以及保证软件产品的开发质量。当前软件开发中除在专用场合,已经很少使用二十世纪80年代的高级语言了,取而代之的是面向对象的开发语言。而且面向对象的开发语言和开发环境大都合为一体,因此大大提高了开发的速度。
基于CMM的编码调试阶段的任务包括:①项目组制定出在本阶段的二级计划;②学习确认编程规范,再开始编码,同时必须进行同行检查和走读检视;③进行单元测试。一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。在确定测试用例的同时,应给出期望结果。该阶段的交付文档为更新的项目计划书、更新的需求跟踪矩阵、代码、单元测试报告、意见反馈单和问题跟踪单。所有代码必须经过工程委员会的评审,以确认是否符合编程规范要求。
(7)系统集成和测试
软件测试的目的是以较小的代价发现尽可能多的错误。要实现这个目标的关键在于设计一套出色的测试用例(测试数据和预期的输出结果组成了测试用例)。如何才能设计出一套出色的测试用例,关键在于理解测试方法。不同的测试方法有不同的测试用例设计方法。两种常用的测试方法是白盒法和黑盒法。
一般测试分为:单元测试、集成测试和系统测试。单元测试阶段通常是属于开发项目组编码调试的范畴。单元测试阶段后要将系统集成成一个可运行版本。此后,就进入系统集成和测试阶段,系统测试应该由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能政党工作并完成所赋予的任务。该阶段主要的交付文档为集成测试报告和系统测试报告、问题跟踪单和阶段工作报告。在测试阶段完成后,必须经过内部验收的评审才可以提交进入正式的验收阶段。
(8)验收
在验收阶段,项目组主要是配合客户进行验收。首先准备好用户手册以及相关文档,并提交系统验收检查单,协助客户进行验收测试。本阶段的交付文档为验收报告,客户签署的验收报告也就是对本阶段的评审。
(9)项目关闭
本开发过程最后强调的是项目关闭阶段,这个阶段是对项目开发的总结。针对CMM 中关键过程域的实施执行情况,各个角色必须提交相应的角色总结报告。在项目组长汇总后,总结项目开发中的不足和经验,提交过程改进意见和CMM度量库。这个过程有助于项目开发组织改进自己的软件开发过程。
4 总结
CMM 是国际公认的 “ 事实 ” 标准,是中国软件业走向国际市场的通行证。CMM的目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。因此在软件的开发和测试的过程中,针对企业自身的特点,采用CMM软件开发管理流程,能够提高软件开发的质量和效率。
参考文献:
[1]何新责.软件能力成熟度模型[M].北京:清华大学出版社,2000.
[2]刘莉,傅英亮,陶强.基于CMM的软件开发和维护过程的研究[J].信息技术与信息化,2006,(05).
2009年2月25日至4月17日,礼平老师提出将学院大三的“软件项目管理”和“软件项目开发实践”两项课程相结合,让学生完成一个网上书城系统。项目历时52天,在两位老师的悉心指导下,整个学院的同学组成20多个团队,开始了开发历程,在这个过程中,着重培养了学生获取知识、共享知识、应用知识、总结知识和传播知识的能力。
作为其中一个团队的小组长,我深为自己所在的团队“喜羊羊与灰太狼”感到自豪,它对于我以及我们组员的影响都是“前所未有”,并且是长远的。说其前所未有,缘于这次开发就如大学前几年的一次总结,帮助我们汇总学习方法,融会贯通所学知识;说其影响深远,缘于其对我们后期课程乃至下一届或下几届学弟学妹们的帮助。
“喜羊羊与灰太狼”是一个由5个女生、2个男生组成的团队。这是一个奇怪而又强大的组合,这7个人没有任何相关领域的开发经验,没有任何组队共同开发的合作经验。在团队中,有的活泼可爱,有的深沉内敛,有的认真细致,有的想法独特,当组合在一起之后,我们有过争执,有过失望,但是最终我们却提交了一份令人满意的成果,包括7个完整版本的源代码和32万字的文档,还有每一位成员在未来学习中取之不尽的开发经验。
2 实际开发结果
2.1 产品
产品功能如图1所示。
2.2工作量
编码工作完成情况:
・C#代码:9712行:
・数据库代码:299行;
・CSS代码: 633行;
・存储过程:1711行。
预计的生产效率:70行/人/日
程序的平均生产效率为:12355/7/14=126行/人/日
实际效率大于预计效率原因:
(1)开发团队中有技术很好的成员,当遇到问题后,可以通过请教相互沟通,能够很快地解决问题,不落下进度。
(2)开发人员自学能力好,通过第一、第二阶段的开发,积累了一定的经验,在后期三四阶段的开发中将效率提高。
(3)所有成员都十分努力,同时团队的管理机制很好,项目开发严格按照计划进行,按时完成任务甚至超前完成,工作效率很高。
2.3 对生产效率的评价
经过统计,整个网站系统的代码数量为:C#代码9712行,数据库代码299行,CSS代码633行,存储过程1711行,此部分都是开发人员手动开发的代码,总共为12355行。前期的开发时间为14天。那么程序的平均生产效率为12355/7/14=126行,人/日,这已经大大超出我们所预计的生产效率70行/A/日。虽然量增多了,但是质量依旧控制在计划之内。
经过统计,所产生文档字数大约为:75870字。所统计的文档包括需求、概要设计、详细设计、数据库设计、开发计划、测试计划等项目所需文档。那么文件的平均生产效率为:75870/1000/7/7/=1.5千字数/人/日,这明显不足于我们所预期的2.5千字数/人/日。这是因为我们还有其他很多文档并没有统计进去,例如小组的沟通,小组每周的会议记录,小组每周的总结,个人总结等。因此,如果包括所有的文档,估计能有3千字数/人/日左右。
因此我们的生产效率是能达到我们预期的要求的。
3 开发历程
从以上的开发成果看,这已经是一个完整的开发项目。这不同于课程的开发作业,也不同于科技创新项目,课程初期,礼平老师接受同学们的建议,结合同一学期着重技术讲解“软件开发实践”课程,提出共同完成同一个项目的观点,两门课程从不同的角度,即技术讲解和项目管理指导两个方面指导项目开发。这样大大减少了课程内容的重复和冲突,集中了同学的时间和精力,让我们更加具体细致地完成一个项目。
3.1 相关课程的结合,集中学生经历
随着学校对于学生动手能力的要求提高,每一门专业课程基本都要求学生开发一个小型项目以增加对于专业知识的了解。然而过多的课程导致了较大的项目压力,最后学院的同学们都不堪重负。实际上,学生一直在忙于完成各种不同的项目,并没有达到实际的学习效果。
因此,当我们对礼平老师的教育理念还没有理解时,我们只是觉得能够将有关的课程相结合,是多么令人开心的事情。
“软件项目开发实践”课程老师由浅入深地对我们所遇到的技术问题进行指导:“软件项目管理”课程随着软件生命周期的进行讲述不同阶段应该要采用的软件工程项目管理方法。
然而,这不只是两门课程的结合。在后期的软件测试课程中,我们再次将自己完成的系统作为测试对象,对其中重要的功能点采用一套完整的测试方案,对其进行测试评估。因为被测系统是由自己开发,在测试过程中,我们可以很顺利地对缺陷进行修复。
3.2 软件产品的开发生命周期同课程的结合
以软件开发周期作为课程的大环境,两位老师由浅入深,从需求分析开始,到设计、实现、测试和维护,一步一步带领我们进行开发。
这像是对所有课程的总结,其中包括编程的基础课程、Web开发的相关技术、软件工程的相关课程、项目管理。在这样一个短暂的不到两个月的时间内,我们实现了基础课程中的理论知识,我们重现各类开发和设计模型。在需求分析中,我们采用“面向对象”课程中的需求分析方法,力求通过标准的需求建模方法,明确系统功能和性能要求:在设计和开发过程中,我们采用迭代的开发方法,运用所学的Web开发课程和C#编程的内容;在测试阶段,我们采用软件测试课程中学到的测试策略,对每一个阶段的测试,运用有关的测试工具开展测试过程。
现在课程结束已经快一年了,但在后期的像“软件开发实习”这样的课程中,我们却总是不自觉地会将这次开发的经验作为我们开发的依据。通过这样一次完整的项目开发过程,我们了解了整个产品的开发周期,明确每个阶段应该完成的任务,熟悉各个阶段所可能遇到的问题以及应该采用的方法,甚至对于风险的估计都更加准确了。
3.3 老师的指导,我们前行的指明灯
摒弃了传统的教授方式,在礼平老师的教育理念指导下,我们开始走上讲台讲述自己所遇到的问题、采用的解决方法,老师让我们开展讨论,让我们团队内部或者不同团队之间共同交流来寻求解决方案。另一位“软件工程实践”课程教师,他采用问题驱动的教学方式,对我们不同开发阶段遇到的技术问题进行汇总统一,提供出可选的技术解决方案,不同的团队可以依据自己项目的特点采用合适的解决方案,并通过自学的方式了解该解决方案的技术细节,从而顺利解决问题。同时我们也了解到了相关其他解决方案适用的情景,让我们在今后的开发中“有法可依”。
在这场互动式的教学中,老师并没有因为学生的主动而减轻了工作压力,他们需要及时调整我们到合适的方向上,这得益于老师自身丰富的开发经验。礼平老师会在我们停滞不前的时候,建议我们应该先完 成一个静态Demo来帮助了解需求:在我们对项目计划感觉茫然的时候,他会拿出自己多年的开发经验告诉我们,应该如何在计划和开发上平衡时间;当我们对自身网站的特色定位不清楚的时候,他会让我们注重细节的完善而不是新颖的功能,让我们最终以一个稳定而完整的系统获胜。当初的我们甚至以为一个项目开发就是一次集体编写代码,然而老师却教会我们需要确定需求,将设计工作做得完整,实际的开发时间只需要两个星期,事实确实是如此,在严格的项目进度控制中,组员在两周之内竟然基本完成了系统功能。
就是这样,起初懵懂的我们对“项目”的过程完全不知所措,而现在,任何项目到我们手中,无论其采用的技术如何,无论其要求时间是多久,我们总能得心应手地为其制定开发计划并开展工作来实现它。这些知识在别人看来就像是与生俱来的,然而只有我们知道,正是通过了这样一次完整的开发过程,让软件工程领域的知识成为我们自己的“天赋”,随手拿来,即人们常说的“经验”。
在这个成长的过程中,老师并没有说,如果遇到了这样的问题,有多少伟大的人发明了多少模型我们可以采用,这种模型的构建过程是这样,那种模型的适用情况又是如何。若老师仅是这样用生硬的文字告诉我们,用我们做20年学生的经验来看,不出一个月这些知识就会模糊,不出半年这些知识又会变成新的知识。而在这一次的开发过程中,老师却像路标,告诉我们正确的方向,或者可能的路线,而其中探索的过程却是由我们来实现,前进的道路由我们自己来选择。我们变得习惯于独立思考,我们变得善于表达,我们开始熟悉这条成功之道。
3.4 综合性学习经验,我们最终的目标
获取知识(自学)、共享知识(团队工作)、应用知识(解决问题)、总结知识(创新)和传播知识(沟通)的能力,这是CDIO要求学生在基于项目的学习过程中需要得到的综合能力。
我们从不纠结于某一个技术问题,从不局限使用某一种开发模型,项目的内容也不限定,通过一次完整的项目开发过程,着眼于学生综合能力的提高,培养学生成为能够与国际接轨的高等工程师。
礼平老师强调我们要不断总结,并把这个过程运用到其他地方,不仅是软件产品的开发,从确定需求、制定计划、设计和实现的过程来看,我们可以将各种模型甚至运用到制定个人规划,还有那些需要考研的同学的考研计划中。在项目完成后,老师欣喜地翻阅每一位同学的心得体会。作为小组长我也看过组内每一位成员的总结,每个人的教训和经验都不尽相同,也许这就是我们学习的目的,每个人都能有所收获,从不同的角度,不同的领域培养不同的能力,收获不同的知识。
3.5课程考核,不仅仅是分数
与往常的课程考试不同,我们采用的考核方式是多样的,包括平时的讨论、组内的互评,答辩的结果和最终的产品质量。
平时讨论作为考核的内容之一,增加了平时课堂讨论的参与度,使得同学们更加积极地投入到课堂交流,为每一次的成果汇报作好充分的准备,积极主动地思考解决方案。
组内互评是我们的一大特色,我们采用礼平老师号称的“雷达图”来评定每一位成员在开发过程中的表现。这种评定方法通过不同方面评定每个人的能力,让每位成员能够更加清楚地认识自己,并依据其在组内的贡献作为评分依据,计算出组内互评的最终得分,“雷达图”示意图如图2所示。
答辩是最后的考验,我们为此做足了准备,甚至排练了多次。经过之前多次的中期检查,我们慢慢学着如何更好地展示和表达我们的成就,让老师和其他项目组在答辩的短暂十分钟之内看到我们的努力和优秀的产品。终期答辩推动着我们不断完善系统,因为考虑到老师要进行任何操作,提出各种疑问,所以我们从用户的角度考虑一切有可能出现的操作,尽可能地保证系统的实用性、便捷性和稳定性,这样大大提高了产品的质量。在后期的总结中,我们发现这样的方式运用到实际的产品开发中也是如此的有效,因为时刻从客户的角度考虑,是保证产品质量的重要因素。
正是这样的考核方式,不仅让我们学会如何有效表达、了解自己,更在一定程度上学会考虑如何成就一个成功的项目。
3.6 团队合作,我们最宝贵的经验
人际交往技能即团队协作和交流,是CDIO工程教育模式所提倡的应该培养学生的技能。对我们来说,团队培养的协作关系是我们宝贵的财富,团队合作也成为我们最宝贵的经验。
为了能够顺利完成每个阶段的计划,我们的小组成员常在一起整合到凌晨,为问题开会讨论好几个小时,我们会将设计制定的细致再细致,只为其他队员能够减少理解时间。当然,因为我们性格各异,所以也会对他人的行事风格不理解,也会出现推脱责任的时候,也有不能达成一致意见而发生争执的时候。可是因为大家有共同的目标,抱着对项目负责的态度,我们逐渐建立起默契,渐渐开始为对方考虑。每个小组成员都很细致地对待自己负责开发的模块,尽量减少出现缺陷,避免其他功能的开发遭到停滞或者增加整合人员的工作量。
很多人都知道,团队合作会保证项目的顺利进行,减少项目风险,构建一种良好的团队氛围,而对于我们来说,团队合作更让我们关注自己的工作,在很大程度上保证了产品开发的质量。通过团队开发的方式,让我们在开发过程发现协作的意义,更让我们收获了友谊。
4 CDIO之我见
礼平老师的课堂带给我们收获和成果,作为软件学院的学生,作为CDIO工程教育理念的受益者,我们有自己的理解和感受。
在有限的大学4年教育中,我们希望自己能够承受一定的压力并收获有用的知识,能让我们在未来的职业领域有所发展。同时我们了解,作为工科学生,工程实践经验尤为重要,而从小学到中学,理论为主的教学模式让我们深感自己经验不足,动手能力不强,对于实际的公司项目更是束手无策。成为社会肯定的具有良好综合素质的毕业生,这是我们对自身的要求,也是我们对于学校教育的期望。
1软件测试过程中的质量管理
软件测试贯穿于软件开发流程的各个角落,能够让工作人员及时在软件工程阶段中发现漏洞所在,确保最终交付的产品无论是功能还是性能,都能得到客户对品质的需求,软件测试需要在软件开发各个阶段进行,工作人员在进行软件测试的时候需要作出相应的软件测试文档。软件测试中质量管理尤为重要,产品需要满足验收交付要求,需要根据软件开发实际情况,从不同的角度进行度量,软件测试最主要的问题是软件质量问题,在保证质量的基础上从不同角度度量产品最终质量。有的人在软件测试时可以意识到重要性,但是却没有办法清晰地找到提升质量的有效方式,随着软件测试研究的深入,人们开始建立起软件质量度量模型。通过对模型的分析,得知软件质量从以下几方面衡量:(1)开发出来的软件是否符合用户的需求,软件整体结构是否良好,软件是否容易读取,修改是否容易;(2)软件系统有没有友好用户界面,用户在使用该软件的时候是否方便,需不需要进行其他操作;(3)软件生存周期内各个阶段文档是否齐全,存储是否得当,所有文档是否被规范配置管理,工作人员进行软件测试需要根据客户需求,以此作为参考,从对方的角度去看待产品,想象客户会如何使用产品,使用的时候可能会遇到什么问题。软件测试质量管理方面还需要进行软件质量保证,分阶段的对开发的软件进行科学评审,根据评审结果制定相应计划,将软件分成几个阶段,根据不同阶段呈现出来的特点制定评审要求。随后,工作人员在审查软件开发过程时,需要为每一个过程制定规范,不管是文档还是编程都要达到相应的规范需求,要求软件测试人员做好质量评估报告,内容丰富详细,评估软件测试的整个过程,对存在不足的地方提出有效改进建议。某测试工作人员在进行软件测试的时候,为了确保质量管理工作到位,特别完成了软件测试环境的科学搭建,由于不同的软件对测试环境有着不同角度的需求,如C/S及B/S架构相关的软件产品,测试人员会有不同操作系统,如Windows系列、Unix、Iinux甚至苹果OS等,这些测试环境都是必须的。对于一些嵌入式软件,如手机软件,如果测试人员想测试一下有关功能模块的耗电情况,手机待机时间等,可能需要搭建相应的电流测试环境。
2软件测试过程中的风险应对分析
2.1风险识别与风险量化
对软件进行项目风险管理,可以在最短时间内得到项目目标,项目风险管理以潜在风险最小化作为目标,软件测试项目风险管理中包含软件风险识别、软件风险量化、软件风险应对计划制定以及软件风险控制。其中,软件风险识别需要工作人员在软件测试项目风险管理开始之前进行,并在整个项目执行中不断完成,软件风险识别在项目整个生命周期以内属于连续过程。软件风险识别包含了风险来源确定、风险产生条件辨别,测试人员要详细表述风险特征,确定这些风险是否会影响到软件测试项目的正常运行,对于软件测试项目风险管理来说,风险识别不是一次就能完成的,而是应该在项目的全过程进行。
2.2风险应对计划与风险监控
针对风险量化结果,为了降低软件测试项目的负面效应,测试人员会制定相应的解决措施和技术手段,做好风险管理计划,完成风险认知,为风险监控提供技术基础。人们可以使用多种方式作为风险控制方法,利用核对表对项目进行定期评估与净值分析,风险监控的输出包含对风险的错误纠正和软件测试项目管理计划更新,软件测试项目中发现风险以后对其加以分析,确定相对重要性与影响程度,为来自内部与外部的风险提供标识,对每一种风险进行科学评估,计算出风险发生的可能性与最终结果,对风险进行分类,为风险处理提供可操作信息。在经典风险管理过程中,主要会使用到Boehm、CRM、Leavitt、Boehm等多种模型,使用这种方式很有可能造成人员不足或者成本不够的问题,测试人员在开始进行软件项目开发的时候就要对潜在风险进行总结,将所有的风险形成表格形式,并在软件测试项目生命周期内进行会议讨论,更新表格。应当对可能出现的恶劣后果因素进行准确评估,对于当前最紧急的风险进行决定和处理,制定控制风险的基本应对措施,评测和保证风险策略开展的有效性。
3总结
总而言之,人们从第三方软件测试角度进行软件测试时,不仅要进行完善的质量管理,还会进行项目风险管理,对风险进行评估与排序,确定不同风险给软件带来的影响,探究风险发生概率,进一步保证软件的质量,降低产品维护费用,提高用户满意程度,降低软件责任风险,提高经济效益。
参考文献
[1]徐莉.基于项目管理角度的软件测试流程及管理[J].网络安全技术与应用,2018(03):38-39.
关键字:软件;测试过程;管理
软件开发过程的质量决定软件的质量,软件测试过程的质量直接影响测试结果的准确性和有效性。
1 软件测试过程常用的模型
1、V模型
V模型反映出测试活动与分析设计活动的关系,指出单元测试和集成测试应检测程序的执行是否满足软件设计的要求。系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标。验收测试确定软件的实现是否满足用户需求或合同的要求。
2、W模型
W模型指出软件各开发阶段中应同步进行的验证和确认活动,即测试与开发也应是同步进行的。W模型有利于尽早和全面的发现问题。
3、H模型
V模型与W模型有不妥,即它们都把软件的开发视为需求、设计和编码等一系列串行的活动,而事实上,这些活动可以交叉进行的。H模型揭示这一点:软件测试是一个独立的流程,贯穿于产品的整个生命周期中,与其他流程并发进行。
除了上面的几种常见模型外,还有X模型、前置测试模型等。在实践中,建议以W模型作为框架,及早全面地开展测试,同时灵活运用H模型独立测试的思想,在达到恰当的就绪点时就应该开展独立的测试工作,同时将测试工作进行迭代,最终保证完成测试目标。
2 测试阶段中的测试活动
软件测试过程主要包括以下四项基本活动:
1、测试策划
在测试策划中的活动有:制定测试计划,以确定测试范围、测试策略和测试方法,规划测试任务日程表,对测试资源进行安排,并提前评估测试风险,制定风险控制策略。
2、测试设计与实现
在测试设计与实现中的活动有:制定测试的技术方案,选择测试工具,并根据测试技术方案设计测试用例。
3、测试执行
在测试执行中的活动有:建立相关测试环境、配置测试数据、按日程安排执行测试用例并记录测试执行结果,对发现的软件缺陷进行报告,并配合开发人员进行软件缺陷的分析、处理和追踪。
4、测试总结
在测试总结中的活动有:对测试结果进行综合分析,以确定软件产品质量的当前状态,为产品的改进和提供数据和依据,同时编制测试报告,提交相关的测试文档。
3 软件测试过程管理的特点
软件测试过程管理的基本内容包括计划、组织和监控;测试过程中存在的问题有:
1.软件质量标准定义不准确、任务边界模糊。
2.软件测试项目的变化控制和预警分析要求高。
3.软件测试项目具有智力密集,劳动密集的特点,受人力资源的影响最大。
4.测试任务的分配比较困难。
5.测试要求的人力资源十分稳定。
6.软件测试人员在待遇、地位上可能会受到一些不公平的待遇。
软件测试项目的过程管理能否成功,通常受到三方面的影响:项目组内的环境,项目所处的组织环境,整个开发流程所控制的全局环境。
4 软件测试过程管理的原则
1、有关测试需求,应当有一个经各方同意的、完整的、清楚的、详细的、整体的、可实现的和可测试性的需求并文档化,尽可能坚持最初的需求。
2、测试计划先行。软件项目管理过程从项目的计划活动开始,软件测试项目也不例外,也是从测试计划开始。
3、建立任务优先级。在测试任务较多的情况下,应该为各项任务建立测试优先级,这样也可以根据优先级来先后处理各项任务。
4、建立客观的评估标准。这样使得整个项目过程具有良好的可测性和可跟踪性,强调以数据说话。
5、尽早测试。这是从W模型中抽象出来的理念。一方面指测试人员尽早参与测试项目,另一方面指尽早开展测试执行任务。
6、全面测试。这也是W模型的重要思想,其含义一方面只要对软件所有产品进行全面的测试;另一方面指软件开发人员与测试人员全面参与到测试工作中。
7、全过程测试。这是从W模型中抽象出来的另一理念。其含义一方面指测试人员要充分关注开发过程;另一方面指测试人员要对测试的全过程进行全程的跟踪。
8、独立的、迭代的测试。这是H模型的重要思想,强调只要达到测试就绪点,即测试条件成熟,测试准备活动完成,测试执行活动就可以开展。
5 软件测试过程的人员组织
测试团队的组织直接关系到测试团队的工作效率和生产力,其组织方式由测试团队的规模、具体任务和技术来决定。
一个测试团队的基本角色有:测试经理、实验室管理人员、内审员、测试组长、测试设计人员、资深测试工程师、一般测试工程师。
若测试团队规模较大,则测试工程师分为三个层次:初级测试工程师、测试工程师和资深测试工程师,同时设置自动化测试工程师、系统测试工程师和架构工程师。
测试过程人员组织的一个方面是考虑测试团队的规模,测试团队的规模可以考虑在整个开发部门所占的比重,或相对开发人员所占的比例。从经验看,不同的应用,软件测试和软件开发人员的比例也是不同的,大致可分为三类。
1、操作系统类型的产品,对测试要求最高,测试人员和开发人员的比例为2:1。
2、应用平台、支持系统类型的产品,对测试要求比较高,通常测试人员和开发人员的比例为1:1。
3、对于特定应用系统一类产品,由于以后对象清楚、范围小,甚至可对应用平台或应用环境加以限制,所以测试人员可以再减少,但测试人员和开发人员的比例至少保证在1:2的水平以上。
6 结束语
相比之下,目前中国软件企业在软件测试方面与国际水准仍存在较大差距。首先,在认识上重开发、轻测试,没有认识到软件项目的如期完成不仅取决于开发人员,更取决于测试人员;其次,在管理上随意、简单,没有建立有效、规范的软件测试管理体系;另外,缺少自动化工具的支持,大多数企业在软件测试时并没有采用软件测试管理系统。所以对国内软件企业来说,不仅要提高对软件测试过程管理的认识,同时要建立起完善的软件测试过程管理体系,确保软件测试管理在软件质量保证中发挥应有的关键作用。
参考文献
[1]朱少民. 软件测试方法和技术 [M].北京:清华大学出版社, 2005年
[2]郑文强,马均长. 软件测试管理[M].北京:电子工业出版社, 2010年
[3]布莱克(美).软件测试过车管理[M].北京:机械工业出版社,2003年
0引言
如今,软件产品被广泛应用于各个领域,如航空、机械、电子产品等,软件产品质量成为软件开发中重点关注的方向。在一些对于安全性要求较高的领域,对软件产品的质量要求更高。例如,在2011年温州发生的7.23动车追尾事故,导致212人伤亡;1996年阿里亚娜5型火箭发射39秒后爆炸,直接经济损失3.7亿美元;2002年首都机场电脑系统出现故障,导致6000多人滞留机场等。软件中存在的缺陷是造成这些严重后果的根源。因此,软件测试的重要性不言而喻。
传统的软件开发流程越来越无法满足当下软件需求的频繁变动,如传统的瀑布模型,测试人员在一定的控制点之前不能测试,所以在此之前无法找到缺陷。等到所有开发完成,即过了该控制点后再进行测试,缺陷数量会急剧增加,同时任何缺陷的修复都需要对一连串代码进行变动,修复时间难以确定,软件迟迟不能,损失将难以估量。
敏捷软件开发是基于一种更接近人类活动现实情况的方法论,采用以人为本、迭代、增量的开发过程,逐步满足软件不断变更的需求[1]。敏捷主要提倡个人为团队所作的贡献,注重各个职位的权利下发,发挥个人的主观能动性,保证随时都有可供交付的软件产品。敏捷开发更容易在项目早期控制缺陷数目。软件测试是保证软件质量与可靠性的重要手段,敏捷开发能充分发挥软件测试的重要作用。
1敏捷开发思想
敏捷开发是以用户的需求进化为核心,采用逐步迭代、循序渐进的方式进行软件开发。在敏捷开发模式中,软件项目在开发前,先将整体项目切分成多个子项目,迭代过程中根据需要可以对子项目进行拆分或同时进行多个子项目,每一个子项目都要经过测试,保证项目能运行成功。换言之,就是把一个大的软件项目分成许多小项目,每个项目独立完成,但相互之间又有联系,在该过程中软件始终处于可用状态。
敏捷开发本身更多的是一种概念,它是一种循序渐进的迭代开发方式,强调团队成员间的沟通。2001年,敏捷开发创始人了敏捷宣言:个体和交互胜过流程和工具,可用的软件胜过完备的文档,客户协作胜过合同谈判,响应变化胜过遵循计划[2]。也即,虽然后半部分的条目也具有价值,但是更看重前半部分的条目。他们希望这将成为成功的软件开发的基础。敏捷开发的方法很多,主要包括快速应用开发(RAD)[3]、极限编程(XP)[4]、动态系统开发方法(DSDM)[5]与Scrum[6]。本文构建的测试模型借鉴敏捷开发过程中的迭代思想,以渐进的方式完成测试工作,不仅可使测试工作具有更好的灵活性,同时也能更好地适用于现有的敏捷开发过程。
软件是一种非常特殊的产品,开发出的软件通常会存在一些缺陷,而有些缺陷会造成非常严重的损失。软件测试则成为保障软件质量的一种重要手段[7]。根据不同标准有多种测试方式,如集成测试、单元测试、系统测试、验收测试和回归测试。传统的V测试模型和W测试模型成为指导人们进行测试的方法,而不同于这两种测试模型的H模型,则强调测试的独立性。另外目前很多开发团队已经开始使用敏捷开发方式,敏捷开发方式非常注重客户的交互以及团队中的沟通,同时开发过程中会有许多迭代过程。本文提出的测试模型借鉴敏捷开发中的迭代思想,测试流程是一个渐进的过程。然而,即使有成功的敏捷开发方法,开发人员和测试人员依然要寻求最适合的敏捷方法,并将相关技术融入到自己的敏捷方法中。
2敏捷开发中的软件测试
2.1敏捷测试
敏捷测试没有已经确定的唯一定义,原有的测试定义“通过在规定条件下对程序进行操作,发现错误,衡量软件质量”仍然适用,核心思想可以理解为“遵循敏捷开发的宣言,接纳敏捷核心价值观,基于敏捷开发的软件测试”。敏捷开发宣言中提到敏捷开发的4个核心价值观:简明(Simplicity)、沟通(Communication)、反馈(Feedback)、勇气/决断(Courage)。符合敏捷核心价值观的测试实践活动都可以称为敏捷测试,敏捷不仅是一种过程,更多的是一种理念[8]。
2.2敏捷测试方法
图1为敏捷开发测试流程,此流程是一个结合了Scrum和XP方法,并加上一些基于计划性流程原则后的产物。虚线箭头两端是开发过程中与软件测试相关的部分,敏捷开发的测试人员全程参与完整的迭代开发。
(1)需求分析:测试工程师可以根据测试经验以及需求的测试难度对需求列表提出问题或意见,以期团队能共同提供建议或方案,在之后的实际测试过程中有助于提高测试效率。
(2)迭代计划:包括对需求的详细分析以及任务表等,软件工程师和测试工程师对需求进行讨论。
(3)迭代启动会议:项目经理、产品经理、软件工程师、测试工程师对此代计划进行讨论、完善。
(4)测试计划:测试工程师根据需求以及测试经验完成详细的测试计划书,团队对测试计划进行研讨并确认验收测试。
(5)测试驱动开发:测试工程师相当于软件的第一批用户,测试过程中要重视反馈,这也是敏捷开发的原则之一。
(6)验收测试:测试工程师对此次迭代的所有功能进行演示,测试产品功能是否合格。如果产品合格,则此次验收通过,可以进入下一环;如果产品不合格,则此次验收失败,重新返回开发阶段,找出失败的原因及bug并解决,并确认下一次验收测试。
(7)提交与验证:由测试工程师为产品负责人与参与项目的人进行演示,包括此次迭代的主要功能、产生的未解决bug,然后由产品负责人核准迭代成功。
(8)迭代后的研讨:对此次迭代过程中产生的问题进行讨论,对于亮点可以进行表扬,错误要分析原因。
从流程图和测试人员参与项目的简单描述中,可以总结出敏捷测试的方法主要有两种:与传统软件测试相似的测试和测试驱动开发(TDD,Test-DrivenDevelopment)。
图2展示的是测试驱动开发流程,开发人员在编写产品代码之前,要先编写单元测试代码,在进行单元测试后才能进行产品代码的编写,以保证产品代码能完全符合要求。产品代码编写完成后进行单元测试和集成测试,测试代码和产品代码都要进行代码审查,保证代码的简洁、统一,方便以后维护。在敏捷测试中,测试驱动开发的重要目的不仅仅是测试软件,同时在开发过程中帮助客户和程序员确定需求。测试驱动开发应该运用于每一个迭代中,逐步开发完成所有软件功能。
传统软件测试的种类非常多,在敏捷测试中应当根据当前迭代的需求进行测试[9]。某车削软件有这样一个需求,能支持直径40mm的刀具路径生成。该需求一定配备了相应的刀具路径生成方法,然后只需确定刀路生成中的一些参数,然后设计数量足够的不同表面形态的圆面即可。由于TestPart数量过多,可能会用到自动化测试,也有可能会用到一些特殊的TestPart,如圆面面型变化大,甚至不是圆面等。迭代最后一定有整体的性能测试,在整个项目进行过程中,传统的软件测试方法同样适用于敏捷开发。
2.3敏捷测试特点
在瀑布开发模式中,要求流程规范、文档齐全,测试进行时再根据软件需求总结、测试所有功能点,直到软件中没有明显bug。在传统的软件测试开始时,软件的缺陷会达到顶点,同时如果有需求变化,则需要重新编写文档,可能必须将之前的工作推翻重来,费时费力。而在敏捷测试中,一切都发生了改变。
敏捷开发模式中测试不是一个单独阶段,它和编码一样是软件开发的重要组成部分。敏捷开发使用一个“完整团队”的方法来保证软件产品质量。敏捷团队中的测试人员从客户需求中提炼要求,然后与开发团队合作,把这些要求变成可执行的规范,用于指导代码编写。随着测试和编码的逐渐进行与交互,将建立一些产品特性,直到提供足够的产品价值。
敏捷测试包括以下几个主要特点:①周期性的迭代开发方式。不同于传统测试的一次性集成或功能测试,敏捷测试在迭代进行过程中要通过及时响应客户反馈来修正软件测试策略,以此修正软件的质量指标;②每日立会,密切沟通。传统测试提供了大量文档描述产品需求,并通过文档进行测试。敏捷测试则需要团队每天进行交流,测试人员与客户持续沟通,以保证产品质量符合客户预期,并与开发人员沟通来确定需求认识的统一;③测试方法多样,贯穿整个项目开发过程。敏捷测试包括测试人员对软件的自动化测试、集成测试、功能测试等,还包括开发人员对代码的单元测试、代码评审等工作,从最底层和基础的测试来保证软件整体质量;④确保客户需求圆满实现。客户需求是敏捷开发中最核心的内容,敏捷测试同样需围绕客户需求实现。
2.4敏捷测试优势
目前大多数软件项目的共同特点是用户需求变化快、风险高,同时还能快速抢占市场,这刚好是敏捷开发能够解决的。
(1)良好的持续沟通可减少缺陷产生,降低风险。在敏捷开发模式下,测试人员的沟通尤为重要。一个迭代从开始到结束,测试人员都需要参与。迭代开始时,所有人都要对该阶段软件的成型有统一认识,满足用户需求的同时还要符合一次迭代的时间要求;迭代进行中,测试对开发人员的反馈非常重要,软件开发初期,测试工具十分缺乏,对测试工作的进行造成很大阻碍,这时需要和开发人员持续沟通,必要时可共同开发一些辅助测试工具,在此期间要把握好迭代进行的时间;迭代后期,也可以作为bug反馈期,测试人员不但要站在用户角度考虑需求,同时能和开发人员站在技术角度讨论问题,达到沟通的目的。
(2)合理的测试用例。敏捷最直接的特点就是快速,如果涉及的用例粒度太细,很难开展敏捷测试。一个合理的测试用例不仅能包含所有可能产生缺陷的地方,同时还能快速地响应需求变化。
(3)更多人参与测试。敏捷测试中的测试人员不再是一个独立的测试个体,研发人员、产品负责人、用户都可以参与测试。研发人员的测试可以减少编程中的bug,产品负责人的测试可以更好、更全面地把握产品现状,用户的测试则可以提供来自真正用户的反馈,以更好地促进软件开发。
3敏捷开发中的软件测试实例
本章结合一个具体的软件项目,详细介绍项目中的敏捷测试。
3.1项目介绍
针对3轴超精密加工车床,提供针对光学自由曲面进行加工的刀路轨迹计算的CAM(ComputerAidedManufacturing,计算机辅助制造)软件。该软件的目标是比UGNX中的相同功能有更快的计算速度和更高的精度。
3.2需求分析和项目规划阶段
项目经理和产品经理根据客户给定的需求进行分类,包括框架、加工方式、加工质量、刀具选择、仿真等需求,并对项目可能产生的需求进行判断和规划,形成项目计划书。项目计划书包括项目背景、、需求以及预期完成时间。项目计划书完成之后即可开始进行第一个迭代,并以第一个迭代为基础不断进行下去,直到完成所有需求。由于整体项目过于庞大,这里只对第一个迭代进行介绍。
项目实例:第一个迭代中有2个需求,同时根据工作量分配任务天数以及每个需求的参与人员,如表1所示。
3.3迭代进行阶段
迭代开始时,项目经理制定迭代的具体开发任务和测试任务。在迭代启动会议中,每个人都要对此次迭代任务有统一认识,并且能够承载相应的任务量,在需求确定完毕后进行任务分配。
.
开发人员进行编码时,测试人员的工作重点包括:编写测试计划、测试用例、验收测试以及提交和验证。测试计划和测试用例的编写同时完成,且在迭代初期完成。验收测试一般是在迭代后期进行集成测试,迭代过程中也可以协助开发人员进行单独的功能测试。
3.3.1编写测试计划和测试用例
测试计划需要具体的操作步骤以及相对完善的测试用例来涵盖需求,因此需要测试人员有比较丰富的测试经验。
项目实例如下:
表2和表3中的TestParts需要填写测试工件名称。测试计划编写完成后要经过开发人员和项目经理确认,保证开发人员认同并能够达到计划的目标。敏捷开发是不断迭代的过程,对于一些比较简单的功能,尽量设计简洁的测试用例。如果TestParts比较多,可以采用自动化测试,而对于一些比较复杂的功能,可以先采用手动测试,在功能更加完善后再考虑自动化测试。
3.3.2验收测试
验收测试要严格按照迭代前期写好的测试计划进行,在开发人员开发完此次迭代所有功能后,测试人员对所有功能进行集成测试、功能测试、自动化测试等,完成所有测试工作后形成测试报告。报告内容包括此次迭代基本功能完成情况、缺陷产生情况以及测试过程中的一些详细数据。
3.3.3提交和验证
团队全体成员参加验收会议,由测试工程师对迭代成果进行演示,产品经理和项目经理进行验收,项目需求全部完成则此次迭代成功,然后再对此次迭代中的不足之处进行讨论和改进,或者提出创新之处。如果项目需求未达标,或产生了过多缺陷,则此次迭代不予通过,全员讨论延后验收或将缺陷完善延后到下一个迭代。
项目实例:针对需求R1、R2的基本功能测试达到了计划的标准,框架的视图操作和显示功能以及CAD模型输入功能均正常运行且无缺陷。虽然框架本身存在一些缺陷,仍能满足迭代的基本需求。经过讨论此次迭代成功,产生的bug在下一个迭代进行完善。
3.4迭代后研讨和下一次迭代讨论
迭代完成后要对迭代过程进行回顾,测试人员需要对bug进行总结,包括测试过程中产生的问题,以及需要改进的地方,然后对下一次迭代的需求进行初步讨论,决定下一个周期的工作内容。
4结语
敏捷开发中的软件测试应当遵循敏捷开发的基本原则,面对不同的开发方法和应用环境,软件测试方法也不同。敏捷测试作为从敏捷开发中成长起来的测试方法,与敏捷过程密不可分,本文对敏捷开发中的软件测试特点和方法进行了详细描述。然而,真正在面对软件测试时,测试用例的生成与覆盖标准、测试的充分性和有效性、不同阶段的测试关系等,以及如何将传统测试中的一些方法应用到敏捷测试中,需要探讨的问题及方法仍然很多。