软件是一系列按照特定顺序组织的计算机数据和指令的集合。一般认为,软件包括以下内容:
(1)运行时,能够提供所要求功能和性能的指令或计算机程序集合。
(2)程序更够妥善地处理信息的数据结构。
(3)描述程序功能需求以及程序如何操作和使用的文档。
我们可以简单理解为,软件=程序+文档。
软件的发展可以分为如下四个阶段:
软件工程研究的主要内容是:如何应用科学的理论和工程上的技术来指导软件开发,进而达到以较少的投资获得高质量软件的最终目标。
(看到这句话,让我有了一丝丝领悟:程序员也不能埋头编码,还是要懂点产品思维的好)
软件生命周期具有如下六个阶段:
(1)问题的定义和规划
(2)需求分析
(3)软件设计
(4)程序编码
(5)软件测试
(6)运行维护
其中,软件维护是软件生命周期中持续时间最长的阶段。
软件缺陷是指软件系统或系统部件中那些导致系统或部件不能实现其功能的问题或差错。通常认为,符合下面4个规则之一的就是软件缺陷:
纠错之前需要先查明错误,而查错工作量通常占整个纠错的90%以上,下面三种是常用的查错手段:
RUP(Rational Unified Process)译为Rational统一过程,以统一建模语言(UML)描述软件开发过程。
RUP中的软件生命周在时间上被分解为4个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和交付阶段。
RUP共有9个核心工作流,分别为6个核心过程工作流和3个核心支持工作流。
1)商业建模
2)需求
3)分析设计
4)实施
5)测试
6)部署
7)配置和变更管理
8)项目管理
9)环境
PS:前6个为核心过程工作流,后3个为核心支持工作流。
由于传统的开发方法使程序员花费大量的时间在开发文档的撰写上,真正写代码的时间很少,而且过于依赖过程控制,导致开发过程管理复杂且低效。于是,敏捷过程就应运而生(时间在2001年)。
《敏捷宣言》的内容如下:
“通过开发软件和帮助别人开发软件,我们找到了一些更好的开发软件的方式。通过这一工作,我们得出了这些价值:
- 个体和交互 胜过 过程和工具
- 可以工作的软件 胜过 面面俱到的文档
- 客户合作 胜过 合同谈判
- 相应变化 胜过 遵循计划
也就是说,尽管右边的项也很有价值,但我们认为左边的项更有价值”
在这种价值观的指导下,诞生了包括XP(极限编程)、FDD(功能驱动开发)等在内的开发过程。
敏捷开发主要有两个主要特征:
(1)开发采用适应性方法,开发过程以代码为核心,经过多次小型迭代逐步逼近实际需求,而文档则作为交流工具的作用被弱化,作为管理监督的功能被取消。
(2)以人为本。程序员变成了开发的主体,所有的主要涉及策略的指定、开发方法的选择、需求的确定都由层序员决定。
ANSI/IEEE Std 729——1983给的定义:“与软件产品满足规定的和隐含的需求的能力有关的特征或特征的全体”。
CMM对质量的定义:“①一个系统、组件或者过程符合特定需求的程度;②一个系统、组件或者过程符合客户或用户的要求或期望的程度。”
M.J.Fisher给的定义:“所有描述计算机软件优秀程度的特性的组合。”
软件质量框架是由“质量特性—质量子特性—度量因子”构成的 3 层模型。由于度量因子由使用单位自行决定,下图就写了质量特性和质量子特性:
CMM是软件过程改良和评估模型,由卡耐基—梅隆大学软件工程研究院指定,也称为SEI-CMM。
CMM为软件企业的过程能力提供的阶梯式进化框架如下表所示:
(CMM评估方法已经被停止,但模型还是存在的。)
CMMI是SEI于2000年发布的CMM的新版本,它将各种能力成熟模型整合到同一框架中。其基本思想如下:
(1)解决软件项目过程改进难度增大问题。
(2)实现软件工程的并行与多学科组合。
(3)实现过程改进的最佳效益。
CMMI具有如下两个功能:
放三张图来供自己参悟一下测试与开发的关系:
从上面,我们可以知道,软件测试不仅仅是测试我们编写的程序,还要测试软件过程中所编写的文档。同时,测试过程和开发过程是同步进行的,测试过程是对开发过程中阶段性成果和最终产品进行验证的过程,它们是相互依赖的关系。
本文为课堂以及自己看课本的笔记,里面的内容基本都摘自周元哲所著的「软件测试基础」,只为方便复习和分享,不作任何商业用途!
(为什么要那么麻烦?那要从一只蝙蝠说起……)