软件开发、软件测试领域名词解释

来源:互联网 发布:淘宝页面装修素材 编辑:程序博客网 时间:2024/05/21 09:32

软件

http://zh.wikipedia.org/zh-cn/%E8%BD%AF%E4%BB%B6

 

软件(英文:Software)是一系列按照特定顺序组织的计算机数据和指令的集合。一般来讲软件被划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务的领域提供不同的功能。

软件并不只是包括可以在计算机上运行的计算机程序,与这些计算机程序相关的文档,一般也被认为是软件的一部分。简单的说软件就是程序加文档的集合体。软件被应用于世界的各个领域,对人们的生活和工作都产生了深远的影响。

 


系统

http://zh.wikipedia.org/zh-cn/%E7%B3%BB%E7%BB%9F

 

系统泛指由一群有关连的个体组成,根据预先编排好的规则工作,能完成个别元件不能单独完成的工作的群体。

系统分为自然系统与人为系统两大类。

 


 

互联网

http://zh.wikipedia.org/zh-cn/%E4%BA%92%E8%81%94%E7%BD%91

 

互联网(英文:Internet),就如国与国之间称为“国际”一般,网络与网络之间所串连成的庞大网络,则可译为“网际”网络,又音译“因特网”或者“英特网”,是指在ARPA网基础上发展出的世界上最大的全球性互联网络。而互联网在台湾译作网际网路,或称“互连网”,即是“连接网络的网络”,可以是任何分离的实体网络之集合,这些网络以一组通用的协议相连,形成逻辑上的单一网络。这种将计算机网络互相联接在一起的方法称为“网络互联”。

 


 

 

 

 

 


 

系统工程

http://zh.wikipedia.org/zh-cn/%E7%B3%BB%E7%BB%9F%E5%B7%A5%E7%A8%8B

 

系统工程(Systems Engineering)是一个跨多学科领域的工程,通常专注于如何设计和管理复杂的工程专案。当处理大型、复杂的专案时,所面临的相关问题(例如:物流、不同团队的协调、和机器的自动控制)更加困难。系统工程借由工作流程、和工具来处理此一类型的专案,并且与技术、和以人为本的学科相互重叠(例如控制工程和专案管理)。

 


 

软件工程

http://zh.wikipedia.org/zh-cn/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B

 

软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。

在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公包、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,提高人们的工作效率,同时提升了生活质量。

软件工程师是对应用软件创造软件的人们的统称,软件工程师按照所处的领域不同可以分为系统分析员、软件设计师、系统架构师、程序员、测试员等等。人们也常常用程序员来泛指各种软件工程师。

 


 

需求分析

http://zh.wikipedia.org/zh-cn/%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90

 

在系统工程及软件工程中,需求分析指的是在建立一个新的或改变一个现存的系统或产品时确定新系统的目的、范围、定义和功能时所要做的所有工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。

在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个过程中最关键的一个过程。假如在需求分析时分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。

 


 

软件开发

http://zh.wikipedia.org/zh-cn/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91 

 

软件开发是根据用户要求建造出软件系统或者系统中软件部分的一个产品开发的过程。软件开发是一项包括需求获取、需求分析、设计、编程、软件测试、版本控制的系统工程。换句话说,软件开发就是一系列最终构建出软件产品的活动。软件开发可能包括研究、新的开发工作、修改、复用、重新设计(再工程)、维护,或者任何最终获得软件产品的其他活动[1]。尤其是在软件开发过程的初始阶段,其中可能会涉及到许多的部门,包括市场营销、工程设计、研究与开发以及一般意义上的管理[2]

“软件开发”一词还可能是指计算机编程,也就是编写和维护源代码的过程。软件一般是通过某种或数种程序设计语言、在特定的计算机平台上实现的。通常采用软件开发工具可以进行开发。

 


 

瀑布模型

http://zh.wikipedia.org/zh-cn/%E7%80%91%E5%B8%83%E5%BC%8F%E5%BC%80%E5%8F%91

 

瀑布模型是由W.W.Royce在1970年最初提出的软件开发模型,在瀑布模型中,开发被认为是按照需求分析,设计,实现,测试 (确认), 集成,和维护坚定地顺畅地进行。

