作为测试人员,从哪几个方面保证产品质量呢

流程质量+测试质量

开发与测试的流程要严格遵守

测试的质量说的 是测试案例的质量,测试人员的工作效率,需求覆盖度,缺陷密度等等  综合分析给出测试质量。

考虑从以下方面提升软件质量:
1,项目流程的规范程度,包括需求管理、开发流程、测试流程
2,测试资源的充分程度,包括人(质与量)、时间、环境、工具等
3,测试技术的高度,如测试计划的合理性,用例设计的全面性、粒度、效率,以及测试执行的充分性


不谈理论,只谈实践的话。如要保证好测试的质量(或是说成得到客户较高的认知度)。至少要考虑以下几个方面。
1,让用户承认你的测试对象分析结果(需求分析转化为测试需求分析的过程要得到客户的认可)
2,用例设计过程,不但要能设计出高效的用例,而且要能说明是如何的高效,要得到客户的认可。
3,如何证明,你的测试过程是高精度,高效率的,你的团队是敬业的,并有在实施的过程中能不断的发现问题,克服/解决问题。
4,你的结果报告中的内容,是否能准确反映软件的质量状况,并且,有客户想看到的内容。

从另外角度来说,要想得到好的评价,不但要有好的用例设计技术,和很强的总结,报告能力,与客户的沟通,与开发的协调,以及对组员的管理,都是非常重要的。哪个环节出现问题,都会波及其他方面。所以,才说做好测试真的不容易,因为他不但对技术有要求,对人的本身,也有很高的要求。


  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书是以使读者熟悉微软产品、微软工程师、微软测试人员测试的作用和对软件工程的通常做法作为开始。书的第二部分讨论许多在微软常用的测试实践和工具。 书的第三部分探讨某些我们工 作中使用过的工具和系统。书的最后一部分探讨在微软测试和质量的未来方向,以及我们打算怎么创造未来。 本书结构清晰,内容详实,可作为广大软件测试人员的参考用书。 本书内容:   本书是以使读者熟悉微软产品、微软工程师、微软测试人员测试的作用和对软件工程的通常做法作为开始。书的第二部分讨论许多在微软常用的测试实践和工具。 书的第三部分探讨某些我们工 作中使用过的工具和系统。书的最后一部分探讨在微软测试和质量的未来方向,以及我们打算怎么创造未来。 本书结构清晰,内容详实,可作为广大软件测试人员的参考用书。 事实上,软件的“缺陷”是不可避免的,只能通过编程人员和测试人员的共同合作,把“缺陷”降低到最小的程度。现代的软件工程管理方法,就是边开发边测试,及时把“缺陷”降低到最小程度。本书是 实用性很强、实践经验很丰富的一本好书,对我们软件企业和软件工程师来说都具有十分重要的指导意义。 ——中国软件行业协会秘书长胡崑山 软件工程人员为了做好测试工作,认真学习测试的理论和方法是十分必要的,但还应该积累软件测试的经验,通过阅读本书可以吸取知名优秀软件企业的最佳实践。 ——中国软件行业协会系统与软件过程改进分会(CSPIN)常务副会长、 清华大学教授郑人杰 本书是我一直在寻找的关于软件测试最佳实践的书籍,我很愿意向我的学员们推荐此书,作为软件测试实践的有效补充。 ——国际软件测试认证委员会ISTQB中国分会专家组组长、ISTQB 软件测试培训师周震漪 本书为业界吹来一阵清新的实践之风。全书通过翔实的案例描述了这个世界著名的软件企业为了保证快速和可靠交付,是如何毫不留情地与那些狡猾的缺陷进行顽强斗争的系列故事;此外,仔细介绍如 何通过质量保证生产出世界一流软件的基本原则是本书的另外一个亮点;与此同时,随处可见令人惊讶的创新,则是本书强大的作者团队,在分享他们的微软最佳实践方面的宝贵经验 ——国际外包管理协会(IIOM)主席Jerry E Durant 软件测试是软件工程中一个不可或缺的重要步骤,是一项需要高度智慧和极具挑战性的工作,又是一项需要实战经验积累的工作。“他山之石,可以攻玉”,此书的出版将为我们借鉴微软的先进测试经 验;培训中国软件测试人才;推动中国测试服务业的发展做出重要贡献。 ——中国软件测试机构联盟常务副理事长 上海计算机软件技术开发中心首席知识官杨根兴 软件测试技术和它在软件开发中的重要作用得到了业内越来越多的重视和研究。微软公司无疑的是软件测试技术的领引者。本书将给在这个行业工作的和准备加入这个行业的人以启迪,揭秘软件测试的 真谛。 ——软通动力信息技术有限公司董事长兼首席执行官刘天文 作为一位拥有数百测试工程师团队的外包企业的管理人员,我看到了大量测试微软产品的过程中所遇到的问题和工程师们设计出的各种解决方法。本书则把微软软件测试的方方面面的理念、方法、技术 、工具、流程等介绍给我们,不仅可以使测试工程师系统地学习测试技术,还可以让我们的管理团队开拓思路,少走弯路。我强烈推荐在各个企业的同仁们花时间读本书,从而起到事半功倍的作用。 ——文思创新软件技术有限公司执行副总裁及首席全球化官吴建 现代软件测试从方法、技术和工具层面已远远突破了“寻找缺损”和“验证功能”范畴。软件测试已成为软件开发和软件工程管理不可缺少的一部分。微软在这一领域的实践是划时代的,它将软件的规 模、工程的复杂性带到了前所未有的高度,其解决的问题的难度,以及为此而付出的代价都是无与伦比的。因此,多年以来,微软软件测试的理念、方法、技术、工具、流程,及其与其他角色的协作等 诸多方面,都一直是业界研究、探讨和借鉴的中心。本书第一次由微软的权威人士从内部系统地揭示这一奥秘。本书应该成为中国同行们的必备经典。 ——美国一通公司(iConnect Inc.)总裁王志峰 本书作者中有我的前同事Bj Rollison,他是微软公司中最有资历的测试专家之一。译者中也有我多年的好朋友张奭,她一直致力于把微软先进的公司文化、产品理念带给中国国内的企业和个人。感谢 他们的执着和付出,本书把神秘软件王国——微软如何进行软件测试揭露给了大家。本书必将成为国内软件测试人员的参考宝典,也将会彻底改变国内对软件测试的偏见,让大家充分理解,软件测试绝 对不是一件简单、低级的事情,而是一件极具复杂性,需要极高综合素质的人员才能做好的事情,这也将有助于更多的毕业生去选择从事软件测试,从而改善软件测试行业中人才缺乏的问题,特别是高 端人才。 ——海辉软件(国际)集团公司副总裁汪建兵 这是我所见过的测试方面的经典!它精薄而全面,言简意赅,结合实际,深入浅出,使读者快速理解软件测试流程和核心技术。 ——上海越通软件有限公司董事长周晓冬 我在天津市软件测试中心工作了7年,一直都在寻找不同软件的测试方法、测试工具的使用、测试流程及管理。所以,一直都非常关注软件测试方面的书,以便用它来指导我们测试业务的开展,同时对 于软件开发企业控制软件质量,也有指导意义。本书汇集了微软极其丰富的软件测试的实践经验,从理论和实践的结合上,让软件测试界有了一个信赖和学习的榜样。这将有力的推动中国软件测试技术 的发展,从而保证软件产品的开发质量,缩短软件开发的时间。谢谢你们把软件测试的经验和我们分享,谢谢你们对软件测试领域的贡献。 ——中国天津市软件评测中心主任周文禾 微软拥有着伟大的产品,这离不开强大的测试团队和卓越的测试技术,本书将带你发现微软是如何展开测试的,以及在测试方面的最佳实践,这是软件测试领域的骄傲,我推荐更多的测试经理、测试骨 干人员阅读本书。 ——麦思博(msup)有限公司首席运营官刘付强 对于大多数国内软件公司来说,不缺少高水平的技术人员,而在如何做好软件测试,如何保证产品质量方面却面临着巨大挑战,能否突破这个挑战是软件产业持续发展的条件之一。值得高兴的是,最近 几年软件测试得到越来越多的重视和关注。但是,国内关于软件测试实用技术方面的书籍相对较少,本书深入浅出地介绍了微软软件测试的实践,包括相关测试技术与管理方法,这正是我们广大软件质 量人员所需要的,相信每位读者都能从本书中汲取到值得借鉴的经验。 ——浪潮集团山东通用软件有限公司研发管理部经理刘俊红微软内部专家的评论 在全球化的深刻变革中,信息技术所发挥的力量是毋庸置疑的。微软用软件的力量推动了全球化的进程,而软件测试理念和实践的革新带来了更加“智慧”和接近“完美”的软件产品。这本书完整地呈 现了走向“智慧与完美”的方法与实践。 ——微软公司全球资深副总裁张亚勤 以用户为中心的测试是专业软件开发流程中不可或缺且至关重要的一环。作为一名拥有十年软件测试经验的微软员工,我非常高兴能向国内软件开发人员和爱好者们推荐本书。它解析了微软公司的软件 测试体系,并在某种程度上揭示了微软的一个成功“奥秘”,即高度重视软件测试工作,并借此为全世界的用户和专业人员提供高性价比、高可用性的应用软件和开发平台。我诚挚地祝愿并期待这本以 微软“实战经验”为亮点的著作能够成为中国软件行业管理者和从业人士必读的经典书籍。 ——微软大中华区开发工具及平台事业部总经理谢恩伟 与大多数讲述软件测试理论的书不同,本书最大的特色之一是其实用性。所有的方法,流程,技术和工具都是基于实际开发需要而建立或实施,应用于微软产品的开发并经过多次的检验。作者在阐述中 ,也用了很大的篇幅讲述,强调如何在实际中运用这些知识。这在很大程度上取决于他们的背景和经历。本书作者都是在有过多年软件产品测试经验之后,专门在微软从事软件测试技术推广和测试人员 培训的资深专家。很多微软的工程师都是通过他们的培训来学习并理解软件测试的。而本书的出版,则给更多的人提供了这样一个机会。 ——微软全球产品开发部测试总监杨永生 本书详尽地阐述了微软各个产品部门间通用的软件测试的组织架构、方法、工具和实践。这本书总结了微软数十年来在软件测试上的经验,可以提供国内在软件开发与测试管理以及人才培养方向上宝贵 的参考非常值得一读。 ——微软中国Protocol部门首席测试经理黃镇铭 本书是我在微软公司过去13年从事软件工作以来读到的对微软公司的软件测试的过程、方法、理念和文化诠释得最为全面的一本书。阅读它带给我一种怀旧的感觉,更启发了新的感受和灵感。我相信微 软公司的这些经验也能为在学校和行业界的读者带来收获。 ——微软总部SQLServer首席测试经理张力
