软件生命周期(SDLC)的六个阶段
1)问题的定义及规划——此阶段是开发、需求产品通过讨论,主要确定软件的开发目标及其可行性。 2)需求分析——在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。由于需求在整个软件开发过程中可能会不断变化和深入,所以需要制定相应的需求变更计划,以保护整个项目的顺利进行。 3)软件设计——根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计和详细设计。 4)程序编码——将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合彼岸准的编写规范,以保证程序的可读性,易维护性,提高程序的运行效率。 5)软件测试——在软件设计完成后需要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试,系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。 6)运行维护——软件维护是软件生命中期中持续时间最长的阶段,在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的需求,要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。 软件生命周期模型 1)从概念提出的那一刻,软件产品就进入的软件生命周期。在经历需求、分析、设计、实现、部署后,软件将被使用并进入维护阶段,直到最后逐渐消亡,这样的一个过程,称为软件生命周期模型(Life Cycle Model)。 2) 典型的模型包括:瀑布模型、快速原型模型、迭代模型。瀑布模型的特点(文档是主体),很多问题在最后才会暴露出来,迭代模型比瀑布模型问题暴露的早,快速原型法比瀑布模型更直观。 软件测试的概念 – 广义,指软件生成周期中所有的检查、评审和确认工作,其中包括了对分析、设计阶段,以及完成开发后维护阶段的各类文档、代码的审查和确认 – 狭义,识别软件缺陷的过程,即实际结果与预期结果的不一致 – 软件测试是为了发现错误而审查软件文档、检查软件数据和执行程序代码的过程 – 软件测试应该是对软件形成过程的文档,数据以及程序进行的测试,而不仅是对程序进行的测试 软件质量——软件满足规定用户或潜在用户需求的能力,要从软件在内部、外部和使用过程中表现来衡量,包含内部质量、外部质量和使用质量。 软件测试 VS 质量保证 软件质量保证和软件测试时软件质量工程中两个不同层面的工作。 @ 质量保证(QA)——质量保证的终于工作通过预防,检查与改进来保证软件质量,所关注的重点是软件质量的检查与测量,着眼于软件开发的过程、步骤和产物。 @ 软件测试(QC)——测试过程虽然与开发过程紧密相关,但关心的不是过程的活动,而是对过程的产物以及开发出的软件进行剖析。 软件测试目的 1)测试的目的就是发现软件中的各种缺陷 2)测试只能证明软件存在缺陷,不能证明软件不存在缺陷 3)测试可以使软件的缺陷降低到一定程度,而不是彻底消灭 4)以较少的用例、时间、和人力照常软件中的各种错误和缺陷,以确保软件的质量 5)通过测试证明软件的功能和性能与需求说明相符合,测试结果数据为可靠性分析提供了依据 软件测试原则 1)good-enough:一种权衡投入、产出比的原则 2)保证测试的覆盖程度,但穷举测试时不可能的 3)所有测试都应追溯到用户需求 4)越早测试越好,测试过程与开发成功应是想结合的 5)测试规模由小而大,单元测试到系统测试 6)为了尽可能地发现错误,应该由独立的第三方来测试 7)不能为了便于测试擅自修改程序 8)既应该测试软件该做什么也应该测试软件不该做什么 软件测试的对象 1)根据软件定义,软件包括程序、数据和文档,所以软件测试并不仅是程序测试,也应该贯穿整个软件生命周期 2)需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明,概要设计规格说明,详细设计规格说明以及源程序 3) 为了把握各个环节的正确性,人民需要进行各种验证和确认工作: – 验证(verification):保证软件正确实现特定功能的一系列活动和过程,目的是保证软件生命周期中的每一个阶段的成功满足上一个阶段所设定的目标==do right thing – 确认(validation):保证软件满足用户需求的一系列的活动和过程,目的是在软件开发完成后保证软件,用户需求相符合==do thing right 黑盒测试 – 黑盒测试,又称功能测试或数据驱动测试,是针对软件的功能需求/实现进行测试,通过测试来检测每个功能是否符合需求,不考虑程序内部的逻辑结构 – 黑盒测试方法:功能划分、等价类划分、边界值分析、因果图、错误推测等 白盒测试 – 白盒测试也称结构测试或逻辑驱动测试,必须知道软件内部工作过程,代码的内部结构、逻辑设计,通过测试来检测软件内部是否按照需求、设计正常运行 – 对应于程序的一些主要结构:语句、分支、逻辑路径、变量 – 白盒测试的主要方法:语句覆盖方法、分支覆盖方法、逻辑覆盖方法 灰盒测试 – 灰盒测试介于白盒和黑盒测试之间 – 灰盒测试一方面考虑程序代码的功能性表现,另一方面,又需要考虑程序代码的内部结构 – 通俗说,灰盒测试就是白盒加黑盒,比如性能测试,自动化功能测试就是采用了灰盒测试的方法 静态测试 – 静态测试部实际运行软件,主要是对软件的编程格式、结构等方面进行评估,它可以由人工进行,也可以借助软件工具(QAC++、C++Test等)自动进行 – 静态测试包括:代码检查、程序结构分析、代码质量度量等 动态测试 – 动态测试需要在开发/测试环境或实际运行环境中运行软件,并使用测试用例去查找软件缺陷,输入设计好的测试用例,检查程序代码运行得到的结果与测试用例中预期结果之间是否有差异,判定实际结果与预测结果是否一致 – 动态测试四部分:设计测试用例、执行测试用例、分析比较输出结果,总结测试报告;主要使用黑、白、灰盒三种测试方法 – 动态测试包括:功能确认与接口测试、覆盖率分析、性能分析、内存分析等 手工测试 VS 自动测试 @ 手工测试——测试人员设计测试用例并执行,然后根据实际结果和预期结果比较并记录测试结果,最终输出测试报表的测试活动 1)优点: 可充分发挥测试工程师的主观能动性,将其智力体现在测试工作中 能发现许多缺陷,单同时又有一定的局限性和单调枯燥性 2)缺点: – 测试工作量大,重复多,修改的缺陷越多,回归测试越困难 – 手工完成测试的全部过程无法保证测试的科学性与严密性 – 没有人能向决策层提供精确的数据以度量当前的工作进度及工作效率 – 反复测试带来的倦怠情绪及其他人为因素使得测试标准前后不一 – 测试花费的时间越长,测试的严格性也就越低 @ 自动化测试——利用测试工具,模拟用户业务使用流程,让他们自动运行来查找缺陷 1)优点: – 自动测试利用软件测试工具自动实现全部或部分测试工作:管理、设计、执行和报告 – 节省大量的测试开销,并能够完成一些手工测试无法实现的测试 – 自动测试将测试人员从反复、烦杂的测试执行中解放出来,用更多的时间进行测试设计和结果分析 2)缺点: – 只可检查比较主要的问题,如崩溃、死机,无法发现一般的日常错误 – 软件测试不可能完全自动化,自动化不能完成所有手工测试任务 – 无创造性且灵活性差,不能改进测试的有效性 – 过程中可能会遇到许多意想不到的问题,特别是当软件不稳定时 – 编写脚本工作量大,执行时间成本和维护成本高 性能测试 VS 压力测试 @ 性能测试 – 性能测试的目的不是去找bug,而是排除系统的瓶颈,以及为以后的回归测试建立一个基准。而性能测试的操作,实际上就是一个非常小心受控的测量分析过程 – 在理想的情况下,被测软件在这个时候已经是足够稳定了,性能测试是为了检查系统的反映,运行速度等性能指标,他的前提是要求在一定负载下,如检查一个网站在100人同时在线的情况下的性能指标,每个用户是否都还可以正常的完成操作等 – 概括就是:在不同负载下(负载一定)时,通过一些系统参数(如反应时间等)检查系统的运行情况 @ 压力测试 – 压力测试是为了发现系统能支持的最大负载,他的前提是要求系统性能处在可以接受的范围内,比如经常规定的叶面3秒钟内响应 – 概括就是:在性能可以接受的前提下,测试系统可以支持的最大负载 举例说明:针对一个网站进行测试,模拟10到50个用户就是在进行常规性能测试,用户增加到1000乃至上万就变成了压力/负载测试。如果同时对系统进行大量的数据查询操作,就包含了强度测试转载于:https://www.cnblogs.com/penny1141/p/4538658.html