1、软件的概念
软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
- 程序是按事先设计的功能和性能要求执行的指令序列。
- 数据是使程序能正常操纵信息的数据结构。
- 文档是与程序开发,维护和使用有关的图文材料。
2、软件生命周期
2.1、可行性分析
可行性研究的结果是客户做出是否继续惊醒这项工程的决定的重要依据,一般来说,只有投资可能取得较大效益的那些工程项目才值得继续进行下去。可行性研究以后的那些阶段将需要投入更多的人力物力。该阶段产出可行性研究报告。
可行性研究报告:在可行性研究与计划阶段内,要确定该软件的开发目标和总的要求,要进行可行性分析、投资一收益分析、制订开发计划,并完成应编制的文件。
2.2、需求分析
在需求分析阶段确定的系统逻辑模型是以后设计和实现目标系统的基础。因此必须准确完整地体现用户的要求。这个阶段的一项重要任务,是用正式文档准确地记录堆目标系统的需求,这份文档通常称为规格说明书。
软件需求说明书:软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解, 使之成为整个开发工作的基础。内容包括对功能的规定对性能的规定等。
数据要求说明书:数据要求说明书的编制目的是为了向整个开发时期提供关于被处理数据的描述和数据采集要求的技术信息。
2.3、概要设计
定义实现需求的工作产品技功能、技术构架,定义设计准则及共通处理方针,分解划分功能模块,定义各功能模块的功能和业务处理,定义模块间的接口关系。典型的工作产品有《概要设计书》、《设计准则》及《共通处理方针》。一般包括系统技术构架,机能一览,机能迁移图,数据库逻辑设计,数据文件逻辑定义,系统各单位功能模块及接口定义,设计准则及共通处理方针(外观、操作、错误处理、日志、提示信息、异常处理、命名规约、编码规约等方针)等内容。
2.4、详细设计
定义各功能模块的功能单元的详细实现,包括接口的物理定义,明确数据库/数据文件的物理定义等。典型的工作产品:《详细设计书》。典型的内容包括各模块的功能单元实现的详细描述,数据库物理设计,数据文件物理定义,接口物理定义,状态码物理设计,输出信息(MSG/LOG)设计等内容。如果一个软件系统比较简单,层次很少,本文件可以不单独编写,有关 内容合并入概要设计说明书。
2.5、编码阶段
将系统设计阶段的设计内容用编码的方式实现,最终形成可运行的软件代码。在这个阶段需要在系统设计的框架内按照系统设计文档进行编码。这个阶段中不仅仅是 需要编码,还需要进行单元测试,每完成一个模块应进行单元测试。最后,进行集成,按软件组织结构的要求将各个子系统组合起来。
2.6、调试和测试阶段
这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求。
测试分析报告:测试分析报告的编写是为了把组装测试和确认测试的结果、发现及分析写成文件加以记载。
2.7、运行与维护阶段
系统投入运行后,系统运行包括系统的日常操作、维护等。任何一个系统都不是一开始就很好,需要经过多次开发,运行,在开发,再运行循环不断上升。
2.8、废弃
系统终止运作,停止使用。
3、软件测试
3.1、软件测试概念
3.1.1、经典定义
软件测试(Software Testing),在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
3.1.2、标准定义
软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
3.2、软件测试的目的
- 验证软件是否满足软件开发合同或项目开发计划、系统设计文档、软件需求规格说明、软件设计说明和软件产品说明等规定的软件质量需求。
- 通过测试发现软件缺陷。
- 确保产品是健壮的、适应用户环境的。健壮性即稳定性,是产品质量的基本需求。软件稳定的运行才不会中断用户的工作。
- 发现尽可能多的缺陷,成功的测试在于发现了迄今为止尚未发现的缺陷。
3.3、软件测试的原则
1)应当尽早地不断地进行软件测试。
2)测试用例应由测试数据和与之对应的预期输出结果这两部分组成。
3)程序员应避免检查自己的程序。
4)在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
5)充分注意测试中的群集现象(80/20原则),百分之80的缺陷集中出现在百分之20的核心功能区域,在测试中发现缺陷越多的地方,存在的未被发现的缺陷也就越多。。
6)严格执行测试计划,排除测试的随意性。
7)应当对每一个测试结果做全面的检查。
8)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
9)不可能执行穷尽测试,基于风险的测试是必要的。
10)杀虫剂悖论,相同的功能,相同的用例,多次执行,后几轮就慢慢找不到缺陷了。用例在每次执行完之后应该及时进行更新和维护,升级你的装备。
11)不同测试活动依赖不同的测试背景。金融公司测试,安全性就是第一位。电子商务测试,功能性则更加重要。
12)不存在缺陷的谬论:假如系统无法使用,或者系统不能完成客户的需求和期望,发现和修改缺陷是没有任何意义的。
3.4、软件测试的对象
根据不同的测试阶段,每个阶段的测试对象都不一样:
需求阶段:需求文档
系统设计阶段:概要设计文档、详细设计文档
编码阶段:源代码
系统测试阶段:可运行程序
4、软件测试的分类
4.1、按测试阶段分类
4.1.1、单元测试(Unit Testing)
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义。单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测