在软件开发流程中运用单元测试和功能测试

由于受到极限编程的影响,在最近的几年时间里单元测试逐渐成为我软件开发过程中一个不可或缺的重要组成部分。极限编程要求我们对我们所完成的每一项功能都要进行单元测试并且要很好的管理这些测试,我们不应该在所有的单元测试通过之前去集成任何新的功能。这种做法的好处就是可以让开发人员对自己所写的代码充满信心(而不是盲目的毫无根据的自负)。

  最开始我认为既然已经有了单元测试了,就没有必要再去花时间在功能测试上了,可我现在知道这是一个错误的想法:单元测试和功能测试是有很大的不同的。我花了很长的时间才了解到单元测试和功能测试的差异所在,我也知道了怎样更好的运用单元测试和功能测试来完善我们的软件开发流程。

  这篇文章探究了单元测试和功能测试的不同点以及我们可以怎样运用这两种测试来支持我们的软件开发。

  测试和软件开发过程

  作为一个开发人员来讲,测试是相当重要的,我们必须要坚持在整个软件开发流程中测试我们的代码,而不仅仅把测试作为软件开发的一个特殊阶段的产物:测试绝对不应该成为你在软件提交前一天才开始的一个例行公事。你怎么才能知道我们的软件已经可以发布了?你怎么知道我修正了这个小bug的时候没有引发一个更严重的系统bug?你怎么知道当前的系统是否可以扩展一些现在没有想到功能呢?测试!单元测试和功能测试必须成为我们在软件开发流程中的一个有机组成部分。

  单元测试应该成为你写代码的一个核心部分,尤其是在项目时间比较紧张但是我们仍然要保证质量的时候。单元测试十分重要,你甚至应该在你的代码写出来之前就应该完成单元测试。

  单元测试:

  -》有助于尽可能地重现最有效的设计

  -》有助于提供一个最佳的文件组织结构

  -》有助于确定一个类是否完成

  -》让开发人员对自己的代码充满信心

  -》是快速重构的基础

  单元测试有助于形成系统化的并可以不断改进的设计文档,这些文档在软件开发的过程中有着极其重要的意义。大多时候将用例文档化形成一个类要比仅仅罗列一大堆编码的实际用例好,看看单元测试:它提供一系列有规律的输入或数据,用一系列的实际用例来告诉我们所写的类做了些什么。这样的话这个设计文档就总是最新的,因为我们必须通过单元测试。

  你应该在写代码之前写单元测试,这样做的好处就是为自己提供了一个可以测试的设计方案,这就可以帮助你想的更加完善,这样会使设计变得简单。你不必担心将来会怎样,也不必花时间去实现一些不必要的功能。首先写单元测试还有助于帮你了解代码在什么时候完成:当所有的测试都通过之后,我们的任务也就完成了。

  最后,单元测试让你对自己代码有高度的自信,这有助于我们做出更加好的产品。当你修改了自己的代码之后,我们来运行我们的测试,如果有问题的话我们可以迅速找出来我们的修改产生了在什么地方哪些破坏。

  功能测试甚至比单元测试更加重要,因为它是用来检测我们的系统是否达到可以发布的要求。功能测试是用来确定我们的系统是否是一个可用的系统。

  功能测试:

  -》确定是否实现用户需求的一个有效方法

  -》让用户和开发人员了解到我们的系统已经实现了这些用户需求

  传统的开发过程是从实际使用中确定是否实现用户需求的,通常人们需要花费大力气才可以搞清楚这些实际用例并设法概括它们,当他们完成了这些工作之后他们手中无非多了一张纸而已,而功能测试就像是自己确定实际用例一样。极限编程阐述了这些观念,极限编程需要提前定义这些功能(这一过程需要项目组和用户共同完成),而功能测试就是它的产物,如果没有功能测试的话,我们不可能完成的很漂亮。

  功能测试可以检查出单元测试遗留下的一些软件缺陷,让开发人员对自己的代码更加有信心,因为单元测试仍然会遗留下很多bug,它可能会覆盖到代码的各个部分但是却不能覆盖到系统的各个部分。功能测试可以揭露一些单元测试没有涉及的问题。当然一个自动化的可持续运行的功能测试不可能找出系统中的所有问题,但它可以找出更多的单元测试找不到的bug。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-10 20:57:36

在软件开发流程中运用单元测试和功能测试的相关文章

《Python语言程序设计》——2.13 软件开发流程

2.13 软件开发流程 关键点:程序开发周期是一个包括明确需求.分析.设计.实现.测试.部署和维护的多步骤过程. 开发软件是一个工程过程.软件产品,无论是大还是小,它们都有相同的周期:明确需求.系统分析.系统设计.实现.测试.部署和维护,如图2-2所示. 明确需求是寻求理解软件要解决的问题和建立关于软件系统需要完成任务的详细文档的一个正式流程.这个阶段需要用户和开发者之间的进行紧密的交互.本书中大多数例子都很简单,并且它们的需求陈述很明确.然而,在现实世界中,问题并不总是定义明确.开发者需要保持

MBTI在软件开发团队中的应用

