技术分享 | 想测试入门就必须要懂的软件开发流程

简介: 技术分享 | 想测试入门就必须要懂的软件开发流程

从事软件测试行业,每天面对的被测对象都是软件。如果想要更好的去完成测试工作,首先需要对被测对象,也就是对软件要有基本的了解。

软件

与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。

程序好理解,就是可以操作的产品。比如 wps、微信、QQ、网页等等这些都是程序。比如说需求文档、设计文档、用户手册这些东西都属于文档。在页面中展示的,还有用户输入的内容这些都是数据。

所以说程序、文档、数据这三个结合起来,就是完整的软件。

软件开发流程的演变

流程的演变其实就是软件开发模型的演变过程。

软件开发模型就是在软件开发当中,逐渐总结了很多的经验,这些经验经过提炼总结就变成了开发模型。比如最开始的瀑布模型,后来到了敏捷开发模型,一直发展到现在最火的 DevOps 模型。

下面,分别介绍一下这几种开发模型。

传统瀑布模型

瀑布大家都熟悉,水是从上到下的流下来的。那瀑布模型也是一样,像水流一样从上往下一步一步进行的。

需求分析

不管做任何事情,分析的工作是肯定是必不可少的。瀑布模型里面也是这样,首先要做的就是需求分析。

需求文档是产品人员从用户那里了解并搜集到的。了解清楚用户想要什么之后,再把它细化成为一个文档。文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。有了这个文档,产品的 UI 界面、功能就都确定下来了。

设计

需求分析之后就开始做设计,需要设计的包括两个方面:

  • 界面设计:UI 设计师根据需求设计出来前端界面的一个设计稿
  • 程序设计:设计基本业务处理流程,模块怎么划分,接口的规范等等

都设计好了之后,开发人员就可以进入编码的阶段了。

编码

在软件编码阶段,开发会根据设计好的方案,把这些方案通过代码去进行实现。

实现

实现就相当于开发的代码已经实现了需求里面的这些功能了。

测试

实现之后测试人员就可以介入了。这就是瀑布模型的流程,有了代码,再去做测试。

发布维护

测试工作完成之后,再发布上线,并且继续维护产品。

特点

在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,当前活动的工作结果需要进行验证。

瀑布模型是线性模型的一种。它在所有的开发模型当中占有重要的地位,是所有其他模型的一个基础。其他的模型都是根据这个线性模型演变过来的。

瀑布模型的优点很明显,开发的各个阶段比较清晰,强调早期计划及需求调查,比较适合需求稳定的产品开发。

但是因为开发模型是线性的,增加了开发的风险,所以早期的错误可能要等到开发后期的阶段才能发现。

为了解决瀑布模型里面的这些问题,后面又慢慢发展出来了别的开发模型。

敏捷开发模型

敏捷开发模式是一种从 90 年代开始逐渐引起广泛关注的一些新型软件开发方法。这种开发模型更适用于需求频繁变化和需要快速开发的场景。

常见的敏捷开发模型有 XP 和 Scrum,下面分别介绍下这两种开发模型。

XP 极限编程

XP(eXtreme Programming)是一种近螺旋式的开发方法。它是把复杂的开发过程分解为一个个相对比较简单的小周期。在每一个周期里面,项目人员和客户都可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,而且可以根据实际情况及时地调整开发过程。


在上图中可以看出,极限编程是从 3 个维度去组织开发流程的。

编程方法

首先是编程方法这个维度。在这个纬度当中,对开发人员的开发方法做出了规定。

  • 简单设计:XP 要求用最简单的办法实现每个小需求。这些设计只要能满足客户在当下的需求就可以了,不需做更高深的设计,这些设计都将在后续的开发过程中可以不断地调整和优化。
  • 结对编程:指代码由两个人一起完成。一个人主要考虑编码细节。另外一个人主要关注整体结构,不断的对第一个开发写的代码进行评审。
  • 测试驱动开发:测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码。测试代码编写好了之后,再去编写可以通过测试代码的功能代码。这样就可以让测试来驱动整个开发过程的进行。这样做,有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性。
  • 重构:XP 强调简单的设计,但简单的设计并代表是没有任何结构的流水,也不是缺乏重用性的程序设计。XP 提倡重构代码,主要是努力减少程序和设计中重复出现的部分,增强程序和设计的可重用性。

