毕业综合训练(实习形式用)课题名称单元测试报告系别计算机技术与工程系专业计算机网络技术班级09计网(1)班姓名方文伟学号109104010007指导老师张常泉江西蓝天学院1一、实习时间:2011年11月28日至2011年12月9日二、实习地点:南昌中兴软件园三、实习目的:1、通过专业实习,了解工厂的生产状况及生产组织和情况,了解工厂生产系统的规划组织和生产作业计划控制情况,获得实际生产知识。2、加强理论和实际的联系,巩固所学知识,提高分析和解决实际生产问题的能力。3、通过毕业实习,理解毕业设计专题的主要内容,为毕业设计的顺利进行做好准备。4、通过毕业实习,深入生产现场,学习工人阶级的优秀品质和先进思想,培养实事求是的工作作风,踏踏实实的工作态度,树立良好的职业道德和组织纪律观念。四、公司简介中兴通讯是全球领先的综合通信解决方案提供商。公司通过为全球140多个国家和地区的电信运营商提供创新技术与产品解决方案,让全世界用户享有语音、数据、多媒体、无线宽带等全方位沟通。公司成立于1985年,在香港和深圳两地上市,是中国最大的通信设备上市公司。中兴通讯拥有通信业界最完整的、端到端的产品线和融合解决方案,通过全系列的无线、有线、业务、终端产品和专业通信服务,灵活满足全球不同运营商的差异化需求以及快速创新的追求。2009年,中兴通讯无线通信产品出货量跻身全球第四,其中CDMA产品出货量连续4年居全球第一,固网宽带接入产品出货量稳居全球第二,光网络出货量达到全球第三,手机产品累计出货超过2亿部,并全面服务于欧美日高端市场的顶级运营商。自2005年以来,中兴通讯营业收入实现了超过29%的年复合增长率,2010年超过700亿人民币,成为全球第五大电信设备商、第六大通信终端厂商。中兴通讯坚持以持续技术创新为客户不断创造价值,并引领全球通信行业技术革新。公司在美国、法国、瑞典、印度、中国等地共设有15个全球研发机构,2.5万名国内外研发人员专注于行业技术创新并取得3万多项专利申请。公司依托分布于全球的107个分支机构,凭借不断增强的创新能力、突出的灵活定制能力、日趋完善的交付能力赢得全球客户的信任与合作,服务于全球百强运营商中的59家。中兴通讯为联合国全球契约组织成员,坚持在全球范围内贯彻可持续发展理念,实现社会、环境及利益相关者的和谐共生。我们运用通信技术帮助不同地区的人们享有平等的通信自由;我们将“创新、融合、绿色”理念贯穿到整个产品生命周期,以及研发、生产、物流、客户服务等全流程,为实现全球性降低能耗和二氧化碳排放不懈努力。我们还在全球范围内开展社区公益和救助行动,参加了印尼海啸、海地及汶川地震等重大自然灾害救助,并成立了中国规模最大的“关爱儿童专项基金”。未来,中兴通讯将继续致力于引领全球通信产业的发展,应对全球通信领域更趋日新月异的挑战。五、实习内容(一)软件测试2软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。1、测试目标(1)发现可以通过测试避免的开发风险的规模和来源(2)实施测试来降低所发现的风险(3)确定测试何时可以结束(4)在开发项目的过程中将测试看作是一个标准项目。2、详细分类(1)角度细分从是否关心软件内部结构和具体实现的角度划分A.白盒测试B.黑盒测试C.灰盒测试从是否执行程序的角度A.静态测试B.动态测试。(2)阶段细分从软件开发的过程按阶段划分有A.单元测试B.集成测试C.确认测试D.系统测试3、软件测试生命周期测试过程按4个步骤进行,即单元测试、集成测试、确认测试和系统测试及发版测试。开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。集成测试把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。重点:单元测试。(二)单元测试(UnitTesting)1、单元测试的内容时间用户需求系统需求体系结构详细设计编码单元测试集成测试系统测试验收测试方案系统测试方案集成测试方案单元测试方案系统人员开发人员用户代表和系统测试人员系统测试人员开发人员PLM和用户代表验收测试开发人员3在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。(1)模块接口测试在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目包括:–调用本模块的输入参数是否正确;–本模块调用子模块时输入给子模块的参数是否正确;–全局量的定义在各模块中是否一致在做内外存交换时要考虑:–文件属性是否正确;–OPEN与CLOSE语句是否正确;–缓冲区容量与记录长度是否匹配;–在进行读写操作之前是否打开了文件;–在结束文件处理时是否关闭了文件;–正文书写/输入错误,–I/O错误是否检查并做了处理。(2)局部数据结构测试–不正确或不一致的数据类型说明–使用尚未赋值或尚未初始化的变量–错误的初始值或错误的缺省值–变量名拼写错或书写错–不一致的数据类型–全局数据对模块的影响(3)路径测试–选择适当的测试用例,对模块中重要的执行路径进行测试。–应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。–对基本执行路径和循环进行测试可以发现大量的路径错误。(4)错误处理测试–出错的描述是否难以理解–出错的描述是否能够对错误定位–显示的错误与实际的错误是否相符–对错误条件的处理正确与否–在对错误进行处理之前,错误条件是否已经引起系统的干预等(5)边界测试–注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。–如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。2、单元测试的步骤(1)模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。–驱动模块(driver)–桩模块(stub)──存根模块(2)如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要做的工作,对关键模块还要做性能测试。4(3)对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。3、单元测试的位置4、单元测试方法三种常用的单元测试方法:Topdown自顶向下Bottomup自底向上Isolation隔离法隔离法是真正的单元测试,效果最好,是进行单元测试的最佳选择。其他两种更像是集成测试,受变更的影响较大。(三)执行单元测试1、常用的单元测试工具(1)静态测试工具静态分析工具(2)动态测试工具–JUnitFramework–IBMRationalPurecoverage–IBMRationalPurify–IBMRationalQuantifyUnitTest单元代码编程/调试单元级测试单元代码编程/调试单元级测试单元代码编程/调试单元级测试集成和测试系统测试和验证用户安装要求分析/设计52、RationalPurify(1)RationalPurify可以检测–.NET和Java应用程序中方法和对象级别上的内存管理问题–VisualC/C++应用程序的运行时错误和内存泄漏问题(2)运行Purify与Purecovery一样,有三种运行Purify的方法–通过Purify自带的用户界面–在IDE如MicrosoftVisualStudio6,VisualStudio.NETandIBMWebSphereStudio中运行–通过命令行(四)使用单元测试工具1、检测C/C++程序内存泄漏方法(1)为了检测C/C++程序运行时错误,只需要通过Purify运行被测程序就会获得所需的信息(2)下面以Purify自带的示例“Hello.c”为例,演示如何利用Purify检测C程序中的内存泄漏等运行时问题第1步:指定被测程序:“purifyinstalldir\PurifyPlus\PurifySamples\hello.c”,点击Run(如图:1-1所示)图1-16第2步:等待Purify完成对被测程序的插桩动作,点击被测程序“确定”按钮(如图1-2所示)图1-2第3步:被测程序运行结束后,Purify会在数据浏览窗口显示相应的信息如图1-3所示图1-37第4步:检查可疑代码,修复缺陷如下图1-4所示图1-4修复缺陷如图1-5图1-5第5步:重复步骤1~4,运行修改后代码”better.c”。Wow~~~!这次没有出现运行时问题8如图1-6所示图1-62、检测Java程序内存泄漏(1)执行如下步骤分析内存使用情况–通过Purify运行Java或.NET程序–在被测程序初始化完成后,提取第一次内存快照–运行怀疑可能存在内存泄漏的代码,完成后再提取第二次内存快照–比较两次快照以识别可能引起内存泄漏的方法–检查代码中不再使用对象的可疑方法或者包含引用不再使用对象的对象。(2)下面以Purify自带的样例“LeakSample.java”为例演示如何检测Java内存泄第一步运行Purify如图2-1所示图2-19第2步指定被测程序“purifyinstalldir\PurifyPlus\PurifySamples\Java\LeakSample\LeakSample.class”,点击run,将显示一个小窗口如图2-2所示图2-2第3步:待被测程序初始化完成后,点击工具条上的“GarbageCollect”按钮,提取第一次内存快照如图2-3所示图2-310第4步:选择“LeakContinuously”,点击“Start”按钮。你会发现内存使用随程序的运行不断地增加,红点是JAVA程序自动产生的垃圾回收点如图2-4所示图2-4第5步:点击被测程序的“stop”按钮如图2-5所示图2-511第6步:再次点击工具条上的“GarbageCollect”按钮,提取第二次快照,对两次内存快照进行比较后发现,在两次快照间存在相当的内存差异,这表明你的程序中存在内存泄漏问题如图2-6所示图2-6第7步:点击待被测程序的“Exit”按钮,Purify的数据浏览窗口打开同时”LeakSample$Processor”方法高亮显示如图2-7所示图2-712第8步:右键点击”LeakSample$Processor”,选择源文件如图2-8所示图2-8第9步:检查”LeakSample.java”源文件中可疑的方法修正缺陷如图2-9所示图2-913修正缺陷如图2-10所示图2-10第10步:采用与1~9相同的步骤运行修改后的”LeakSample.java”。这次运行结果显示两次快照之间不存在内存差异了如图2-11所示图2-1114(四)其他单元测试1、静态分析工具–PC-LintforC/C++–Logiscope2、XXUnit系列工具–CUnittestingFramework–NUnitforC#–DUnitforDelphi–XMLUnit–JsUnitforclient-sideJavaScript–SimpleTestforPHP….六、实习体会与总结实习是一项综合性的、社会性的活动,是一个由学校向社会接轨的环节,是学校学习向社会工作转型的一大模块。搞好社会实习工作是很关键的,对一个学生来说是很重要的,从一个学生的成长的过程来说,他经历了无事可做的孩童时代,到学校里忙碌的学生时代,再到以后的社会工作阶段,而实习就像一个链子连着学习和工作。实习是学生把所学知识运用到实践中去的过程,学