在最初的文章中,Royce提倡重复地使用瀑布模型,以一种迭代的方式。但是,大多数人并不知道这一点,一些人也不相信它能够作为一种真实世界的过程使用。在实践中,过程很少能够以纯线性的方式进行。 通过回到前面的阶段或改变前一阶段的结果的迭代是非常普遍的。讽刺的是,在Royce 1970年的那篇文章中他讲述这种模型的目的是作为例子来说明这种模式是有缺陷的、不能工作的。事实上,软件开发相关文章中对这个名词的大量引用正是对这个广泛流行的软件开发做法的一种评判。

瀑布模型(Waterfall Model)最早强调系统开发应有完整之周期,且必须完整的经历周期之每一开发阶段,并系统化的考量分析与设计的技术、时间与资源之投入等,因此瀑布模型又可以称为‘系统发展生命周期’(System Development Life Cycle, SDLC)。由于该模式强调系统开发过程需有完整的规划、分析、设计、测试及文件等管理与控制,因此能有效的确保系统品质,它已经成为业界大多数软件开发的标准(Boehm, 1988)。

 


 

螺旋模型

http://zh.wikipedia.org/zh-cn/%E8%9E%BA%E6%97%8B%E6%A8%A1%E5%9E%8B

 

螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用。

 


 

迭代式开发

http://zh.wikipedia.org/zh-cn/%E8%BF%AD%E4%BB%A3%E5%BC%8F%E5%BC%80%E5%8F%91

 

迭代式开发也被称作迭代增量式开发迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。

在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。

 


 

测试

http://zh.wikipedia.org/zh-cn/%E6%B5%8B%E8%AF%95

 

测试,与科学方法中的实验类似,是对事物状态、功能的测量和观察。通过将测量结果与已知状态或理论假设相比较,测试者得以对事物状态、功能做出判断。

 


 

软件测试

http://zh.wikipedia.org/zh-cn/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95 

 

软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件品质,并对其是否能满足设计要求进行评估的过程。

软件测试描述一种用来促进鉴定软件的 正确性、完整性、安全性、和品质的过程。据此,您可能会想,软件测试永远不可能完整的确立任意电脑软件的正确性。然而,在可计算理论──计算机科学的一个支派──一个简单的数学证明推断出下列结果:不可能完全解决所谓“当机”(指任意电脑程式是否会进入 无限循环、或者罢工并产生输出) 问题。换句话说,软件测试是一种实际输出与预期输出间的稽核或者比较过程。

 


 

极限编程 

http://zh.wikipedia.org/zh-cn/%E6%9E%81%E9%99%90%E7%BC%96%E7%A8%8B

 

极限编程(XP,eXtreme Programming)是一种软件工程方法学,是敏捷软件开发中最富有成效的几种方法学之一。如同其他敏捷方法学,极限编程和传统方法学的本质不同在于它更强调可适应性而不是可预测性。XP的支持者认为软件需求的不断变化是很自然的现象,是软件项目开发中不可避免的、也是应该欣然接受的现象;他们相信,和传统的在项目起始阶段定义好所有需求再费尽心思的控制变化的方法相比,有能力在项目周期的任何阶段去适应变化,将是更加现实更加有效的方法。

 


 

测试驱动开发

http://zh.wikipedia.org/zh-cn/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91

 

测试驱动开发(Test-driven development)是现代计算机软件开发方法的一种。利用测试来驱动软件程序的设计和实现。测试驱动开始流行于20世纪90年代。测试驱动开发是极限编程中倡导的程序开发方法,方法主要是先写测试程序,然后再编码使其通过测试。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。

测试驱动开发的比喻。开发可以从两个方面去看待:实现的功能和质量。测试驱动开发更像两顶帽子思考法的开发方式,先戴上实现功能的帽子,在测试的辅助下,快速实现正确的功能;再戴上重构的帽子,在测试的保护下,通过去除冗余和重复的代码,提高代码重用性,实现对质量的改进。可见测试在测试驱动开发中确实属于核心地位,贯穿了开发的始终。

 


 

黑盒测试

http://zh.wikipedia.org/zh-cn/%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95

 

黑盒测试,软件测试的主要方法之一,也可以称为功能测试、数据驱动测试或基于规格说明的测试。测试者不了解程序的内部情况,只知道程序的输入、输出和系统的功能,这是从用户的角度针对软件界面、功能及外部结构进行测试,而不考虑程序内部逻辑结构。

 


 

白盒测试

http://zh.wikipedia.org/zh-cn/%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95 

 