软件测试规范 目 录 一.概述 ............................................................................................................................................................ 1 二 软件测试理论 ........................................................................................................................................... 2 1.什么是软件测试 .................................................................................................................................. 2 2.软件测试的目标 .................................................................................................................................. 2 三.软件测试流程 ............................................................................................................................................ 3 1.软件测试流程图 .................................................................................................................................. 3 2.软件测试流程细则 .............................................................................................................................. 4 3.软件测试注意事项 .............................................................................................................................. 5 四.软件测试类型 ............................................................................................................................................ 6 1.模块测试 .............................................................................................................................................. 6 2.子系统测试 .......................................................................................................................................... 6 3.系统测试 .............................................................................................................................................. 6 4.验收测试 .............................................................................................................................................. 6 五.黑盒测试方法 ............................................................................................................................................ 7 1.等价类划分 .......................................................................................................................................... 7 2.因果图 .................................................................................................................................................. 8 3.边值分析法 .......................................................................................................................................... 8 4.猜错法 .................................................................................................................................................. 8 5.随机数法 .............................................................................................................................................. 9 六.白盒测试方法 .......................................................................................................................................... 10 1.语句覆盖 ............................................................................................................................................ 10 2.判定理盖 ............................................................................................................................................ 10 3.条件覆盖 ............................................................................................................................................ 11 4.判定/条件覆盖 ................................................................................................................................ 11 5.条件组合覆盖 .................................................................................................................................... 11 七.测试错误类型 .......................................................................................................................................... 12 八.测试标准 .................................................................................................................................................. 13 附录一 单元测试报告 ................................................................................................................................. 14 附录二 集成测试报告 ................................................................................................................................. 15 附录三 测试大纲 ......................................................................................................................................... 16 附录四 测试大纲附录 ................................................................................................................................. 17 附录五 测试计划 ......................................................................................................................................... 18 附录六 程序错误报告 ................................................................................................................................. 19 附录七 测试分析报告 ................................................................................................................................. 20 软件测试规范 概述 一.概述 本规范是对项目软件测试的一份指导性文件,对软件测试过程中所涉及到的测试理论、测试类型、测试方法、测试标准、测试流程以及软件产品开发单位所承担的职责进行总体规范,以有效保证软件产品的质量。 - 1 - 软件测试规范 软件测试理论 二 软件测试理论 1.什么是软件测试 无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。在开发大型软件系统的漫长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观现实,与工程密切相关的各类人员之间的通信和配合也不可能完美无缺,因此,在软件生命周期的每个阶段都不可避免地会产生差错。我们力求在每个阶段结束之前通过严格的技术审查,尽可能早地发现并纠正差错;但是,经验表明审查并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误。如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分差错,则这些差错迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,而且往往会造成很恶劣的后果。测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。软件测试在软件生命周期中横跨两个阶段。通常在编写出每个模块之后就对它做必要的测试(称为单元测试),模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。在这个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。 大量统计资料表明,软件测试工作量往往占软件开发总工作量的40%以上,在极端情况,测试那种关系人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的三倍到五倍。因此,必须高度重视软件测试工作,绝不要以为写出程序之后软件开发工作就接近完成了,实际上,大约还有同样多的开发工作量需要完成。仅就测试而言,它的目标是发现软件中的错误,但是,发现错误并不是我们的最终日的。软件工程的根本目标是开发出高质量的完全符合用户需要的软件。 2.软件测试的目标 下面这些规则也可以看作是测试的目标或定义: (1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的错误的测试。 从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。这和某些人通常想象的“测试是为了表明程序是正确的”,“成功的测试是没有发现错误的测试”等等是完全相反的。正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。 由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。此外,应该认识到测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。 - 2 - 软件测试规范 软件测试流程 三.软件测试流程 1.软件测试流程图 参与需求分析,了解项目需求内容 了解需求变更 制定《测试计划 》 编写《测试大纲》 编写《单元测试报告》 N 项目组进行修改 配合开发人员进行单元测试 Y 编写《集成测试报告》 N 项目组进行修改 配合开发人员进行集成测试 Y 收集待测软件的各种相关文档及《需求分析》、《软件设计规范》和上一级《测试报告》 N 复合 对待测软件进行测试 项目组进行修改 Y 填写《错误报告》 编写《测试分析报告》 提交《测试分析报告》 所有文件存档 编写《用户操作手册》(帮助文件) 与用户方协商测试相关事宜 - 3 - 软件测试规范 软件测试流程 向用户方提供内部测试汇总报告 配合用户方进行软件测试 用户方签字确认错误报告 项目经理与用户方测试进行确认 2.软件测试流程细则 需求阶段: 测试人员了解项目需求收集结果包括项目需求规格说明、功能结构及模块划分等。 测试人员了解项目需求变更。 测试人员会同项目主管根据软件需求制定并确认《测试计划》(附录五)。 设计编码阶段: 测试人员制定《测试大纲》(附录三、附录四)。 项目开发组对完成的功能模块进行单元测试测试人员参与单元测试过程;单元测试完成,产生单元测试报告。 所有单元测试及相应的修改完成后,项目开发组组织进行集成测试测试人员参与集成测试过程;集成测试完成后,产生集成测试报告。 测试阶段: 项目开发组完成集成测试后,提交测试所要求的待测软件及各种文档、手册、前期测试报告(《需求分析》、《软件设计规范》和上一级《测试报告》附录一、附录二)。 测试组安排和协调测试设备、环境等准备工作测试组按测试计划、测试大纲的要求对待测软件进行有效性测试、集成测试。 填写《错误报告》(附录六)。 对修改后的情况进行复合。 测试结束后,测试人员测试结果进行汇总;测试主管审核测试结果,得出测试结论;测试组进行测试分析和评估,编写《测试分析报告》(附录七)。 提交《测试分析报告》。 将所有文件存档。 对测试未通过的待测软件,测试人员汇总并向项目开发组提交测试错误报告。 项目开发组对测试错误报告进行确认,对有争议的问题可由上一级技术负责人确认和仲裁;项目开发组针对测试错误报告进行逐项修改,修改完成后再将待测软件及错误修改情况提交及测试组进行回归测试。 待测软件测试通过后,项目测评结束。 制作《用户操作手册》(帮助文件)。 用户测试阶段: 项目开发组与用户方商定测试计划、测试内容、测试环境等。 项目测试组向用户方提供项目内部测试汇总报告。 由项目开发组或测试组配合用户进行用户方测试。 由用户方编制用户方软件测试报告(程序错误报告和测试分析报告),若用户方不愿或无法编制测试报告,则经与用户方协商由我方测试人员编制用户方测试报告,经用户方签字后即可生效。 - 4 - 软件测试规范 软件测试流程 项目经理与用户方对用户方测试进行确认。 3.软件测试注意事项 根据《软件开发规范》仔细检查软件的界面是否合乎要求。(每一个子界面也应如此) 其中,应注意提示信息和软件开发商信息是否正确。小的图标是否合乎要求。检查菜单当中的各项功能和功能按钮是否能正确使用。 根据《软件开发规范》和《用户需求》及《软件详细设计》设计测试用例。(以边界值法、等价类划分法为主)。对功能界面要求注意与功能相关的信息显示及显示位置是否正确。数据输入界面应注意文字格式及数字和文字的区别。是否能够正确保存信息。数据查询(显示)界面应注意显示信息是否正确和完整。是否能正确查询。对打印功能要求注意打印出的报表是否正确。(包括报表各项信息、数据信息和报表字体等)。 这一项测试主要是对软件的错误处理功能进行测试。就是进行错误的操作或输入错误的数据,检查软件对这些情况是否能做出判断并予以提示。 特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。 一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。 对测试错误结果一定要有一个确认的过程。一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。 制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。 回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。 妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。 - 5 - 软件测试规范 软件测试类型 四.软件测试类型 除非是测试一个小程序,否则一开始就把整个系统作为一个单独的实体来测试是不现实的。与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成: 1.模块测试 在设计得好的软件系统中,每个模块完成一个清晰定义的子功能,而且这个子功能和同级其他模块的功能之间没有相互依赖关系。因此,有可能把每个模块作为一个单独的实体来测试,而且通常比较容易设计检验模块正确性的测试方案。模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。在这个测试步骤中所发现的往往是编码和详细设计的错误。 2.子系统测试 子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,因此这个步骤着重测试模块的接口。 3.系统测试 系统测试是把经过测试的于系统装配成一个完整的系统来测试。在这个过程中不仅应该发现设计和编码的错误,还应该验证系统确实能提供需求说明书中指定的功能,而且系统的动态特性也符合预定要求。在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。 4.验收测试 验收测试把软件系统作为单一的实体进行测试测试内容与系统测试基本类似,但是它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试。验收测试的目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误。 - 6 - 软件测试规范 黑盒测试方法 五.黑盒测试方法 黑盒测试( lack— ox testing)又称功能测试、数据驱动测试或基于规范的测试(即ec颠cation— ased testing)。用这种方法进行测试时,被测程序被当作看不见内部的黑盒。在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。 黑盒测试首先是程序通常的功能性测试。要求: 每个软件特性必须被一个测试用例或一个被认可的异常所覆盖。 用数据类型和数据值的最小集测试。 用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果; 用假想的数据类型和数据值运行,测试排斥不规则输入的能力; 对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。 不仅要考核“程序应该做什么?”还要考察“程序是否做了不该做的2”同时还要考察程序在其他一些情况下是否正常。这些情况包括数据类型和数据值的异常等等。下述几种方法:(a)等价类划分,( )因果图方法,(c)边值分析法,(d)猜错法,(e)随机数法,就是从更广泛的角度来进行黑盒测试。每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集。 1.等价类划分 等价类划分是一种典型的黑盒测试方法。等价类是指某个输入域的集合。它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。因此我们只要在一个集合中选取一个测试数据即可。等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。这样就可使用少数测试用例检验程序在一大类情况下的反映。 在考虑等价类时,应该注意区别以下两种不同的情况: 有效等价类:有效等价类指的是对程序的规范是有意义的、合理的输入数据所构成的集合。在具体问题中,有效等价类可以是一个,也可以是多个。 无效等价类:无效等价类指对程序的规范是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。 确定等价类有以下几条原则: 如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类。例如,程序的规范中提到的输入条包括“??项数可以从1到999??”,则可取有效等价类为“l<项数<999”,无效等价类为“项数<l,,及“项数>999”。 输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。如某程序涉及标识符,其输入条件规定“标识符应以字母开头??”则“以字母开头者”作为有效等价类,“以非字母开头”作为无效等价类。 如果我们确知,已划分的等价类中各元素在程序中的处理方式是不同的,则应将此等价类进一步划分成更小等价类。 输入条件 。。。。。。 。。。。。。 有效等价类 。。。。。。 。。。。。。 无效等价类 。。。。。。 。。。。。。 根据已列出的等价类表,按以下步骤确定测试用例: 为每个等价类规定一个唯一的编号; - 7 - 软件测试规范 黑盒测试方法 设计一个测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖; 设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步,使所有无效等价类均被覆盖。这里强调每次只覆盖一个无效等价类。这是因为一个测试用例中如果含有多个缺陷,有可能在测试中只发现其中的一个,另一些被忽视。等价类划分法能够全面、系统地考虑黑盒测试测试用例设计问题,但是没有注意选用一些“高效的”、“有针对性的”测试用例。后面介绍的边值分析法可以弥补这一缺点。 2.因果图 等价类划分法并没有考虑到输入情况的各种组合。这样虽然各个输入条件单独可能出错的情况已经看到了,但多个输入情况组合起来可能出错的情况却被忽略。采用因果图方法能帮助我们按一定步骤选择一组高效的测试用例,同时,还能为我们指出程序规范的描述中存在什么问题。 利用因果图导出测试用例需要经过以下几个步骤: 分析程序规范的描述中哪些是原因,哪些是结果。原因常常是输入条件或是输入条件的等价类。结果是输出条件。 分析程序规范的描述中语义的内容,并将其表示成连接各个原因与各个结果的“因果图”。 由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。为表明这些特定的情况,在因果图上使用持殊的符号标明约束条件。把因果图转换成判定表。把判定表的每一列写成一个测试用例。 3.边值分析法 边值分析法是列出单元功能、输入、状态及控制的合法边界值和非法边界值,设计测试用例,包含全部边界值的方法。典型地包括IF语句中的判别值,定义域、值域边界,空或畸形输入,末受控状态等。边值分析法不是一类找一个例子的方法,而是以边界情况的处理作为主要目标专门设计测试用例的方法。另外,边值分析不仅考查输入的边值,也要考虑输出的边值。这是从人们的经验得出的一种有效方法。人们发现许多软件错误只是在下标、数据结构和标量值的边界值及其上、下出现,运行这个区域的测试用例发现错误的概率很高。 用边值分析法设计测试用例时,有以下几条原则: 如果输入条件规定了取值范围,或是规定了值的个数,则应以该范围的边界内及刚刚超出范围的边界外的值,或是分别对最大、最小及稍小于最小、稍大于最大个数作为测试用例。如有规范“某文件可包含l至255”个记录??“,则测试用例可选1和255及0和256等。 针对规范的每个输出条件使用原则〔a〕。 如果程序规范中提到的输入或输出域是个有序的集合(如顺序文件、表格等)就应注意选取有序集的第一个和最后一个元素作为测试用例。 分析规范,尽可能找出可能的边界条件。一个典型的边值分析例子是三角形分类程序。选取a, ,c构成三角形三边,“任意两边之和大于第三边”为边界条件。边值分析相等价类划分侧重不同,对等价类划分是一个补充。如上述三角形问题,选取a=3, =4,c=5,a=2, =4,c=7则覆盖有效和无效等价类。如果能在等价类划分中注入边值分析的思想。在每个等价类中不只选取一个覆盖用例,而是进而选取该等价类的边界值等价类划分法将更有效,最后可以用边值分析法再补充一些测试用例。 4.猜错法 猜错法在很大程度上是凭经验进行的,是凭人们对过去所作的测试工作结果的分析,对所揭示的缺陷的规律性作直觉的推测来发现缺陷的。 一个采用两分法的检索程序,典型地可以列出下面几种测试情况: 被检索的表只有一项或为空表; - 8 - 软件测试规范 黑盒测试方法 表的项数恰好是2的幂次; 表的项数比2的幂次多1等。 猜错法充分发挥人的经验,在一个测试小组中集思广益,方便实用,特别在软件测试基础较差的情况下,很好地组织测试小组 (也可以有外来人员)进行错误猜测,是有效的测试方法。 5.随机数法 即测试用例的参数是随机数。它可以自动生成,因此自动化程度高。使用大量随机测试用例测试通过的程序会提高用户对程序的信心。但其关键在于随机数的规律是否符合使用实际。 - 9 - 软件测试规范 白盒测试方法 六.白盒测试方法 白盒法测试,是以程序的内部逻辑为基础,有选择地执行程序中最有代表性的通路。因此,白盒法也叫逻辑覆盖法( gic MM阴e)。最彻底的逻辑覆盖法,是覆盖程序巾的诲一条通路。但当程序中含有大量循环时,要执行每一条通路是44可能的。因此,我们只能寄希望于程序的覆盖度尽可能高一些。目前常用的一些覆盖标准有:语句覆盖、判定覆盖、条件澄盖、判定涤件覆盖、条件组合覆盖、路径覆盖等。 白盒法考虑的是测试用例对程序内部逻辑的覆盖程度,所以又称为逻辑覆盖法。最彻底的白盒法是覆盖程序中的每一条路径,但这不可能,我们希望覆盖的路径尽可能多一些。为了衡量测试的覆盖程度,需要建立一些标准,目前常用的一些覆盖标准是: (1)语句覆盖; (2)判定覆盖; (3)条件覆盖; (4)判定/条件覆盖; (5)条件组合覆盖。 1.语句覆盖 程序的某次运行一般并不能执行到其中的每一个语句,因此,如果某语句含有一个错误,而它在测试中没执行,这个错误就不可能被发现。为了提高发现错误的可能性,应该在测试时至少要执行程序中的每一个语句。 所谓“语句覆盖”测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能执行一次。 例子: e Example( A,B,C:eal) egin if(1)and(B=0) then x:=A; if(A=2)(1) then x:=x+l end; 为了使程序中每个语句至少执行一次,只需设计一个能通过路径ace的例子就可以了。例如选择输入数据为: A=2,B=0,x=3 就可达到“语句覆盖”标准。 显然,语句覆盖是一个比较弱的覆盖标准。如果第一个条件语句中的and错误地写成,上面的测试用例是不能发现这个错误的,或者是第二个条件语句中1误写成0,这个测试用例也不能暴露它。我们还可以举出许多错误情况是上述测试数据不能发现的。所以,一般认为“语句覆盖”是很不充分的最低的一种覆盖标准。 2.判定理盖 比“语句覆盖”稍强的覆盖标准是“判定覆盖”(或称分支覆盖)。这个标准是:执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值,即使得程序中的每一个分文至少都通过一次。 对上面那个例子,如果设计两个测试用例,就可以达到“判定覆盖”的标难。为此,我们可以选择输人数据为: (1)A=3,B=0,x=l - 10 - 软件测试规范 白盒测试方法 (2)A=2,B=1,x=3 “判定覆盖”比“语句覆盖”严格,因为如果每个分支都执行过了,自然每个语句也就执行了。 3.条件覆盖 它的含义是:执行足够的测试用例,使得判定中每个条件获得各种可能的结果。 对于例子程序,我们只需设计以下两个测试用例就可满足这标准: (1)A=2,B=o,x=4(沿路径ace执行) (2)A=1,B=l,x=l(沿路径aN执行) 虽然同样只要两个测试用例,但它比判定覆盖中两个测试用例更有效。一般来说,“条件覆盖”比“判定覆盖”强,但是,并不总是如此,满足“条件覆盖”不一定满足“判定覆盖”。例如对语句。 IF(A AND B)THEN S 设计两个测试用例:A“真”B“假”和A“假”B“真”。对于上例我们设计两个测试用例为: (1)A=1,B=o,x=3 (2)A=2,B=l,x=1 亦是如此,它们能满足“条件覆盖”但不满足“判定覆盖”。 4.判定/条件覆盖 针对上面的问题引出了另一种覆盖标准,这就是“判定/条件覆盖”,它的含义是:执行足够的测试用例,同时满足判定覆盖和条件覆盖的要求。显然,它比“判定覆盖”和“条件覆盖”都强。 对于例子程序,我们选取测试用例: (1)A=2,B=0,x=4 (2)A=1,B=l,x=l 它满足判定/条件覆盖标准。 值得指出,看起来“判定/条件覆盖”似乎是比较合理的,应成为我们的目标,但是事实并非如此,因为大多数计算机不能用一条指令对多个条件作出判定,而必须将源程序中对多个条件的判定分解成几个简单判定。这个讨论说明了,尽管“判定/条件覆盖”看起来能使各种条件取到所有可能的值,但实际上并不一定能检查到这样的程度。针对这种情况,有下面的条件组合覆盖标准。 5.条件组合覆盖 “条件组合覆盖”的含义是:执行足够的测试用例,使得每个判定中条件的各种可能组合都至少执行一次。这是一个最强的逻辑覆盖标准。 再看例子程序,必须使测试用例覆盖八种组合结果 (1)1,B=0 (5)A=2,1 (2)1,0 (6)A=2,1 (3)l,B=0 (7)2,1 (4)1,0 (8)2,1 必须注意到,(5)、(6)、(7)、(8)四种情况是第二个条件语句的条件组合,而x的值在该语句之前是要经过计算的,所以我们还必须根据程序的逻辑推算出在程序的人口点x的输入值应是什么。 要测试八个组合结果并不是意味着需要八种测试用例,事实上,我们能用四种测试用例来覆盖它们: (1)A=2,B=o,x=4; (2)A=2,B=1,x=l; (3)A=l,B=o,x=2; (4)A=1,B=1,x=l。 上面四个例子虽然满足条件组合覆盖,但并不能覆盖程序中的每一条路径,可以看出条件组合覆盖仍然是不彻底的,在白盒测试时,要设法弥补这个缺陷。 - 11 - 软件测试规范 测试错误类型 七.测试错误类型 本规范定义以下五类测试错误类型。 A类—严重错误,包括以下各种错误: 由于程序所引起的死机,非法退出 死循环 数据库发生死锁 因错误操作导致的程序中断 功能错误 与数据库连接错误 数据通讯错误 B类—较严重错误,包括以下各种错误: 程序错误 程序接口错误 数据库的表、业务规则、缺省值未加完整性等约束条件 C类—一般性错误,包括以下各种错误: 操作界面错误(包括数据窗口内列名定义、含义是否一致) 打印内容、格式错误 简单的输入限制未放在前台进行控制 删除操作未给出提示 数据库表中有过多的空字段 D类—较小错误,包括以下各种错误: 界面不规范 辅助说明描述不清楚 输入输出不规范 长操作未给用户提示 提示窗口文字未采用行业术语 可输入区域和只读区域没有明显的区分标志 E类—测试建议 - 12 - 软件测试规范 测试标准 八.测试标准 黑盒测试的通过准则一般有: 单元功能同设计需求一致; 规定的路径覆盖率及覆盖类达到要求,且单元执行正确; 所规定的黑盒测试手段被使用,且单元执行正确; 对残留错误有合法解释或被认可暂留; 虽然路径覆盖率不能达到,但其他各测试的错误查出率趋产0或稳定(时间的长短视情况而定)。 各类软件测试合格须符合以下标准。 A类错误 无 B类错误 无 C类错误 1% D类错误 5% E类建议 暂不作要求 以上比例为错误占总测试模块的比例。 软件产品未经测试合格,不允许出公司。 - 13 - 软件测试规范 附录一 单元测试报告 附录一 单元测试报告 1 测试过程与结果 1.1 (某程序模块 文档名称)测试 测试对象:(某程序模块 文档) 测试方面:(设计规范 应用功能及流程 程序代码) 责任人: 测试人及测试时间: 问题及影响、处理结果: 1.2 (某程序模块 文档名称)测试 测试对象:(某程序模块 文档) 测试方面:(设计规范 应用功能及流程 程序代码) 责任人: 测试人及测试时间: 问题及影响、处理结果: …… 2 测试结论 对单元测试的结果评价。 测试负责人: 审核(项目经理): 年 月 日 年 月 日 - 14 - 软件测试规范 附录二 集成测试报告 附录二 集成测试报告 项目名称 测试人 项目编号 测试时间 问题类型: 程序代码 数据库 项目文档 问题及影响描述、处理结果(可加附页) 测试结论 测试负责人: 年 月 日 审核(项目经理): 年 月 日 - 15 - 软件测试规范 附录三 测试大纲 附录三 测试大纲 1 概述 1.1 编写目的 [可照抄下列语句,也可适当修改。] 本文档的编写目的在于为XXXX(软件名称)软件测试人员提供详细的测试步骤和测试数据,以保证测试人员对软件测试的正确性和完整性。 1.2 参考资料 说明软件测试所需的资料(需求分析、设计规范等)。 1.3 术语和缩写词 说明本次测试所涉及到的专业术语和缩写词等。 1.4 测试内容和测试种类 2 系统结构 图表形式表示。 3 测试目的 4 测试环境 4.1 硬件 列出进行本次测试所需的硬件资源的型号、配置和厂家。 4.2 软件 列出进行本次测试所需的软件资源,包括操作系统和支持软件(不含待测软件)的名称、版本、厂家。 5 人员 列出一份清单,说明在整个测试期间人员的数量、时间、技术水平的要求。 6 测试说明 可以把整个测试过程按逻辑划分为几个组(包括测试计划中描述的总体测试要求的每个方面),并给每个组命名一个标识符。 6.1 [测试1名称及标识符]说明 6.1.1 测试概述 对测试1进行一个总体描述,主要说明这组测试的基本内容。 6.1.2 测试准备 描述本测试开始前系统必须具备的状态和数据。 6.1.3 测试步骤 对各测试操作按先后顺序进行编号。具体操作和数据见附录。 6.2 [测试2名称及标识符]说明 测评组: 年 月 日 - 16 - 软件测试规范 附录四 测试大纲附录 附录四 测试大纲附录 本附录描述了各测试步骤的详细说明,在填入测试结果后,可直接作为测试记录。内容较多时,可一页只放一个测试说明。 测试名称: 测试时间: 操作序号 说明输入的具体数据或动作 测试输入 说明预期的输出或结果 预期输出 标识符: 测试人: 错误等级 说明实际的输出或结果 实际输出 操作序号 说明输入的具体数据或动作 错误等级 测试输入 预期输出 实际输出 - 17 - 软件测试规范 附录五 测试计划 附录五 测试计划 1 概述 1.1 编写目的 [可照抄下列语句,也可适当修改。] 本文档的编写目的在于为整个测试阶段的管理工作和技术工作提供指南;确定测试的内容和范围,为评价系统提供依据。 1.2 参考资料 说明软件测试所需的资料(需求分析、设计规范等)。 1.3 术语和缩写词 说明本次测试所涉及到的专业术语和缩写词等。 1.4 测试种类 说明本次测试所属的测试种类(单元测试、集成测试、有效性测试、系统测试、用户测试)及测试的对象。 2 系统描述 简要描述被测软件系统,可用图表加解释的形式,说明被测系统的输入、基本处理功能及输出,为进行测试提供一个提纲。 3 测试环境 3.1 硬件 列出进行本次测试所需的硬件资源的型号、配置和厂家。 3.2 软件 列出进行本次测试所需的软件资源,包括操作系统和支持软件(不含待测软件)的名称、版本、厂家。 4 测试安排 4.1 (子系统1名称和项目唯一标识号) 4.1.1 测试总体要求 描述本次测试的要求,如: 对所有功能进行正确性测试; 使用一些虚假值、最大值和错误值对软件进行测试; 对软件进行错误检测和出错恢复的测试; 对特定环境条件的组合,用模拟测试数据对软件进行测试; 使用从环境中提取的“真实数据”作为输入,对软件进行测试。 4.1.2 主要测试内容 列出提纲。 4.1.3 测试进度安排 给出进行测试工作的时间安排。 4.2 (子系统2名称和项目唯一标识号) 5 测试数据的记录、整理和分析 说明对本次测试得到数据的记录、整理和分析的方法和存档要求。 审核: 年 月 日 批准: 年 月 日 - 18 - 软件测试规范 附录六 程序错误报告 附录六 程序错误报告 (系统名称) 测试项目 项目名称 测试类型 模块名称 测试时间 序号 模块名称 错误等级 错 误 描 述 版本 测试批次 修改情况 复 核 测试人: - 19 - 软件测试规范 附录七 测试分析误报告 附录七 测试分析报告 1 概述 1.1 编写目的 编写本文档的目的在于 通过对测试结果的分析得到对软件的评价; 为纠正软件缺陷提供依据; 使用户对系统运行建立信心。 1.2 参考资料 说明软件测试所需的资料(需求分析、设计规范等)。 1.3 术语和缩写词 说明本次测试所涉及到的专业术语和缩写词等。 2 测试对象 包括测试项目、测试类型、测试批次(本测试类型的第几次测试)、测试时间等。 3 测试分析 3.1 测试结果分析 列出测试结果分析记录,并按下列模板产生BUG分布表和BUG分布图。 分析模版: 从软件测试中发现的并最终确认的错误点等级数量来评估: 从以上提出的BUG等级来统计等级和数量的一个分布情况:(如下表) BUG数量 所占比例 A 2 9% B 17 74% C 3 13% D 0 0% E 1 4% BUG分布图 0%4%9% A级 B级C级D级E级 74% 3.2 对比分析 若非首次测试时,将本次测试结果与首次测试、前一次测试的结果进行对比分析比较。 3.3 测试评估 通过对测试结果的分析提出一个对软件能力的全面分析,需标明遗留缺陷、局限性和软件的约束限制等,并提出改进建议。 3.4 测试结论 根据测试标准及测试结果,判定软件能否通过测试测试主管: 年 月 日
软件测试基础 一、概述 二、软件测试的目的 三、软件测试的基本方法 四、软件测试的复杂性与经济性 五、软件测试的心理学问题 六、好的测试工程师应具备的素质 七、参考文献   一、概述 信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点。不论软件的生产者还是软件的使用者,均生存在竞争的环境中,软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞争中被淘汰出局。用户为了保证自己业务的顺利完成,当然希望选用优质的软件。质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅增加,还可能产生其他的责任风险,造成公司信誉下降,继而冲击股票市场。在一些关键应用 (如民航订票系统、银行结算系统、证券交易系统、自动飞行控制软件、军事防御和核电站安全控制系统等) 中使用质量有问题的软件,还可能造成灾难性的后果。 软件危机曾经是软件界甚至整个计算机界最热门的话题。为了解决这场危机,软件从业人员、专家和学者做出了大量的努力。现在人们已经逐步认识到所谓的软件危机实际上仅是一种状况,那就是软件中有错误,正是这些错误导致了软件开发在成本、进度和质量上的失控。有错是软件的属性,而且是无法改变的,因为软件是由人来完成的,所有由人做的工作都不会是完美无缺的。问题在于我们如何去避免错误的产生和消除已经产生的错误,使程序中的错误密度达到尽可能低的程度。 给软件带来错误的原因很多,具体地说,主要有如下几点: ①、交流不够、交流上有误解或者根本不进行交流 在应用应该做什么或不应该做什么的细节(应用的需求)不清晰的情况下进行开发。 ②、软件复杂性 图形用户界面(GUI),客户/服务器结构,分布式应用,数据通信,超大型关系型数据库以及庞大的系统规模,使得软件及系统的复杂性呈指数增长,没有现代软件开发经验的人很难理解它。 ③、程序设计错误 向所有的人一样,程序员也会出错。 ④、需求变化 需求变化的影响是多方面的,客户可能不了解需求变化带来的影响,也可能知道但又不得不那么做。需求变化的后果可能是造成系统的重新设计,设计人员的日程的重新安排,已经完成的工作可能要重做或者完全抛弃,对其他项目产生影响,硬件需求可能要因此改变,等等。如果有许多小的改变或者一次大的变化,项目各部分之间已知或未知的依赖性可能会相互影响而导致更多问题的出现,需求改变带来的复杂性可能导致错误,还可能影响工程参与者的积极性。 ⑤、时间压力 软件项目的日程表很难做到准确,很多时候需要预计和猜测。当最终期限迫近和关键时刻到来之际,错误也就跟着来了。 ⑥、自负人更喜欢说: '没问题' '这事情很容易' '几个小时我就能拿出来' 太多不切实际的‘没问题’,结果只能是引入错误。 ⑦、代码文档贫乏 贫乏或者差劲的文档使得代码维护和修改变的异常艰辛,其结果是带来许多错误。事实上,在许多机构并不鼓励其程序员为代码编写文档,也不鼓励程序员将代码写得清晰和容易理解,相反他们认为少写文档可以更快的进行编码,无法理解的代码更易于工作的保密(“写得艰难必定读的痛苦”)。 ⑧、软件开发工具 可视化工具,类库,编译器,脚本工具,等等,它们常常会将自身的错误带到应用软件中。就象我们所知道的,没有良好的工程化作为基础,使用面向对象的技术只会使项目变得更复杂。 为了更好地解决这些问题,软件界做出了各种各样的努力。 人们曾经认为更好的程序语言可以使我们摆脱这些困扰,这推动了程序设计语言的发展,更多的语言开始流行,为了使程序更易于理解开发了结构化程序设计语言,如PL/1,PASCAL等;为了解决实时多任务需求开发了结构化多任务程序设计语言,如Modula,Ada等;为了提高重用性开发了面向对象的程序设计语言,如Simlasa等;为了避免产生不正确的需求理解,开发形式化描述语言,如HAL/S等,这使得建立基于自然语言的描述成为可能,人们以形式化语言来描述需求;为了支持大型数据库应用,开发了可视化工具,如Visual Studio、Power Builder等。程序语言对提高软件生产效率起到了一定的积极作用,但它对整个软件质量尤其是可靠性的影响,与其他因素相比作用较小。 可能是因为程序语言基于严格的语法和语义规则,人们企图用形式化证明方法来证明程序的正确性。将程序当作数学对象来看待,从数学意义上证明程序是正确的是可能的。数学家对形式化证明方法最有兴趣,在论文上谈起来非常吸引人,但实际价值却非常有限,因为形式化证明方法只有在代码写出来之后才能使用,这显然太迟了,而且对于大的程序证明起来非常困难。 受到其他行业项目工程化的启发,软件工程学出现了,软件开发被视为一项工程,以工程化的方法来进行规划和管理软件的开发。 针对需求不确定的应用,可以使用渐进和迭代类的开发模型。还可以采用快速应用程序开发(RAD)和协同应用程序开发(JAD)技术,由软件开发者和用户代表共同参与开发软件规范。RAD和JAD的基本思路是开发者和用户共同设计系统中的屏幕,开发者迅速地把实现这些屏幕的最基本功能编写好,然后把它们交给用户看,然后用户和开发者回顾这些屏幕以确认它们达到了用户的要求,这个周期一直持续到系统的基本部分定义完毕。一旦设计被用户接受,开发者将完成完全实现屏幕需要的代码。RAD和传统软件开发项目之间的一个基本区别是:应用程序RAD系统是按阶段发布的。传统项目一般一次发布,也叫“big bang”。RAD方法使用高效开发工具,开发者能够非常迅速地设计出系统的基本屏幕,允许用户在开发周期中很早就能见识到系统将来看起来怎么样,避免了在传统开发项目中长篇大论并且枯燥难懂的说明。 IBM的Dr.Harlan Mills提出了净室过程。净室过程组合了形式化程序验证和统计过程控制(SPC)。在这种方法中,首先用正确性数学证明预防缺陷发生,然后用MTBF度量软件质量。净室过程是一种相当新的软件开发方法,它要求软件开发在管理方式和技术方法上作重大改变,特别是要求SPC应用到软件的知识,这影响了其被广泛的接受。 硬件成本持续降低,可支持CASE工具运行的新的强大的工作站和网络已经成为软件工程使用的工作平台,CASE工具可完成一些特定的软件开发过程。这些工具提供给软件设计者以图形方式描述软件设计的能力,这样就易于维护、易于交叉检查、易于理解。许多人(尤其是CASE工具供货商)相信CASE工具扮演了解决软件危机和拯救软件工业的角色,但事实上我们看到的情形却是许多公司花了大量的金钱买回的CASE工具但很少使用,原因在于这些工具执行的过程与机构的软件设计过程不相适用。 在可以借助许多新的技术和工具进行软件开发的今天,软件开发过程的成熟性问题开始引起人们的重视。这种产品一致性问题的主要症结在于管理,因此人们将目标转向了管理的改善,一些以改进软件开发过程为目标的活动已经展示出积极的结果。 以下是一些比较典型的文本。 SEI SW-CMM ISO SPICE(Software Process Improvement and Capability dEtermination) Bootstrap ISO-9000-3 TickIT Trillium 事实上,对于软件来讲,还没有象银弹那样的东西。不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。 测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。因此,测试对于软件生产来说是必需的,问题是我们应该思考“采用什么方法、如何安排测试?” 二、软件测试的目的 软件测试的目的决定了如何去组织测试。如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。如果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。 不同的机构会有不同的测试目的;相同的机构也可能有不同测试目的,可能是测试不同区域或是对同一区域的不同层次的测试。 在谈到软件测试时,许多人都引用Grenford J. Myers在《The Art of Software Testing》一书中的观点: ①、软件测试是为了发现错误而执行程序的过程; ②、测试是为了证明程序有错,而不是证明程序无错误。 ③、一个好的测试用例是在于它能发现至今未发现的错误; ④、一个成功的测试是发现了至今未发现的错误的测试。 这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。 首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。 其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。详细而严谨的可靠性增长模型可以证明这一点。例如 Bev Littlewood发现一个经过测试而正常运行了n小时的系统有继续正常运行n小时的概率。 三、软件测试的基本方法
[WEB安全测试].(美)霍普.扫描版.pdf (美)霍普 等 著 傅鑫 等 译 出 版 社:清华大学出版社 ISBN:9787302219682 出版时间:2010-03-01 版  次:1 页  数:281 装  帧:平装 开  本:16开 所属分类:图书 > 计算机与互联网 > 计算机安全 内容简介   在你对Web应用所执行的测试中,安全测试可能是最重要的,但它却常常是最容易被忽略的。本书中的秘诀演示了开发和测试人员在进行单元测试、回归测试或探索性测试的同时,如何去检查最常见的Web安全问题。与即兴的安全评估不同的是,这些秘诀是可重复的、简洁的、系统的——可以完美地集成到你的常规测试套装中。   本书中的秘诀所覆盖的基础知识包括了从观察客户端和服务器之间的消息到使用脚本完成登录并执行Web应用功能的多阶段测试。在本书的最后,你将能够建立精确定位到Ajax函数的测试,以及适用于常见怀疑对象(跨站式脚本和注入攻击)的大型多级测试。   本书将帮助你:   ·获取、安装和配置有用的——且免费的——安全测试工具   ·理解你的应用如何与用户通信,这样你就可以在测试中更好地模拟攻击   ·从许多不同的模拟常见攻击(比如SQL注入、跨站式脚本和操纵隐藏表单域)的方法中进行选择   ·作为自动化测试的出发点,通过使用秘诀中的脚本和例子,使你的测试可重复   不用再担心午夜来电话告诉你站点被破坏了。通过本书和示例中所用的免费工具,你可以将安全因素加入到你的测试套装中,从而得以睡个安稳觉。 作者简介   Paco Hope,是Cigital公司的一名技术经理,《Mastering FreeBsD and 0penBsDsecurity》 (由O’Reilly出版)的合著者之一。他也发表过有关误用、滥用案例和PKI的文章。他曾被邀请到会议就软件安全需求、Web应用安全和嵌入式系统安全等话题发表演讲。在Cigital,他曾担任MasterCard Internationa!在安全策略方面的主题专家,而且曾协助一家世界500强的服务业公司编写软件安全策略。他也为软件开发和测试人员提供软件安全基础方面的培训。他还曾为博彩业和移动通信行业中的几家公司提出过软件安全方面的建议。Paco曾在威廉玛丽学院主修计算机科学和英语,并从弗吉尼亚大学获得计算机科学方面的理学硕士学位。   Ben Waltller,是Cigital公司的一名顾问,Edit C00kies工具的开发者之一。他同时参与标准质量保证和软件安全方面工作。他日复一日地设计和执行测试一一因此他理解忙碌的QA领域对简单秘诀的需求。他也曾对开放式Web应用程序安全项目(0WAsP)的成员就w曲应用测试工具发表过演讲。 目录 序 1 前言 3 第1章 绪论 13 1.1 什么是安全测试 13 1.2 什么是Web应用 17 1.3 Web应用基础 21 1.4 Web应用安全测试 25 1.5 方法才是重点 26 第2章 安装免费工具 29 2.1 安装Firefox 29 2.2 安装Firefox扩展 30 2.3 安装Firebug 31 2.4 安装OWASP的WebScarab 32 2.5 在Windows上安装Perl及其软件包 33 2.6 在Linux, Unix或OS X上安装Perl和使用CPAN 34 2.7 安装CAL9000 35 2.8 安装ViewState Decoder 36 2.9 安装cURL 36 2.10 安装Pornzilla 37 2.11 安装Cygwin 38 2.12 安装Nikto 2 39 2.13 安装Burp Suite 40 2.14 安装Apache HTTP Server 41 第3章 基本观察 43 3.1 查看网页的HTML源代码 44 3.2 查看源代码,高级功能 45 3.3 使用Firebug观察实时的请求头 48 3.4 使用WebScarab观察实时的POST数据 52 3.5 查看隐藏表单域 55 3.6 使用TamperData观察实时的响应头 56 3.7 高亮显示JavaScript和注释 59 3.8 检测JavaScript事件 60 3.9 修改特定的元素属性 61 3.10 动态跟踪元素属性 63 3.11 结论 65 第4章 面向Web的数据编码 66 4.1 辨别二进制数据表示 67 4.2 使用Base-64 69 4.3 在网页中转换Base-36数字 71 4.4 在Perl中使用Base-36 71 4.5 使用以URL方式编码的数据 72 4.6 使用HTML实体数据 74 4.7 计算散列值 76 4.8 辨别时间格式 78 4.9 以编程方式对时间值进行编码 80 4.10 解码ASP.NET的视图状态 81 4.11 解码多重编码 83 第5章 篡改输入 85 5.1 截获和修改POST请求 86 5.2 绕过输入限制 89 5.3 篡改URL 90 5.4 自动篡改URL 93 5.5 测试对URL长度的处理 94 5.6 编辑Cookie 96 5.7 伪造浏览器头信息 99 5.8 上传带有恶意文件名的文件 101 5.9 上传大文件 104 5.10 上传恶意XML实体文件 105 5.11 上传恶意XML结构 107 5.12 上传恶意ZIP文件 109 5.13 上传样例病毒文件 110 5.14 绕过用户界面的限制 111 第6章 自动化批量扫描 114 6.1 使用WebScarab爬行网站 115 6.2 将爬行结果转换为清单 117 6.3 减少要测试的URL 120 6.4 使用电子表格程序来精简列表 120 6.5 使用LWP对网站做镜像 121 6.6 使用wget对网站做镜像 123 6.7 使用wget对特定的清单做镜像 124 6.8 使用Nikto扫描网站 125 6.9 理解Nikto的输出结果 127 6.10 使用Nikto扫描HTTPS站点 128 6.11 使用带身份验证的Nikto 129 6.12 在特定起始点启动Nikto 130 6.13 在Nikto中使用特定的会话Cookie 131 6.14 使用WSFuzzer测试Web服务 132 6.15 理解WSFuzzer的输出结果 134 第7章 使用cURL实现特定任务的自动化 137 7.1 使用cURL获取页面 138 7.2 获取URL的许多变体 139 7.3 自动跟踪重定向 140 7.4 使用cURL检查跨站式脚本 141 7.5 使用cURL检查目录遍历 144 7.6 冒充特定类型的网页浏览器或设备 147 7.7 以交互方式冒充另一种设备 149 7.8 使用cURL模仿搜索引擎 151 7.9 通过假造Referer头信息来伪造工作流程 152 7.10 仅获取HTTP头 153 7.11 使用cURL发送POST请求 154 7.12 保持会话状态 156 7.13 操纵Cookie 157 7.14 使用cURL上传文件 158 7.15 建立多级测试用例 159 7.16 结论 164 第8章 使用LibWWWPerl实现自动化 166 8.1 编写简单的Perl脚本来获取页面 167 8.2 以编程方式更改参数 169 8.3 使用POST模仿表单输入 170 8.4 捕获和保存Cookie 172 8.5 检查会话过期 173 8.6 测试会话固定 175 8.7 发送恶意Cookie值 177 8.8 上传恶意文件内容 179 8.9 上传带有恶意名称的文件 181 8.10 上传病毒到应用 182 8.11 使用Perl解析接收到的值 184 8.12 以编程方式来编辑页面 186 8.13 使用线程化提高性能 189 第9章 查找设计缺陷 191 9.1 绕过必需的导航 192 9.2 尝试特权操作 194 9.3 滥用密码恢复 195 9.4 滥用可预测的标识符 197 9.5 预测凭证 199 9.6 找出应用中的随机数 200 9.7 测试随机数 202 9.8 滥用可重复性 204 9.9 滥用高负载操作 206 9.10 滥用限制性的功能 208 9.11 滥用竞争条件 209 第10章 攻击AJAX 211 10.1 观察实时的AJAX请求 213 10.2 识别应用中的JavaScript 214 10.3 从AJAX活动回溯到源代码 215 10.4 截获和修改AJAX请求 216 10.5 截获和修改服务器响应 218 10.6 使用注入数据破坏AJAX 220 10.7 使用注入XML破坏AJAX 222 10.8 使用注入JSON破坏AJAX 223 10.9 破坏客户端状态 224 10.10 检查跨域访问 226 10.11 通过JSON劫持来读取私有数据 227 第11章 操纵会话 229 11.1 在Cookie中查找会话标识符 230 11.2 在请求中查找会话标识符 232 11.3 查找Authentication头 233 11.4 分析会话ID过期 235 11.5 使用Burp分析会话标识符 239 11.6 使用WebScarab分析会话随机性 240 11.7 更改会话以逃避限制 245 11.8 假扮其他用户 247 11.9 固定会话 248 11.10 测试跨站请求伪造 249 第12章 多层面的测试 251 12.1 使用XSS窃取Cookie 251 12.2 使用XSS创建覆盖 253 12.3 使用XSS产生HTTP请求 255 12.4 以交互方式尝试基于DOM的XSS 256 12.5 绕过字段长度限制(XSS) 258 12.6 以交互方式尝试跨站式跟踪 259 12.7 修改Host头 261 12.8 暴力猜测用户名和密码 263 12.9 以交互方式尝试PHP包含文件注入 265 12.10 制作解压缩炸弹 266 12.11 以交互方式尝试命令注入 268 12.12 系统地尝试命令注入 270 12.13 以交互方式尝试XPath注入 273 12.14 以交互方式尝试服务器端包含(SSI)注入 275 12.15 系统地尝试服务器端包含(SSI)注入 276 12.16 以交互方式尝试LDAP注入 278 12.17 以交互方式尝试日志注入 280
你是一位产品经理么?你知道产品经理的本职工作是什么吗? 本PPT来告诉你,产品经理的本职是什么。 大概由于产品这个概念过于宽泛,产品管理也就成了所有组织里最难定义的一项工作。我曾经和一些初涉产品管理或准备在此领域进一步发展的朋友们讨论过“产品经理的本职”这个问题。在这里,我打算把其中一些内容和大家分享,也欢迎各位进行讨论。 首先我要对“团队”下个定义,我所提的团队意指两个群体,一是狭义团队,即为了某个产品或某个产品的某个方面(外围设计、工程设计、质量监控等)而直接共同工作的一组人员;而广义团队,则是在某些工作上和狭义团队有重合部分的群体,如营销部门、法律部门和行政管理部门等。 帮助团队(和公司)为用户打造正确的产品 帮助团队 最优秀的产品经理总是知道哪些是具备最高优先级的任务并不惜花费所有时间来确保他们的团队处理这些任务。 主要来讲,这由以下两方面组成: 协调 – 使团队在有清晰目标和工作重点的前提下有效地协同工作 沟通 – 使所以内部成员彻底了解其所从事的工作之各方面意义(目标、时间和原因等等)。这点对于处于迅速变化的环境中的团队尤其重要。很多人把产品经理比作是产品的 CEO 或者是规则制定者,我对这种说法不以为然,因为这夸大了产品经理的实际权力和影响力。好的团队应该共享这份权利和责任感,人人都可以提出建议和改善现状。而相应地,优秀的产品经理则应该通过积极听取成员意见的方式来保证实现上述状态,不仅如此,他们还应负责发现问题、打破僵局和统一团队意向。 所以,并不是说产品经理不能有自己的想法,而是这些想法不能凌驾于组织所赋予的使命和集体需求之上。好的产品经理应该善于使他的队伍把集体的智慧在决策过程中充分发挥出来。 从实践角度来讲,这种职责往往就会变成总结会议记录或编制获得团队认可的产品计划。别小看了总结这项工作,我不只一次发现写一份优秀的会议报告往往要比会议本身耗时得多。 很多时候,你还需要那些广义团队的配合 – 即从组织里其它部门那儿获取反馈和意见等,以移除那些可能妨碍到计划实施的潜在障碍。在 Twitter,我们把这种和广义团队的配合称为 ACT SOLID(整体行动)。 在一支产品团队里,工程师负责编程,设计师负责包装,而产品经理却往往没有任何有形的作品。可是在我看来,全队的成功却系之于产品经理对于其本职工作的完成程度。 帮助公司 了解公司的整体目标和团队在宏观上对于实现该目标的作用是一名产品经理必须做到的一点。 就我个人经验来看,优秀的设计师在这方面更是出类拔萃 – 他们在工作中永远以公司愿景作为坐标,并帮助他们的队伍也做到这一点。 这种以实现组织愿景为终极目标的隶属意识和与其它团队间的配合意识极其重要。好的产品经理会清楚地让团队成员明白他们是作为组织的一份子而工作着的。 小团队的成功是在为更大团队的成功添砖加瓦而已。因此,在招聘产品经理的面试过程中,我常常从对话中寻找诸如“公司”、“创立者”、“视野”或者“CEO”这种传递着宏观视野的词语。 正如在前一部分里提到的一样,这么做并不是要抹杀个性或者创新的存在,而是确保个性和创新服务于组织目标而非取而代之。 用户 了解公司的整体目标和团队在宏观上对于实现该目标的作用是一名产品经理必须做到的一点。 就我个人经验来看,优秀的设计师在这方面更是出类拔萃 – 他们在工作中永远以公司愿景作为坐标,并帮助他们的队伍也做到这一点。 这种以实现组织愿景为终极目标的隶属意识和与其它团队间的配合意识极其重要。好的产品经理会清楚地让团队成员明白他们是作为组织的一份子而工作着的。 最好的产品经理懂得从用户的角度看问题,懂得为用户的需求呐喊,还懂得以用户的身份参与到产品开发过程中去。 小团队的成功是在为更大团队的成功添砖加瓦而已。因此,在招聘产品经理的面试过程中,我常常从对话中寻找诸如“公司”、“创立者”、“视野”或者“CEO”这种传递着宏观视野的词语。 正如在前一部分里提到的一样,这么做并不是要抹杀个性或者创新的存在,而是确保个性和创新服务于组织目标而非取而代之。 如果没有对于目标群体的深刻了解,做到以上几点是非常困难的。同时,优秀的产品经理还必须想进办法去倾听用户的声音 – 无论是通过产品试用、直接谈话、email 或网络信息还是和其它负责收集信息的队伍合作等方式。 最终,这些信息应该被服务于“打造正确产品”这个属于产品团队最终目标。 打造正确的产品 最好的产品经理懂得从用户的角度看问题,懂得为用户的需求呐喊,还懂得以用户的身份参与到产品开发过程中去。 打造产品终究是产品部门存在的理由和目标。再好的创意和设计如果无法转化现实的产品也只是废纸一堆而已。 好的产品经理知道如何在“做得好”和“做得成”之间找到平衡点。好的团队应该一直处于测试、收集早期反馈和改进的循环中,以求在将产品送到用户手中时尽量接近无可挑剔的状态(当然,这是个永远无法达到的状态)。 这就意味着要做一些必要的折衷,那些有着清晰目标和熟悉用户心理及需求的产品团队很擅长这么做,而让团队达到这种状态的则是优秀的产品经理。 如果没有对于目标群体的深刻了解,做到以上几点是非常困难的。同时,优秀的产品经理还必须想进办法去倾听用户的声音 – 无论是通过产品试用、直接谈话、email 或网络信息还是和其它负责收集信息的队伍合作等方式。 最终,这些信息应该被服务于“打造正确产品”这个属于产品团队最终目标。 平庸的产品经理让他的团队出产产品,优秀的产品经理则让他的团队出产正确的产品。 后者擅长从反馈和早期用户体验中收集到信息判断产品是否满足目标群体的需求,同时也通过和高层的沟通来确保产品符合组织战略。 另一项属于产品经理的重要职责则是在产品面市后的后期工作产品经理应该和他们的团队就测量指标和用户满意度等方面精密合作,不厌其烦地从海量信息中提取有效部分 – 什么方面使用户满意,什么方面又令他们失望,以进入到下一个改进周期。 这就意味着要做一些必要的折衷,那些有着清晰目标和熟悉用户心理及需求的产品团队很擅长这么做,而让团队达到这种状态的则是优秀的产品经理。 平庸的产品经理让他的团队出产产品,优秀的产品经理则让他的团队出产正确的产品。 后者擅长从反馈和早期用户体验中收集到信息判断产品是否满足目标群体的需求,同时也通过和高层的沟通来确保产品符合组织战略。 另一项属于产品经理的重要职责则是在产品面市后的后期工作产品经理应该和他们的团队就测量指标和用户满意度等方面精密合作,不厌其烦地从海量信息中提取有效部分 – 什么方面使用户满意,什么方面又令他们失望,以进入到下一个改进周期。 关键词:产品经理的本职是什么PPT下载,管理小知识PPT下载,优秀幻灯片下载,.PPTX格式;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值