小组实践

小组实践是从团队合作的维度去规定工作方法。

  • 代码集体所有:代码集体所有意味着每个人都对所有的代码负责。反过来又意味着每个人都可以更改代码的任意部分。
  • 编码标准:因为大家可以都可以改代码,那开发小组中的所有人都需要遵循一个统一的编程标准。这样所有的代码看起来好像是一个人写的。因为有了统一的编程规范,每个程序员更加容易读懂其他人写的代码,这是实现代码集体所有的重要前提之一。
  • 稳定高速的步伐:团队只有持久才有获胜的希望。可以把项目看作是马拉松长跑,而不是全速短跑。需要团队成员保持长期稳定的工作节奏。
  • 持续集成:集成就是要把大家的代码合并到一起。团队开发成员需要经常集成它们的工作。每次集成都通过自动化的构建(这其中还包括了自动化测试)来验证,这样才能尽快地发现集成错误。
  • 隐喻:为了帮助每个人一致清楚地理解要完成的客户需求、要开发的系统功能,团队需要用很多形象的比喻来描述系统或功能模块是怎样工作的。比如,对于一个搜索引擎,它的系统隐喻可能就是“一大群蜘蛛,在网上四处寻找要捕捉的东西,然后把东西带回家中。”

交付和管理

最后一个就是发布管理的维度了。交付是把产品交到客户手上。发布就是把产品上线,让用户可以访问。总体来说,交付和发布都是让用户可以拿到产品去使用。

  • 小规模发布:那规模有多小呢?就是每个迭代 1-3 周时间。在每个迭代结束的时候,团队交付可运行的,经过测试的功能,这些功能可以马上投入使用。
  • 计划游戏:预测在交付日期前可以完成多少工作,确定现在和下一步该做些什么。不断的回答这两个问题,就是直接服务于如何实施及调整开发过程。
  • 完整的团队:每一个项目贡献者都是“团队”完整的一部分。这个队伍是围绕着一个每天和队伍坐在一起共同工作的商业代表——“客户”建立起来的。
  • 现场客户 :在 XP 中,“客户”并不是为系统付账的人,而是真正使用该系统的人。XP 认为客户应该时刻在现场解决问题。

从 XP 开发模型可以看出来,里面开发和客户是占据主导地位的。测试的工作基本都是通过自动化的方式来进行。比如在编码过程中的测试驱动开发这个环节,还有持续集成中也包含了自动化的测试。总体而言这个开发模型对开发和测试的要求都是非常高的,团队里面的人必须都有非常高的水平,这个模型才能运转成功。这是开发小型项目的一个理想状态下的情况,比较难实现。

SCRUM

在 Scrum 模型里面,最基本的概念是 Sprint。Sprint 其实就是一个冲刺,通俗一点来说就是一个迭代周期。

整个项目开始之前,会先有一个产品 Backlog。使用产品 Backlog 来管理产品的需求的。它是整个项目的概要文档。Backlog 是一个按照商业价值排序的需求列表,列表条目的体现形式通常为用户故事。

Scrum 团队从产品 Backlog 中挑选最高优先级的需求进行开发。挑选的需求在 Sprint 计划会议讨论。

在 Sprint 上经过讨论、分析和估算得到相应的任务列表,可以称为 Sprint Backlog。

Scrum 中,整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个 Sprint,每个 Sprint 的建议长度是二至四周。

在每个迭代周期中,Scrum 团队会举行每日站会。在每日站会上检验 Sprint 目标的进展,做出调整,从而优化次日的工作。

