目录
软件概述
软件的概念
1.概念:按照特定顺序组织的计算机数据和指令的集合
2.计算机=软件+硬件(软件=系统软件+应用软件)
3.它由软件------程序-----(子系统)------模块-------函数构成
软件团队
软件生命周期
分为六个阶段:
1.计划
工作内容:对资源、成本、效益和进度作出估计;制定完成研发计划。
2.需求分析
工作内容:对研发的软件进行详细的定义。一般由需求分析人员根据客户或者市场调研来编写完成:软件需求说明书SRS(SoftwareRequirementSpecification)
3.设计
工作内容:选取开发语言,开发架构等。该阶段会完成两个文档:概要设计(HLD)详细设计(LLD)
需求说明书SRS---程序(需求分析人员)
概要设计说明书HLD---模块(开发)
详细设计说明书LLD---函数(开发)
4.编码
工作内容:编写代码。复杂软件牵扯前端代码、后端代码、中间件等的编写。
5.测试
工作内容:检验软件是否符合需求。通过手工或者工具来检测软件是否满足功能、性能、易用性等要求。
6.运行和维护
工作内容:将软件交付用户投入正式使用。进入维护阶段,可能有多种原因需要对它进行修改,如软件错误、软件升级、增强功能、提高性能等。
软件开发模型
1.瀑布模型
定义:采用从上至下一次性完成整个软件产品的开发的方式,这是一种经典模型,提供了软件开发的基本框架。
计划--需求分析--软件设计--编码--测试--运行维护
优点:各阶段划分清晰,适合需求稳定的产品开发
缺点:单一流程,不可逆,风险显露得晚,纠正机会少,测试只是其中一个阶段,缺乏全过程测试思想
2.快速原型模型
定义:先迅速建造一个可以运行的软件原型,以便理解和澄清问题。开发人员与用户针对原型反复讨论,直到达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。
优点:克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,适合预先不能确切定义需求的软件系统的开发,能快速吸引用户,从而抢占市场先机
缺点:没有考虑软件整体质量和长期维护,大部分开发都不适合,往往只用于演示功能,若达不到质量要求,就会被抛弃,并重新设计
3.迭代模型
又称增量模型或演化模型,它将一个完整的软件拆分成不同的组件进行开发测试,确定此组件功能和性能满足用户需求,将组件集成到软件体系结构中。包括一系列的增量的步骤或迭代,每个迭代都包括很多的开发活动(需求、分析、设计、实包括一系列的增量的步骤或迭代,每个迭代都包括很多的开发活动(需求、分析、设计、实现等)
实现软件的每项功能反复求精的过程,是从模糊到清晰的开发过程。每次迭代是从功能的深度和细化程度来划分的。
迭代模型最适合使用与前期需求不稳定,需求多变的项目。
开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。
1.保证项目不要有失败的风险
2.保证代码质量
3.让客户等待时间最少
4.螺旋模型
融合了瀑布模型和快速原型模型,引入了风险分析。它将整个软件开发过程划分几个阶段,每个阶段前都会进行风险分析,如果能消除重大风险,则可以完成阶段任务。
5.敏捷模型
增量模型和迭代模型的组合,也是现在流行的模型。项目在构建初期被拆分成多个相互联系而又独立运行的子项目,然后开发人员迭代完成各个子项目,各个项目都要经过开发测试,在此过程中软件一直处于可使用状态。相比于传统的开发模型,敏捷模型更注重“人”在软件开发中的作用。
人和交互重于过程和工具。
可以工作的软件重于求全而完备的文档。
客户协作重于合同谈判。
随时应对变化重于循规蹈矩。
因此敏捷方法更适用于较小的队伍,40、30、20、10人或者更少。
软件质量
1.概念
就是软件与明确和隐性需求相一致的程度。软件质量不仅仅是软件功能的质量。
2.软件质量铁三角
1.组织健全2.技术领先3.流程科学规范
3.软件质量模型
软件质量模型由6个特征和12个子特性组成。
1.功能性:满足用户基本需求和隐式需求的能力
2.可靠性:维持规定级别的能力
3.可使用性:被使用、理解、学习的能力
4.效率:相对于所有资源的数量,软件可提供适当性能的能力
5.可维护性:被修改的能力,修改包括修正、优化、功能规格变更
6.可移植性:从一个环境迁移到另一个环境的能力。
软件测试的定义和原则
1.定义
使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别
2.目的
发现被测对象与用户需求之间的差异,即缺陷。
通过测试活动发现并解决缺陷,增加人们对软件质量的信心。
通过测试活动了解被测对象的质量状况,为决策提供数据依据。
通过测试活动积累经验,预防缺陷出现,降低产品失败风险。
3.原则
1.测试应基于客户需求。
2.测试要尽早进行。
3.穷尽测试是不可能的。
4.遵循GoodEnough原则。(GoodEnough原则是指测试的投入与产出要适当权衡)
5.测试缺陷要符合“二八”定理。(一般情况下,软件80%的缺陷会集中在20%的模块中)
6.避免缺陷免疫。(测试用例被反复使用,发现缺陷的能力就会越来越差;测试人员对软件越熟悉越会忽略一些看起来比较小的问题,发现缺陷的能力也越差)
7.测试证明软件存在缺陷,无法证明软件不存在缺陷。(测试活动可以减少软件中存在未被发现缺陷的可能性,降低漏测风险)
软件测试
本质
软件测试生命周期
测试计划-----测试方案-----测试用例----执行用例
测试阶段
阶段:单元测试(白盒)--集成测试(灰盒)--系统测试--验收测试
对象:函数/类--模块--子系统--程序--软件
测试阶段本质上是按照被测对象的颗粒度来划分的。
测试的过程
计划--设计--实现--执行
测试过程本质是按照事物发展的顺序来划分的
软件测试的流程
分析测试需求--制定测试计划--设计测试用例--执行测试--编写测试报告
测试流程的本质就是把软件测试的生命周期具体化。
软件测试方法
1.黑盒测试
黑盒测试:把软件(程序)当作一个有输入与输出的黑匣子,它把程序当作一个输入域到输出域的映射,只要输入的数据能输出预期的结果即可,不必关心程序内部是怎么样实现的。
2.白盒测试
白盒测试:测试人员了解软件程序的逻辑结构、路径与运行过程,在测试时,按照程序的执行路径得出结果。白盒测试就是把软件(程序)当作一个透明的盒子,测试人员清楚的知道从输入到输出的每一步过程。测试人员main()func()printf()输入输出验证
3.灰盒测试
灰盒测试=白盒测试+黑盒测试
4.静态测试和动态测试
静态测试:指的是不运行被测程序,仅通过分析或者检查源程序的语法、过程、接口等来验证功能是否正确。
动态测试:指的是运行被测程序后来检查实际结果与期望结果是否一致。如果一致则测试通过,如果不一致则测试不通过。一般所谓的测试指的是动态测试。
静态测试一般测试对象:文档、源代码,动态测试测试:程序。
5.手工测试和自动化测试
手工测试:属于传统的测试方法。由中级测试工程师编写测试用例并由初级测试工程师来执行。手工测试的缺点是工作量大,重复多,回归测试难以进行。
自动化测试:利用工具实现全部或者部分自动化。自动化测试的优点是解决了时间和人力成本,并且能够完成手工测试无法完成的工作,自动化测试非常适合进行回归测试。
6.冒烟测试
冒烟测试来源于硬件,对于一个硬件而言,如果更改后直接上电,此时如果冒烟了说明硬件有问题,如果没有冒烟说明基本没有问题的。冒烟测试是最简单,最经济有效的测试方法,一般选取核心功能少于30%的测试用例进行测试。
7.回归测试
回归测试是指修改了旧代码后,重新测试以确认修改没有引入新的错误或导致其他代码产生错误。
软件测试模型
1.V模型
优点:将复杂的测试工作分成了小阶段完成,既包含了对于源代码的底层测试也包含了对于软件产品的测试。
缺点:只能在编码之后才能开始测试,早期的需求分析等前期工作没有涵盖其中,因此它不能发现需求分析等早期的错误,这为后期的系统测试、验收测试埋下了隐患。
2.W模型
优点:测试范围不仅包括程序,还包括需求分析、软件设计等前期工作,这样有利于尽早全面的发现问题。
缺点:它将软件开发过程分成需求、设计、编码、集成等一系列的串行活动,无法支持迭代、自发性等需要变更调整的项目。