【无标题】
目录
软件测试技术课程概述
软件测试技术是软件工程领域中的一项重要课程,它涵盖了从软件开发到系统运行过程中各个阶段的质量保障措施。软件测试的目标是通过模拟和验证系统在各种环境下的行为,找出并修复潜在的缺陷,确保软件产品能够符合用户需求,并能够稳定、可靠地运行。
1. 软件测试的基本概念
软件测试是一种通过执行程序来验证其是否符合规定要求的过程。它不仅包括验证软件是否正确实现了预期的功能,还包括检测软件的性能、安全性、可用性等多个方面。软件测试的核心任务是发现软件中的缺陷,帮助开发人员进行修复,确保最终交付的软件系统质量达到预期标准。
个人理解:对开发软件进行质量上的保证
2. 软件测试的分类
- 按测试开发阶段分类:
-
- 单元测试:对软件中的最小可测试单元(通常是函数或方法)进行验证,检查其是否按预期运行。
- 集成测试:当多个模块或系统组件已经完成单元测试后,进行模块间交互的验证,确保它们能够正确地协同工作。
- 系统测试:对整个软件系统进行验证,确保系统功能、性能和其他需求都符合用户的期望。
- 验收测试:由用户或客户在接收系统前进行的测试,确认软件系统是否满足其需求。
- 按测试的执行方式分类:
-
- 手工测试:由测试人员手动执行测试,适用于复杂的用户场景或无法自动化的部分。
- 自动化测试:通过编写脚本或使用工具来执行测试,适用于大规模、重复性的测试场景,能够提高效率并减少人为错误。
- 按测试的性质分类:
-
- 黑盒测试:测试人员仅关注软件的输入和输出,不考虑内部实现。主要是通过测试软件的功能性来确认其是否满足需求。
- 白盒测试:测试人员了解软件内部结构,测试时关注程序内部的工作机制,主要是为了测试程序的逻辑是否正确,功能是否实现。
- 灰盒测试:结合了黑盒和白盒测试的特点,测试人员对系统有部分了解,但不深入细节,测试过程中会关注接口、功能和代码逻辑。
- 按是否运行来划分:
- 静态:未运行,人工脱机完成,人工测试,发现代码中潜在的错误
动态:运行中的程序
按测试对象划分(也可称之为非功能测试)
- 性能测试:检查系统是否满足性能要求,如资源利用、响应时间和吞吐量2。
- 安全测试:检查系统是否存在安全隐患和漏洞2。
- 兼容性测试:检查软件在不同环境下的运行情况,如不同的硬件和软件平台2。
- 文档测试:检查文档的术语、正确性、完整性、一致性和易用性2。
按测试实施的组织
- α测试(Alpha Testing):在开发环境下由内部用户进行测试2。
- β测试(Beta Testing):由软件的最终用户在实际使用环境下进行测试2。
- 第三方测试:由开发方和用户方之间的组织进行测试2
Alpha 测试是软件测试中的一种重要类型,属于验收测试的范畴(开发者在用户旁边),以下是其详细介绍:
- 定义:Alpha 测试是在软件开发公司内部,模拟实际用户的操作环境和使用场景,由用户在开发人员的密切监控下,对软件产品进行的测试活动。
- 目的:主要是在软件产品正式发布前,尽可能地发现并修复软件中存在的缺陷、问题和不足,确保软件的功能和性能等方面满足用户的需求和期望,提高软件的质量和稳定性。
Beta 测试是软件测试中一种重要的验收测试方式,以下是其详细介绍:(预测版本)
- 定义:Beta 测试是在软件产品的开发和内部测试基本完成后,将软件产品发布给一组选定的、具有代表性的外部用户,让他们在实际使用环境中进行的测试。
- 目的:主要是在真实的用户环境中,收集软件在实际使用过程中的反馈信息,发现那些在内部测试中难以发现的问题,如与实际业务流程的适配性、在不同用户场景下的稳定性等,从而进一步完善软件产品,提高软件的质量和市场适应性。
3. 软件测试的流程
软件测试的过程通常包括以下几个阶段:
- 需求分析:
测试人员需要分析需求文档,了解系统的功能需求、非功能需求和技术约束,以便设计测试用例。 - 测试计划:
在需求分析之后,制定测试计划,明确测试的目标、范围、策略、测试环境、人员安排等内容。 - 测试设计:
根据测试计划,测试人员需要编写详细的测试用例和测试脚本,确保能够覆盖系统的主要功能和场景。 - 测试执行:
在开发完成后,执行测试用例,并记录测试结果,验证系统是否按预期工作。 - 缺陷管理:
在执行测试的过程中,发现的软件缺陷需要记录并提交给开发人员进行修复。测试人员需要对缺陷进行跟踪,验证修复的效果。 - 回归测试:
在修复缺陷后,需要重新执行之前的测试用例,确认修复没有引入新的问题。 - 测试报告:
测试结束后,生成测试报告,总结测试的结果、缺陷分析、覆盖率以及测试结论,为决策提供依据。
软件测试模型:
V模型
- 模型结构:V模型的结构形似字母“V”,由软件开发阶段和测试阶段组成,两者相互对应。从左到右,开发阶段依次为需求分析、概要设计、详细设计、编码;测试阶段分别是单元测试、集成测试、系统测试、验收测试,与开发阶段呈对应关系。
- 特点:强调软件开发的阶段性和顺序性,明确了每个开发阶段对应的测试阶段,使测试活动与开发活动紧密结合,有助于尽早发现和解决问题,提高软件质量。
- 适用场景:需求明确、稳定,软件开发过程较为规范、严谨的项目,如一些传统的企业级软件项目。
W模型
- 模型结构:W模型由两个“V”模型组成,形似字母“W”。第一个“V”代表开发过程,从需求分析、概要设计、详细设计到编码;第二个“V”代表测试过程,从需求评审、设计评审、代码审查到测试执行。在开发的每个阶段都同步进行相应的测试活动,强调测试与开发的并行性。
- 特点:增加了软件各开发阶段中应同步进行的验证和确认活动,有利于尽早发现问题,降低成本。同时,测试的对象不仅仅是代码,还包括需求、设计等,拓宽了测试的范围,提高了软件的可靠性。
- 适用场景:适用于需求不太明确、需要频繁变更的项目,如互联网产品开发等,能够快速响应需求变化,及时发现和解决问题。
H模型
- 模型结构:H模型将测试活动完全独立出来,形成一个独立的测试流程。测试流程可以在软件生命周期的任何阶段启动,只要达到了测试准备就绪点,就可以进行测试。
- 特点:强调测试是一个独立的、贯穿于整个软件生命周期的活动,不受开发阶段的限制。它具有很强的灵活性,允许在项目的任何阶段进行测试,有助于提高测试的效率和质量。
- 适用场景:适用于各种类型的软件项目,尤其是对测试独立性和灵活性要求较高的项目,如敏捷开发项目等。
X模型
- 模型结构:X模型左边描述的是针对单独程序片段所进行的相互分离的编码和测试,此后将进行频繁的交接,通过集成最终合成为可执行的程序。右边描述了已集成的代码进行测试,然后将这些可执行代码进行回归测试。此外,X模型还强调探索性测试,即不依赖于事先设计的测试用例,而是根据测试人员的经验和直觉,在测试过程中不断探索和发现问题。
- 特点:X模型突破了传统测试模型的线性思维,强调了测试的探索性和灵活性,注重对代码的多次迭代和回归测试,有助于发现更多的隐藏问题,提高软件的稳定性和可靠性。
- 适用场景:适用于需求不确定、技术难度较大、需要频繁迭代的软件项目,如一些创新性的软件产品开发等。
前置模型
- 模型结构:前置模型将测试过程分为5个阶段,包括开发和测试计划、用户需求确认、系统设计确认、编码和单元测试、系统集成和系统测试。强调在软件开发之前,先进行测试计划和测试设计,将测试活动前置到软件开发的早期阶段。
- 特点:突出了测试的前置性和主动性,通过在开发前期进行充分的测试准备和设计,能够有效降低后期测试的成本和风险。同时,强调了用户需求和系统设计的确认,有助于提高软件的可测试性和质量。
- 适用场景:适用于对软件质量要求较高、需求和设计较为复杂的项目,如航空航天、金融等领域的软件项目。
4. 常见的软件测试技术
软件测试技术是软件测试方法的具体应用,常见的测试技术包括:
- 等价类划分:
将输入空间划分为多个等价类,每个等价类中的数据都可以代表该类的其他数据,从而减少测试的输入数据量。 - 边界值分析:
测试时关注输入数据的边界值,因为很多缺陷常出现在输入的边界条件下。 - 决策表测试:
通过构造决策表,根据不同条件的组合,设计测试用例,保证对每个决策点都进行测试。 - 路径覆盖测试:
通过分析程序的控制流图,确保每一条可能的路径都被至少执行一次。 - 状态转换测试:
对于具有状态转移的系统,根据系统的状态图设计测试用例,确保系统在不同状态下的行为是正确的。 - 正交试验设计:
对多种因素的组合进行测试时,通过正交实验设计的方法,可以尽可能地减少测试用例数量,同时保证覆盖足够的场景。
5. 自动化测试与工具
自动化测试可以大幅提高测试效率和覆盖率,常见的自动化测试工具包括:
- Selenium:用于Web应用的自动化测试,支持多种浏览器。
- JUnit:Java语言的单元测试框架,用于测试Java代码的功能。
- TestNG:类似于JUnit,是一种更加灵活的测试框架,支持并行测试、分组测试等功能。
- Appium:用于移动应用的自动化测试,支持Android和iOS平台。
- Postman:用于API测试,能够模拟HTTP请求并验证返回结果。
6. 性能测试与安全测试
- 性能测试:验证软件在各种负载和压力条件下的响应能力和稳定性,主要包括负载测试、压力测试、稳定性测试和性能基准测试。
- 安全测试:测试系统在面对安全威胁(如SQL注入、XSS攻击、身份验证问题等)时的防护能力,确保软件不被攻击者利用。
7. 现代测试方法与趋势
随着敏捷开发和DevOps的兴起,软件测试技术也在不断演进:
- 敏捷测试:与敏捷开发方法配合,测试和开发同时进行,强调快速反馈和持续集成。
- 持续集成/持续交付(CI/CD):通过自动化测试与构建流程,确保每次代码提交都能通过自动化测试,保证软件的质量。
- 人工智能与机器学习:将AI和ML技术引入到测试领域,如自动生成测试用例、自动化缺陷检测、智能回归测试等。
测试分类
什么是软件度量?
软件度量(Software Metrics)是通过定量化的方式对软件系统的不同特性和维度进行衡量的技术和方法。它主要用于评估软件的质量、性能、复杂性、可维护性等方面的指标。通过软件度量,开发团队可以对软件进行更全面的分析、评估,并根据度量结果做出改进决策。
软件度量作为软件工程中的一个重要部分,帮助开发人员和管理者定量地理解和改进软件开发过程和结果,能够更好地预测、监控和优化软件项目的进展。
个人理解:通过较为客观的“方法”来衡量软件评定软件的质量。
1. 软件度量的目的与作用
软件度量的主要目的是通过定量化的手段提高软件质量,以下是一些主要作用:
- 质量评估:通过软件度量,开发者可以更好地了解软件的质量,包括功能完整性、性能、可靠性、安全性、可维护性等方面。
- 项目管理:度量指标可以帮助项目经理跟踪项目进度、资源使用情况,提前发现潜在问题,从而调整开发计划。
- 性能优化:通过度量系统的各项性能指标(如响应时间、处理速度、内存使用等),可以找出性能瓶颈,进行优化。
- 可维护性:通过度量软件的复杂度和模块之间的耦合度,可以帮助评估系统的可维护性,并识别需要重构的部分。
- 预测与规划:软件度量可以用来预测项目开发的工作量、所需资源和成本等,为项目的预算和时间规划提供支持。
- 技术决策支持:度量结果可以帮助开发团队评估使用不同技术、架构、开发方法的影响,辅助做出技术选择。
2. 软件度量的分类
根据不同的目标和应用,软件度量可以分为多个类别,常见的分类方法有以下几种:
(1) 过程度量(Process Metrics)
过程度量是指对软件开发过程中各个阶段、活动或过程进行衡量的度量。例如:
- 开发效率:衡量开发团队的效率,可以通过开发人员的工作量(例如,功能点或代码行数)与所花费时间的比值来评估。
- 缺陷密度:用于评估在软件开发过程中每千行代码中所发现的缺陷数量,能够反映软件质量控制的效果。
- 进度控制:通过衡量开发进度是否按照计划进行,评估项目是否按时交付。
(2) 产品度量(Product Metrics)
产品度量是对最终软件产品的质量进行评估的度量,通常通过软件的静态特性(如代码结构)或动态特性(如性能)来衡量。例如:
- 代码复杂度:例如圈复杂度(Cyclomatic Complexity),衡量代码的复杂性,通过计算程序控制流图中的独立路径数量来评估程序的复杂度,复杂度越高,表示程序的维护和测试难度越大。
- 代码覆盖率:衡量在测试过程中,代码中有多少比例被执行过,是测试质量的一个重要度量。
- 功能点:用于衡量软件的功能大小,功能点是软件的功能和复杂度的抽象度量,常用于项目管理和估算工作量。
- 缺陷率:反映在软件开发过程中的缺陷数量,通常以每千行代码的缺陷数量表示。
(3) 质量度量(Quality Metrics)
质量度量用来评估软件的质量,常见的质量度量指标包括:
- 可靠性:衡量软件在正常运行环境下的稳定性和故障发生频率。通常使用“故障间隔时间”或“故障率”来描述。
- 可维护性:衡量软件在修改和扩展时的难易程度。通常通过模块之间的耦合度、内聚度等来评估。
- 可扩展性:衡量软件在需求增加时是否能够方便地进行扩展。
- 安全性:衡量软件在防止未经授权的访问、篡改或其他恶意行为方面的能力。
(4) 人力资源度量(Human Resource Metrics)
这类度量主要关注开发团队的效率和人力资源的管理。例如:
- 人月:指团队成员投入到一个项目中所需的时间,常用来估算项目所需的开发工作量。
- 开发者生产力:通常是通过开发人员产出的代码量(例如,功能点或代码行数)与投入的工作时间进行比较来衡量开发者的生产效率。
(5) 维护度量(Maintenance Metrics)
维护度量关注的是软件的维护阶段,包括修复bug、添加新功能等:
- 缺陷修复周期:衡量从缺陷被发现到修复完成所花费的时间。
- 软件演化:衡量软件在版本更新和功能扩展中的变化程度,评估软件的演化能力。
3. 常见的软件度量指标
以下是一些常见的用于评估软件项目的度量指标:
- 圈复杂度(Cyclomatic Complexity):用于衡量程序的复杂性,控制流图中的独立路径数量越多,表示程序越复杂。
- 缺陷密度(Defect Density):通常用于衡量软件质量,表示每千行代码中的缺陷数。
- 功能点(Function Points):用于衡量软件的功能大小,功能点数越多,表示软件功能越复杂。
- 代码行数(Lines of Code, LOC):通过计算源代码的行数来度量代码的大小和复杂性,但不一定能直接反映软件质量。
- 代码覆盖率(Code Coverage):衡量测试过程中,代码的覆盖程度,通常分为语句覆盖、分支覆盖、路径覆盖等。
- 响应时间:指软件系统在特定条件下对用户请求的响应速度,是衡量系统性能的一个重要指标。
- 内存使用率:衡量软件在运行过程中消耗的内存量,通常用于评估系统的资源效率。
4. 软件度量的挑战
尽管软件度量在软件工程中具有重要意义,但在实际应用中也面临一些挑战:
- 选择合适的度量指标:度量指标的选择取决于项目的目标和需求,过于复杂的度量标准可能增加负担,影响开发效率。
- 数据收集的准确性:度量数据的准确性非常重要,错误的数据收集会导致不准确的结论,从而影响决策。
- 度量结果的解释:度量结果只是数据,如何合理解读这些数据,并将其应用于实际决策是一个重要的挑战。
- 度量工具的选择与使用:需要选择合适的度量工具,并确保开发团队能够熟练地使用这些工具来获取度量数据。
DevOps(选自网友讲解)
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序 /软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。 它是一种重视“ 软件开发人员(Dev)”和“ IT运维 技术人员(Ops)”之间沟通合作的文化、运动或惯例。
DevOps is a set of practices, tools, and a cultural philosophy that automate and integrate the processes between software development and IT teams. It emphasizes team empowerment, cross-team communication and collaboration, and technology automation.
我尝试翻译一下:DevOps 是一系列实践
、工具
和一个融合开发及 IT 团队的文化理念
。DevOps 强调赋能团队、跨团队沟通与协作以及技术自动化。
DevOps = 工具 + 实践 + 文化
Atlassian 还提到一个 DevOps 团队包含了开发和 IT 运维,大家一起协作,共同参与产品的整个生命周期,一起为提升软件质量和加速软件开发过程而努力。DevOps 模式下开发和运维不再是独立的“筒仓”,而是几乎被整合成一个团队,这个团队的工程师技术栈会覆盖开发、测试、运维等。同时 DevOps 团队会利用一系列的 DevOps 工具链来实现诸如持续集成、持续发布、流程自动化、高效协作等等目的。
Atlassion 给的“无穷环”长这样:
用“无穷环”表示 DevOps 生命周期,是因为 DevOps 的根本理念是“持续”,也就是“没有终点”。Atlassion 将整个 DevOps 生命周期分成6个阶段,分别是:
- 计划(Plan)
- 构建(Build)
- 持续集成和部署(或者交付)(Continuous Integration and Deployment or Delivery)
- 监控和告警(Monitor and Alert)
- 运维(Operate)
- 持续反馈(Continuous Feedback)
另外从这个环里我们还能看到 Atlassian 想强调沟通与协作是贯穿 DevOps 生命周期全过程的。
3.2、微软回答“什么是 DevOps?”
微软这篇 Introduce the foundation pillars of DevOps: Culture and Lean Product 我特别喜欢!这个标题的意思是“介绍 DevOps 的基柱:文化和精益产品”。
文章第一句话:
DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.
DevOps 是人、过程和产品的结合,使能持续地向终端用户交付价值。
微软还提到:
Typically, the goal for Development is to deliver more features faster, and the goal of Operations is to achieve better system stability. DevOps aligns these disciplines by using a framework of best practices proven to increase speed to market while improving system stability.
多数情况下,开发的目标是快速发布更多的新特性,而运维的目标是保证更高的系统可用性。DevOps 通过切实可行的最佳实践体系来拉齐这两个目标,在提升系统稳定性的同时加速产品交付到市场的速度。
这里微软可以看到微软给的第一个等式:
DevOps = 人 + 过程 + 产品
然后微软从“人 + 过程 + 产品”进一步提炼了 DevOps 的4大基柱:文化、精益产品、架构和技术。
也就是:人 + 过程 + 产品 -> 文化、精益产品、架构 + 技术
微软给的“无穷环”长这样:
图里描绘的 DevOps 生命周期还是分成6个阶段,分别是:
- 计划(Plan)
- 构建(Build)
- 持续集成(Continuous Integration)
- 部署(Deploy)
- 运维(Operate)
- 持续反馈(Continuous Feedback)
外加贯穿整个 DevOps 生命周期全过程的“协作(Collaboration)”。
在图外,微软还定义了对其而言 DevOps 的8大能力:
- 持续计划(Continuous Planning)
- 持续集成(Continuous Integration)
- 持续发布(Continuous Delivery)
- 持续运维(Continuous Operations)
- 持续质量(Continuous Quality)
- 持续安全(Continuous Security)
- 持续协作(Continuous Collaboration)
- 持续改进(Continuous Improvement)
每次看到这里我总觉得微软的图该更新一版。
另外微软有一句特别有深度总结:
What is new? Continuous Everything. The process is a journey and requires a growth mindset to continually evolve and improve.
“Continuous Everything”,铿锵有力!微软强调 DevOps 过程是一段没有终点的旅途,要求我们抱着成长的观念模式,持续地改进,永不满足。
3.3、AWS 回答“什么是 DevOps?”
不难猜到,AWS 也有一篇文章来回答“What is DevOps?”
DevOps is the combination of cultural philosophies, practices, and tools that increases an organization’s ability to deliver applications and services at high velocity.
DevOps 是文化理念、实践和工具等的组合,能够提升一个组织快速交付应用和服务的能力。
这里 AWS 给了一个等式:
DevOps = 文化 + 实践 + 工具
不过这篇文章里 AWS 不落俗套,没有画一个自己的“无穷环”,而是给了这样一张图:
这里提到了:
- 构建(Build)
- 测试(Test)
- 发布(Release)
- 监控(Monitor)
- 计划(Plan)
还可以看到这个“交付管道”和“反馈环”连接的是“企业”和“客户”,可见 AWS 希望强调“DevOps 的目的是更快地向客户交付”。
四、DevOps 文化
我曾一度片面以为 DevOps 要解决的问题就只是工具问题,也就是如何选择或者开发好用的 DevOps 工具 or 平台,从而提升企业内部整个研发生命周期的运行效率。不记得是哪一天,我突然有一个强烈的想法:工具只是工具而已,文化建设才是成败的关键!
文化决定了我们如何去做事,工具决定了,决定了啥?可能啥也决定不了。因为我认为工具也是被文化所决定的。
4.1、什么是文化?
简单说,文化就是一个组织的社交遗产,也就是一个组织对于其成员的各种行为的响应模式。
比如当我们说一个企业有“加班文化”时,其实是在说在这个企业内,员工加班会得到奖赏,而不加班会受到惩罚。或者我们说一个企业是“狼性文化”、“奋斗者文化”…… 不同的文化背后对应的也就是这个企业对于员工不同行为的不同响应模式。
一个企业的文化决定了在这个企业内:
- 什么事情是对的,什么事情是错的;
- 什么事情是重要的,什么事情是不重要的;
- 什么事情是值得做的,什么事情是不值得做的。
所以文化决定了一个企业会去招聘哪些人,会开除哪些人,会提拔哪些人。
看到这里可能你已经在思考自己呆过的企业对员工有哪些要求,在鼓励什么,在惩罚什么…… 没错,此刻在你脑海中闪现的一幕幕就是企业文化。
4.2、什么是 DevOps 文化?
这幅图大家肯定都不陌生:
什么是 DevOps 文化?
其实从这幅图中我们就能看到文化的影子。我们都知道 DevOps 强调打通开发团队与运维团队的壁垒,要求两个团队拉齐认知与责任,不再各自为战,而是一起为更快地交付更高质量的产品而努力。没错,这就是最基础的 DevOps 文化。
那么如何拉齐认知与责任呢?
首先可以确认的是,我们在组织架构上直接融合 Dev 和 Ops 团队,这并不是一个 DevOps 团队。人是不是坐在一起,改变的只是沟通的效率。这里我想强调两点:
- 责任共担,在一个 DevOps 模式组建团队里,每个人都需要为软件开发交付的整个生命周期而负责;
- 技能共享,通过持续学习,互相学习,让本是传统 Dev 的工程师学习 Ops 的技能,同时传统 Ops 的工程师也需要学习 Dev 的技能。
Dev 与 Ops 互相学习彼此领域技能,每个人都懂开发又懂运维,抱着“成长的观念”,持续学习,不满足于当前已掌握的技术栈。
但是我们也需要意识到不能要求每个工程师都精通开发与运维,这是不可能的。这里说的 Dev 掌握 Ops 能力,更多的是 Dev 能够借助完善的工具链从而掌握“应用运维”的能力,能够在自己完成开发之后,有能力和权限将应用部署上线,同时线上应用出问题后,能够直接对其负责,定位、修复、更新升级等。而一些基础设施的运维能力需要独立出来考虑,比如机房里的局域网配置、虚拟机挂 NAS 盘等传统运维能力。
同理 Ops 需要理解应用开发的生命周期,知道 Dev 的痛点,尤其是在流程上的痛点,比如怎样提升应用的构建速度,怎样优化应用的 cd 流程等,Ops 要关注应用的“生产过程”,进而发力去优化这个过程或相应的工具,让应用能够更可靠更快速地完成 cicd 流程等,更容易地部署上线或者对外交付。也就是说我们并不是要求 Ops 也去写业务代码,而是协助 Dev 去解决业务代码之外的痛点,让 Dev 能够更加专注于业务功能实现。
最后,一个 DevOps 模式组件的团队中每个人都为整个软件研发生命周期的速度和质量负责,每个具体的角色就像一个大头钉,底部很宽,代表着技术面广,关注整个软件研发生命周期的所有环节;同时顶部很高,在某个环节里专注,做好做精。
DevOps 成功落地的关键是什么?
我们前面说到的“其乐融融”的场景,我们希望 Dev 和 Ops 能够互相学习,共担责任,一起为更快更好地交付产品而努力。但是,工程师们为什么要这样做?他们的动力在哪里?
4.3、领导与激励
Gartner 曾出过一个分析报告,表明在2023年,90%的 DevOps 改革将会失败(相较于预期)。而失败的主要原因是领导层管理方法的局限。
其实这是显而易见的,DevOps 可以称为一种“改革”,而很多人是抵触“变化”,抵触“新事物”的。比如 DevOps 鼓励接受失败,快速失败,从失败中学习经验,进而在更长的时间维度上争取更大的成功。但是可能你遇到的刚好是一个“失败惩罚型”领导,那么你的团队就会惧怕失败,从而放弃创造与尝试新技术,选择安于现状。
一个技术团队的领导首先自己需要懂技术,有丰富的经验,这是基础要求。但是除此之外,更重要的是团队领导能够激励整个团队,去发挥整个团队的主观能动性,让所有团队成员都能够有动力持续学习,快速学习,同时也能够敢于失败,快速失败且不惧怕失败,把失败当做一个学习的机会,进而不断成长,让整个团队的战斗力能够越来越强。
所以领导怎样激励工程师呢?
福利?比如一些大厂提供的免费零食或者定期的下午茶?免费的咖啡或者午餐?
没错,作为一个工程师,这一切的福利都会让其开心,但是其实无法激励其更加认真努力地工作。工程师的薪资水平普遍不低,所有这些零食也好,咖啡也好,大概率不会到其月薪的零头。同理,工程师找工作时,看重的也绝不会是一个企业是否提供免费午餐和下午茶。
那么工程师看重的是什么?
在选择一家企业的时候,可能工程师第一个考虑的是薪资,剩下的可能是成长的空间、工作内容是否感兴趣等等等等。但是进入一家公司以后,真正开始工作的时候,工程师看重的是什么?我认为可能是:
- 精通
- 自驱
- 目标
我们逐个来解释一下。
1. 精通
我们在某个工作方向做的好,我们擅长某个技术方向,进而很好地完成相应的工作,这时候我们会有一种成就感,满足感,我们会觉得自己得心应手,同时大概率会获得认可,赞扬,因此接下来的时间里我们就更加愿意在这个方向上继续努力,做的更好。也就是说一个工程师能够有机会专注于自己精通的技术上发力,那么他大概率会感受到激励。
反例是什么呢?比如你是一个 Java 工程师,但是你的领导擅长 PHP,并且觉得 PHP 是世界上最好的语言,于是要求整个团队转向使用 PHP,这时候你会放弃自己研究多年的 Java 技术栈,努力学习 PHP 并决心干出一番成绩吗?
2. 自驱
我们希望组建一个学习型、创造型的团队,每个人能够持续成长,乐于创新,自我驱动。这就需要领导能够允许团队花时间去学习,去输入,而不是一味地输出,每时每刻汇报自己写了几行代码。同时这也要求领导自身勇于接受新事物,拥抱变化,而不是“不求有功,但求无过”。举个例子:假如你的领导最担心的是线上应用出事故,并且他认为稳定的第一要素就是不要引入新技术,新工具,那么这时候你的领导也不会在意你是不是有时间学习,也不会允许你花时间去研究新技术,因为这一切只会带来不稳定。如果领导害怕失控,因而拒绝创新,那么这样的团队成员也就只能满足于实现日复一日的常规需求开发迭代,而不会享受技术,自我驱动,拥抱创新。
3. 目标
显而易见,团队每个成员都需要知道自己为什么做?目的是什么?目标是什么?而不是领导心里藏着一个目标,然后简单地指挥团队成员完成一件件具体的零散的工作项。如果团队成员只知道今天需要完成事务A,明天需要完成事务B,而不知道为什么要做,最终要做成什么样,那么大家只会满足于机械地完成任务,而不会有动力追求“如何做得更好”。
五、总结
所以 DevOps 是什么?
我尝试给出我的答案:
DevOps 是一种文化理念、工具与实践的结合,目的是更快更可靠地向用户持续交付价值。其中最重要的是文化,文化要求 Dev 和 Ops 团队责任共担,目标一致,也要求整个团队持续学习,抱着成长的心态,Continuously Everything。其次 DevOps 离不开高效的工具集,工具是自动化的基础。最后我们要在各个环节追求最佳实践,不管是工具的使用,还是团队的协作模式,沟通方法上面。
最后,关于标题“什么是DevOps?看这一篇就够了!”,我想告诉你,DevOps 文化里不存在“够了”,所以我不得不承认,我撒谎了。本文只代表我个人现阶段的粗浅认知,我建议你查阅更多的资料,持续学习,永不满足。当然如果本文对你有一点点的帮助,那么我很满足。
原文地址:https://blog.csdn.net/2302_77293761/article/details/145031579
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!