每个迭代结束时,Scrum 团队将递交潜在可交付的产品增量。

在每个迭代周期最后,需要进行一次 Sprint 评审会议,让团队向产品负责人和利益相关者展示已完成的功能。

Sprint 评审会议结束之后,下一个 Sprint 计划会议之前,需要进行 Sprint 回顾会议。回顾会议是要找出 Sprint 过程中,哪些地方执行的很好,哪些地方执行的不好,团队可以做哪些改进。

这就整个 SCRUM 模型的工作流程。在每一个 Sprint,也就是一个迭代周期中,其实是一个小的瀑布。在每个迭代周期中,都会完成一个从需求分析 - 设计 - 编码 - 测试 - 上线这样的完整流程。不同的迭代周期可能是部分重合的。比如说第一个迭代周期进行到了测试阶段,第二个迭代周期的需求分析可能已经开始了。这样不停的循环迭代往下进行。

DevOps开发模型

DevOps(Development 和 Operations 的组合词),它涉及软件在整个开发生命周期中各个阶段。

DevOps 是非常关注开发(Dev)、运维(Ops)、以及测试人员之间沟通合作的一个开发模型。

在 DevOps 里,是通过自动化的软件交付的流程,来让构建、测试、发布软件能够更加地快捷、频繁和可靠。

它的出现其实就是因为现在的软件需要更加快速的上线,如果想实现每天都能上线新功能。但是敏捷开发模型,它再快也得一周的时间,实现不了这个需求。所以大家意识到了,为了能够更加快捷的上线,开发、测试和运维工作必须紧密合作。所以说 DevOps 更适合使用在需求频繁变化、开发、测试运维都需要敏捷的场景下。

DevOps生命周期

下面来看看 DevOps 模型中又包含了哪些阶段。

持续开发

这是 DevOps 生命周期中软件不断开发的阶段。与瀑布模型不同的是,软件可交付成果被分解为短开发周期的多个任务节点,在很短的时间内开发并交付。

这个阶段包括计划、编码和构建阶段

  • 计划阶段:可以使用一些项目管理工具,比如 JIRA 来管理整个项目
  • 编码阶段:可以使用 Git 或者 SVN 来维护不同版本的代码
  • 构建阶段:使用打包工具,比如 Maven 工具,把代码打包到可执行文件中

持续测试

在这个阶段,开发出来的软件会被持续地进行测试。

对于持续测试,可以使用一些自动化测试工具,比如说 Selenium、Appium。Selenium 是做 web 自动化的工具,Appium 是做 app 自动化的工具。自动化的工具还需要配合测试框架一起去使用,比如 Java 中的 TestNG、JUnit,python 中的 unittest、pytest。有了这些自动化测试的工具,就可以持续的对开发出来的软件进行测试了。

在这个阶段,使用 Docker 容器实时模拟“测试环境”也是非常方便的。

持续集成(CI)

一旦新提交进来的代码测试通过,就会不断地与现有代码进行集成。这就是持续集成的过程了。

这个时候可以使用 Jenkins,这是现在最流行的持续集成的工具。使用 Jenkins,可以从 Git 库提取最新的代码,并生成一个构建,最终可以部署到测试或生产服务器。

还可以把 Jenkins 设置成发现 Git 库里有新提交的代码,就可以自动触发新构建,也可以在单击按钮时手动触发一个新的构建。有了 Jenkins 这款利器,就可以非常方便的完成持续集成的工作。

持续部署

持续集成完成之后,就可以直接把代码部署到各种环境中。在这个阶段,需要保证只有通过了持续测试的正确代码,才能被部署到服务器上。

因为如果上线了新功能,产品就会有更多用户去使用。这样的话,运维人员可能还需要扩展服务器来容纳更多用户。如果可以实现持续部署,就可以通过配置管理工具快速、频繁地执行部署任务。让产品能够更快的和用户见面。这就打通了开发、测试到上线的一个快速通道。