白盒测试(White-box Testing),软件测试的主要方法之一,也称结构测试、逻辑驱动测试或基于程序本身的测试。测试者了解待测试程序的内部结构、算法等信息,这是从程序设计者的角度对程序进行的测试。

 


 

压力测试

http://zh.wikipedia.org/zh-cn/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95

 

压力测试,确立系统稳定性的一种测试方法,在软件工程、金融风险管理等领域应用比较普遍。通常在系统正常运作范围之外进行,以考察其功能极限和隐患。

 

压力测试常常和性能测试相混淆。它们主要不同点是,压力测试要求进行超过规定性能指标的测试。例如一个网站设计容量是100个人同时点击,压力测试就要是采用120个同时点击的条件测试。

压力测试的通常判断准则:

  1. 系统能够恢复
  2. 压力过程中不要有明显性能下降

 


 

 

单元测试

http://zh.wikipedia.org/zh-cn/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95 

 

单元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。单元测试主要是用来检验程式的内部逻辑,也称为个体测试、结构测试或逻辑驱动测试。通常由撰写程式码的程式设计师负责进行。

 


 

集成测试

http://zh.wikipedia.org/zh-cn/%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95

 

集成测试又称组装测试,即对程序模块采用一次性或增殖方式组装起来,对系统的接口进行正确性检验的测试工作。集成测试一般在单元测试之后、系统测试之前进行

 


 

系统测试

http://zh.wikipedia.org/zh-cn/%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95

 

系统测试是将需测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素及环境结合在一起测试。

在实际运行(使用)环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或与之矛盾的地方。

 


 

回归测试

http://zh.wikipedia.org/zh-cn/%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95

 

回归测试是软件测试的一种,旨在检验软件原有功能在修改后是否保持完整。

 


 

 

 

 

 


 

框架

http://zh.wikipedia.org/zh-cn/%E6%A1%86%E6%9E%B6

 

框架通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。

简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作。或者说就是使用别人搭好的舞台,你来做表演。

 


 

软件架构

http://zh.wikipedia.org/zh-cn/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84

 

软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

 


 

框架和架构区别

 

http://parra.javaeye.com/blog/480255

 

框架是一种特殊的软件,它并不能提供完整无缺的解决方案,而是为你构建解决方案提供良好的基础。框架是半成品。典型地,框架是系统或子系统的半成品;框架中的服务可以被最终应用直接调用,而框架中的扩展点是供应用开发人员定制的“可变化点”。
软件架构不是软件,而是关于软件如何设计的重要决策。软件架构决策涉及到如何将软件系统分解成不同的部分、各部分之间的静态结构关系和动态交互关系等。经过完整的开发过程之后,这些架构决策将体现在最终开发出的软件系统中;当然,引入软件框架之后,整个开发过程变成了“分两步走”,而架构决策往往会体现在框架之中。

 

 

http://zhidao.baidu.com/question/55067229.html?fr=ala0

 

构架和架构也就是通常所说的软件体系结构(software architecture).

体系结构一般包括三个部分:

1、构件,用于描述计算;

2、连接器,用于描述构件的连接部分;

3、配置,将构件和连接器组成一个有机整体.

对体系结构比较严谨比较认可的定义可参见<软件工程技术概论>(科学出版社).

 

体系结构与框架(Framework) 的区别与联系如下:
1、呈现形式不同.体系结构的呈现形式是一个设计规约,而框架则是程序代码.
2、目的不同.体系结构的首要目的大多是指导一个软件系统的实施与开发;而框架的首要目的是为复用.因此,一个框架可有其体系结构,用于指导该框架的开发,反之不然.
3、有种特殊的体系结构,DSSA(领域特定体系结构)其首要目的也是为了复用.
4、有个叫体系结构风格的东西,将它用程序代码实现后就成了Corba,COM之类的东西,它们俩叫体系结构框架,也叫中间件集成框架,又有人愿意叫它对象中间件。

 


 

 

 

 

 

 


 

软件开发步骤

需求分析 | 软件架构 | 软件设计 | 软件编程 | 软件测试 | 软件部署

 


 

软件开发模式

敏捷开发 | Cleanroom | 迭代式开发 | RAD | 统一过程 | 螺旋模型 | 瀑布模型 | 极限编程 | Scrum

 


 

软件开发辅助领域

配置管理 | 文档编写 | 质量管理 | 项目管理 | 使用者经验设计

 


 

软件开发工具

编译器 | 除错器 | 性能分析 | GUI设计 | 集成开发环境