人绝不是一种资源.一方面我们不可能因人设岗,另一方面也不能忽略人性的差异.面对问题时,不要总是单纯地从人的态度或品德上查找问题,而是要反思人事安排和流程建设上的不足.奢望一个人改掉他的缺点,还不足充分发挥他的优点. 前言 MBTI将人区分为16类人格特质,我无法断言是否真得能表达出人的真实一面,毕竟只是统计性的结果.我的思考并不在于它归类的结果,而在于它的归类方法.   在团队合作中,各种各样的情绪.喜好.偏见一直在影响着我们对于人和事的判断.我们强调第一印象的重要性,正是因为一旦被贴上标签,就

软件开发实践中的入队列和出队列操作的C代码示例

概述 最近有在校的学生朋友在问我,数据结构中的队列在实际的软件开发项目中有什么样的用处. 大家都知道,队列的特点是先入先出,即数据是按照入队列的顺序出队列的.在实际的软件开发项目中,当一个中间模块需要接收和发送大量的消息时,队列就可以大展身手了.我们可以将接收到的数据存储在一个全局队列中,然后在另外的程序流程中将数据从同一个全局队列中取出来,经过一定的处理之后将消息发送到另外的模块.这样做可以降低程序的性能瓶颈. 本文用实际的C代码示例了简单的数据入队列和出队列的方法,大家可据此了解队列的实际用

转载:敏捷的软件开发流程

速度是企业竞争致胜的关键因素,软件项目的最大挑战在于一方面要应付变动中的需求,一方面要在紧缩的时程内完成项目,所以软件团队除了在技术上必须日益精进,更需要运用有效的开发流程,以确保团队能够发挥综效.这正是 Agile Process (敏捷的软件开发流程) 于近年来兴起的主要原因,本文将介绍数种广为接受的软件开发流程,及其在运用上的建议. Agile Process - 敏捷的开发流程 几乎所有的软件项目都会在起始阶段面临选择开发流程的困难,一种是完备的开发流程,另一种是简易轻便的流程.虽然我们

概述开发流程中的性能生命周期背后的基本概念

性能是 IT 团队常常寻求咨询建议的一个领域,无论是寻求一般指导,还是解决威胁到应用程序或网站稳定性的特定关键性能问题.尽管二者都是讨论网站性能的明确.有效的原因,而不太明显的原因很可能正是 "性能" 的含义.影响它的因素.谁需要参与改进它,而且可能最重要的是,为什么它是开发流程中不可或缺的一部分. 本文概述了性能生命周期背后的重要理念,从项目管理角度和执行角度帮您准备好应对在 Web 项目开发中通常最具挑战性的.至关重要且被忽视了的元素之一.要解决的问题包括: 为什么业务支持者和 I

在开发流程中嵌入安全测试

ContinuumSecurity创始人Stephen de Vries,在Velocity Europe 2014大会上提出了持续且可视化的安全测试的观点.Stephen表示,那些在敏捷开发过程中用于将QA嵌入整个开发流程的方法和工具都能同样的用于安全测试.BDD-Security是一个基于JBehave,且遵循Given-When-Then方法的安全测试框架. 传统的安全测试都遵循瀑布流程,也就是说安全团队总是在开发阶段的末期才参与进来,并且通常需要外部专家的帮助.在整个开发流程中,渗透测试

在软件开发领域中代码审查是好事还是坏事

在软件开发领域,代码审查看起来是一个少有争议.相当平和的话题. 主流观点普遍认为代码审查是个好东西.有些公司或组织甚至强制要求把代码互审作为必须的流程. 审查是一种捕捉bug和问题的好措施.通过代码审查能够分享领域知识,提高代码质量.代码审查提供了一个对团队进行监控,教育和强化的好机会. 至少理论上是这样的- 当挽起袖子开干,当面对真正的项目计划产生的压力时,代码审查很有可能转而变成一件坏事. 审查是一种能够导致憎恨和分裂的活动.它能使人对编写的代码是否正确产生怀疑,会激起人们为他们自己的编码标

软件开发流程

开发流程 需求分析 1.相关系统分析员向用户初步了解需求,然后用word列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面. 2.系统分析员深入了解和分析需求,根据自己的经验和需求用WORD或相关的工具再做出一份文档系统的功能需求文档.这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能. 3.系统分析员向用户再次确认需求. 概要设计 首先,开发者需要对软件系统进行概

谈在软件开发管理中的误区及对策

软件行业在现在的众多行业里是一个极具挑战性和创造性的行业,体现了软件开发者的智慧和汗水,同时软件开发是一项复杂的系统工程,牵涉到许多方面的因素,在实际工作中,经常会出现各种各样的问题,甚至会面临失败.如何总结.分析失败的原因,得出有益的教训,对于项目开发人员来说,是在今后的项目中取得成功的关键. 一.软件开发中实行项目管理的意义 项目管理就是在项目活动中运用一系列的知识.技能.工具和技术,以满足或超过相关利益者对项目的要求,实际上就是通过项目各方干系人的合作,把各种资源应用于项目,以实现项目的目