在这个阶段,容器化工具 Docker 也发挥着重要作用。它可以帮助保持各种环境是一致的。比如说测试环境、生产环境等等这些,因为环境的不同也可能会导致一些 Bug 出现。

持续监控

部署上线之后,就到了持续监控的阶段。这是 DevOps 生命周期中非常关键的阶段。通过线上的监控可以帮助提高软件的质量,监控软件的性能。

这里也会涉及运营团队的参与,他们也会监控用户在使用产品过程中的一些错误行为,为以后需求的进一步优化提供数据支持。

在这个阶段,可以使用 ELK Stack。这是一个搜集线上数据,并且分析展示的平台。通过这个工具可以自动的去搜集用户的动作,产品的一些线上的 bad case,通过分析这些数据,可以为产品将来的发展方向做出指导。

上面这些内容就是 DevOps 整个的生命周期。


相关文章
|
2月前
|
jenkins 测试技术 应用服务中间件
【专业测试技能】全流程掌握:部署测试环境的策略与实践
本文分享了关于部署测试环境的策略与实践。文章讨论了部署测试环境的全过程,包括服务如MySQL、Redis、Zookeeper等的部署,以及解决服务间的依赖和兼容问题。文中还介绍了使用Jenkins、Docker等工具进行部署的方法,并通过实战案例讲解了如何创建和管理Jenkins Job、配置代理服务器Nginx、进行前后端服务的访问和优化。最后,作者强调了提问的重要性,并鼓励大家通过互联网解决遇到的问题。
67 2
【专业测试技能】全流程掌握:部署测试环境的策略与实践
|
2月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
本文介绍了Python中的循环语句,包括while和for循环的使用,range()函数的运用,以及continue、break和pass关键字的说明,同时提出了关于while循环是否能与成员运算符结合使用的思考。
38 1
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
|
2月前
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
33 1
|
1天前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
8 0
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
28天前
|
运维 测试技术
拆分软件测试流程,一张图秒杀所有面试
本文主要介绍了软件测试流程的核心内容,包括需求分析、测试用例编写、测试执行、缺陷提交及回归测试等关键步骤。以迭代测试为例,详细说明了每个环节的具体操作和注意事项,并提供了一张测试流程图以便理解。测试流程确保了软件质量,是面试中常见的考察点。
43 7
拆分软件测试流程,一张图秒杀所有面试
|
18天前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
15天前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
40 1
|
1月前
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
2月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之if条件控制
Python中的流程控制语句if条件控制,涵盖了比较运算符、成员运算符、身份运算符、逻辑运算符的使用,if语句的嵌套,以及如何使用input和print函数进行交互式编程练习。
20 1
Python接口自动化测试框架(基础篇)-- 流程控制之if条件控制
|
13天前
|
测试技术 UED 开发者
软件测试的艺术:从代码审查到用户反馈的全景探索在软件开发的宇宙中,测试是那颗确保星系正常运转的暗物质。它或许不总是站在聚光灯下,但无疑是支撑整个系统稳定性与可靠性的基石。《软件测试的艺术:从代码审查到用户反馈的全景探索》一文,旨在揭开软件测试这一神秘面纱,通过深入浅出的方式,引领读者穿梭于测试的各个环节,从细微处着眼,至宏观视角俯瞰,全方位解析如何打造无懈可击的软件产品。
本文以“软件测试的艺术”为核心,创新性地将技术深度与通俗易懂的语言风格相结合,绘制了一幅从代码审查到用户反馈全过程的测试蓝图。不同于常规摘要的枯燥概述,这里更像是一段旅程的预告片,承诺带领读者经历一场从微观世界到宏观视野的探索之旅,揭示每一个测试环节背后的哲学与实践智慧,让即便是非专业人士也能领略到软件测试的魅力所在,并从中获取实用的启示。