`
deepinmind
  • 浏览: 452948 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
1dc14e59-7bdf-33ab-841a-02d087aed982
Java函数式编程
浏览量:41740
社区版块
存档分类
最新评论

测试即是文档

阅读更多
文档需要全面,实时更新,并且易懂。我说的全面是指除了介绍程序的功能外还应该覆盖到代码中一些重要的地方。对很多人来说文档的重要性不言而喻,但很难保持它的及时性和准确性。糟糕的文档的后果通常会浪费更多的资源和时间。往往都是出于一些错误的原因而编写的文档。

要求文档的一些原因

有很多原因导致我们需要编写文档。团队经常会由于一些制度上的要求而编写文档,或者就是纯粹出于无知。下面是一些编写文档的错误的理由:

- 有人认为文档和项目的成败息息相关。
- 文档能够证明某些人的存在。
- 需求方除了文档也不知道要什么好
- 要你提供文档的人也就是求个安心,知道事情都OK了
- 工作流程提示说,你该创建文档了

文档都是过时的

软件文档的一个主要的问题就是它通常都不是最新的。代码的某个部分可能发生了改动,但是文档却体现不出这个情况。这句话适用于几乎所有的文档,影响最大的其实还是需求和测试用例。不管你多努力,文档的过期无可避免。


文档对谁有用?

取决于不同的受众,文档的类型和格式也会相应地有所不同。开发人员,测试人员,客户,主管,最终用户都是文档的最大的潜在用户。

开发人员

开发人员不应该依赖于文档,因为它们通常都是过时的。除此之外,没有什么文档能比代码本身更能提供详细以及最新的信息了。如果你想知道某个方法做了些什么,看下这个方法吧。不确定某个类是干嘛的?看一眼它。通常只有代码写的太差了才需要给它添加文档。

使用代码本身作为文档,这并不代表不需要其它的文档了。关键是要避免冗余。如果看一下代码就能获取到系统的详细信息,那么还可以有一些其它的文档来提供快速导读以及更高层面的一个概述的功能。代码本身的文档是回答不了这个系统是干嘛的或者这个系统用到了什么技术啊这种类型的问题。大多数情况下,对于开发人员而言,一个简单的README.md就足够他快速入门的了。像项目描述,环境配置,安装,构建及打包指令这些东西对项目的新成员来说非常有用。但那之后,代码就是你的圣经。产品代码提供了所有需要的详细信息,而测试代码则是作为产品代码的内在意图的一个描述。测试用例就是可执行的文档,而TDD(测试驱动开发)就是实现它的最常见的方式。

假设你用了某种持续集成的方式,如果测试-文档(这里测试就是文档,文档也是测试)中有一部分不对了,这个用例会执行失败,它将会很快得到修复。持续集成解决了测试-文档不正确的问题,不过它不能保证所有功能都是有文档的。由于这个原因(当然也有其它原因)测试-文档应当用TDD的方式来创建。如果在代码开发前,所有的功能都定义成测试用例,那么测试用例就能作为开发人员的一个完备的最新的文档了。

那团队的其它成员怎么办?测试人员,客户,主管,还有其它非码农呢,他们可能无法从产品和测试的代码中获取到所需要的信息。


测试人员

最常见的两种测试就是黑盒测试和白盒测试。这个区分很重要,因为它将测试人员也分成了两类,一拨是知道怎么写代码的,至少是能读懂代码的(白盒测试),另一拨是不懂代码的(黑盒测试)。有的时候测试人员也两样都干。不过一般而言,测试都是不懂代码的,因此对开发人员有用的文档对他们来说是没意义的。如果说要从代码中剥离出文档的话,单元测试可不是什么合适的东西。这就是BDD(行为驱动开发,Behavior Driven Development)存在的价值了。它能为非开发人员提供所需的文档,但同时还兼备TDD和自动化的优点。

客户

客户需要能够给系统增加新的功能,同时他们也需要获取到关于当前系统的重要信息。给他们的文档可不能太技术了(代码当然不行),同时也得是最新的。行为驱动开发(BDD,Behavior Driven Development)的故事和场景应该是提供这类文档的最佳方式了。它能够作为验收标准(在代码开发前),还可以反复的执行,同时还能用自然语言编写,这使得BDD不仅仅能够保证文档是最新的,同时它对那些不想看代码的人来说也非常有用。

可执行的文档

文档是软件不可或缺的一部分。正如软件的其它部分一样,它也得经常进行测试,这样才能保证它是准确的并且是最新的。实现这个最有效的方法就是将这个可执行的文档能够集成到你的持续集成系统里面。TDD是这个方向的不二选择。从较低层面来看的话,单元测试就非常适合作为这个文档。另一方面来说的话,在功能层面来说BDD是一个很好的方式,它可以使用自然语言来进行描述,这保证了文档的可读性。

原创文章转载请注明出处:http://it.deepinmind.com

英文原文链接
4
1
分享到:
评论
1 楼 elgs 2014-05-16  
太同意这个观点了。

相关推荐

    经典测试计划模版测试文档

    1. **简介**:这部分明确了测试计划的目的,即确定测试对象、列出测试需求、推荐测试策略、估算资源和工作量,并列出测试项目的可交付成果。目的是为了保证测试活动与项目目标一致。 2. **背景**:描述测试对象的...

    软件测试验收标准文档

    《软件测试验收标准文档》是软件开发过程中至关重要的一步,它是确保软件质量、功能完备性和安全性的重要依据。本文将详细解读这份文档中的关键知识点,并展开讨论相关领域。 首先,验收标准文档的核心在于对软件...

    测试计划参考文档

    8. **通过准则**:定义测试成功的标准,即软件达到何种状态才被认为是测试合格的。 #### 四、缺陷分类标准 测试计划中通常会包含一套缺陷分类标准,用于评估缺陷的严重程度和优先级,以便于资源的有效分配和问题的...

    软件测试入门word文档

    测试并非单纯为了找出软件中的错误,而是为了验证软件是否能够按照预期工作,即“Do the right thing”,同时也确保软件以正确的方式执行任务,即“Do it right”。这是质量保证的基础,确保软件产品的可靠性和有效...

    软件测试技术ppt文档

    本PPT文档主要涵盖了软件测试的基础知识,包括质量的概念、测试方法、测试工具和测试流程。 首先,质量在不同的时代有着不同的理解。早期,质量被视为通过检测来识别的,即"QI"(Quality Inspection)。随着时代的...

    3个公司的测试计划文档

    其次,三普销售助手标准版测试计划可能专注于一个特定的应用程序,即帮助销售人员提高效率的工具。测试计划可能包含对用户界面、业务流程、数据处理和错误处理的测试。此外,还可能涉及集成测试,以确保销售助手与...

    性能测试报告文档

    采用录制回放的方法,即首先捕获用户操作产生的数据包,然后通过LoadRunner创建虚拟用户来模拟这些操作,以测试系统在不同负载下的表现。这种方法可以精确地控制测试条件,使得结果更加可靠。 ### 测试场景设计 ...

    自动化测试使用说明文档

    对于maven项目,还需要创建一个独立的profile,即autotest,用以配置自动化测试环境,比如数据库连接和memcached等,以避免与其他开发环境的干扰。对于多分支并行开发的情况,测试用例也被要求按照项目分支来拉取,...

    0927测试提交文档.zip

    这是软件测试中的一个初步阶段,主要目的是确认软件的基础功能是否正常,即核心模块是否能正常启动而不崩溃。如果这个阶段通过了,那么可以继续进行更深入的测试,否则,需要先修复关键问题。在这个案例中,“药品与...

    关于软件测试的规范文档

    5. 测试顺序:通常遵循“先浅后深,先简后繁”的原则,即先进行简单的功能测试,再进行复杂的场景测试,先验证基本功能,再逐步深入到边缘情况和异常处理。 二、测试工作流程 1. 测试准备:包括理解需求、编写测试...

    外包测试文档就是这样啦

    2. **合规性证明**:在许多行业,尤其是医疗保健、金融和政府项目中,外包测试文档是符合法规要求的关键文件,证明了测试过程的完整性和有效性。 3. **风险管理**:通过详细规划和记录测试活动,外包测试文档帮助...

    网站测试报告 文档.doc

    总体而言,网站测试报告是评估和改进网站质量的关键文档,它确保了网站在上线前满足用户需求和业务目标,降低了后期维护和升级的成本。通过深入分析测试结果,开发团队可以发现潜在问题,及时修复并优化网站,从而...

    TDD 测试驱动开发 文档 详细

    1. TDD的基本原则:红-绿-重构,即先编写失败的测试(红),然后编写代码使测试通过(绿),最后重构代码以优化设计(重构)。 2. 单元测试的基础:了解如何编写有效的单元测试,包括断言、隔离和覆盖所有可能的...

    测试用例文档(案例)

    在IT行业中,测试用例文档是软件开发过程中的重要组成部分,尤其对于后台管理系统而言,确保其功能的稳定性和正确性至关重要。本案例聚焦于后台管理项目的第一期功能模块,通过详细的测试用例来验证系统是否满足预定...

    单元测试文档单元测试文档

    单元测试文档 单元测试是一种软件测试方法,目的是在整合程序代码到系统的其余部分之前先测试,以便找出程序代码中的 bugs。单元测试的主要目的是为了检查一个单元的结果是否是预期的,从而确保程序代码的正确性和...

    测试文档与程序员交互

    ### 测试文档与程序员交互的关键知识点 #### 一、明确问题与解决方案 - **核心理念**:撰写测试文档之前,必须清楚地理解所要解决的问题,并根据问题选择合适的解决方案。 - **实施步骤**: - **问题识别**:确定...

    国外的一份很不错的测试文档

    这篇文档是一份详尽的测试计划,主要针对JAVA类程序的底层测试。文档涵盖了测试的各个阶段,从引言、定义、测试项目到角色和职责,为全面而系统的软件测试提供了指导。 【测试目的】 文档的1.1节明确了编写测试...

    游戏测试文档

    - **QA (Quality Assurance)**: QA,即质量保证,根据ISO8402:1994的标准定义,是为了确保实体能满足品质要求而采取的一系列有计划、有系统的活动。在企业推行ISO9000标准时,通常会设立专门的QA部门或岗位,以执行...

    功能测试功能需求文档.doc

    Service Manager System V9.2 用户交互管理模块功能测试功能需求文档 本文档主要介绍 Service Manager 系统 9.2 版本用户交互管理模块的功能需求,包括用户交互管理流程、功能模块需求等。 1. 用户交互管理流程 ...

    测试流程 及 测试规范 文档,以及BUG提交文档

    测试规范文档主要定义了测试人员如何有效地报告、跟踪和处理问题,即BUG。以下是对这些概念的详细解释: 一、测试流程 1. **提交缺陷单**:测试人员在发现错误后,首先提交缺陷单给测试组长,此时状态标记为`new`...

Global site tag (gtag.js) - Google Analytics