软件测试-学习

软件测试

一、测试基础

一、基础概念

什么是软件测试?软件测试具体要求做什么?
对软件进行测试, 发现软件系统的问题 
正确性: 软件是否有bug 是否会对用户操作、体验、造成影响
安全性: 权限,软件数据是否安全 是否会泄露用户隐私 软件是否会被恶意攻击 导致用户操作、体验、造成影响
软件质量: 用户的体验感觉 设计缺陷
让软件越来越好

软件测试是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。它主要是一种实际输出与预期输出之间的审核或比较过程,旨在发现软件中的错误、缺陷或不符合设计要求的地方,并评估软件的整体质量。

软件测试的具体要求包括:

  1. 测试理论与实践知识:

    • 了解软件测试的基本原理、方法和技术,包括黑盒测试、白盒测试、灰盒测试等。
    • 熟悉测试计划、测试用例设计、测试执行、缺陷跟踪和测试报告等测试流程。
  2. 测试类型与内容:

    • 功能测试:验证软件的各项功能是否按照预期工作,检查产品是否达到用户要求的功能。

      1000w 用户 - > tb  压力测试  响应时间是否达到预期2s
      吞吐量: 程序在1s内能够同时处理多少个请求
      资源占用:数据资源 100%
      
    • 性能测试:评估软件在不同负载和压力下的性能表现,如响应时间、吞吐量、资源占用等。

      淘宝 -> 电子券系统核销使用接口 系统->外部或子系统的接口
      
    • 接口测试:主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。

      1.安全性能
      2.数据保护
      3.访问控制
      4.漏洞扫描 
      
    • 安全测试:评估软件的安全性能,包括数据保护、访问控制、漏洞扫描等方面。

      不同的浏览器 谷歌 腾讯浏览器  360浏览器
      手机、电脑
      
    • 兼容性测试:检查软件在不同的操作系统、浏览器、硬件配置等环境下是否能正常运行。

      用户体验: 操作流程是否简单 是否符合用户操作习惯 
      
    • 用户体验测试:评估软件的易用性、界面设计、交互逻辑等方面的优缺点。

  3. 编程语言与工具使用:

    • 掌握至少一种编程语言,如Python、Java、JavaScript等,有助于进行自动化测试和性能测试。
    • 熟悉常用的测试工具,如缺陷跟踪工具(如Jira)、性能测试工具(如JMeter、LoadRunner)、安全测试工具(如OWASP Zap)等。
  4. 沟通与协作能力:

    • 测试人员需要与开发人员、产品经理、客户等各方进行有效沟通,确保软件质量。
    • 在测试过程中,及时记录和报告发现的缺陷,并与开发团队紧密合作,跟踪缺陷的修复过程。
  5. 测试计划与执行:

    • 根据产品需求和项目计划,制定详细的测试计划,包括测试范围、测试策略、测试资源等。
    • 设计全面的测试用例,覆盖软件的所有功能和场景,确保测试的全面性和准确性。
    • 按照测试计划执行测试,并记录测试结果,包括成功的测试和发现的缺陷。
  6. 持续学习与适应:

    • 随着技术的发展和软件测试领域的不断变化,测试人员需要不断学习新的测试技术和方法,如自动化测试、人工智能在测试中的应用等。
    • 适应行业发展趋势,掌握新的测试工具和框架,以提高测试效率和准确性。

总之,软件测试是一项复杂而重要的工作,它要求测试人员具备扎实的测试理论知识、丰富的实践经验、良好的编程能力、熟练使用各种测试工具以及优秀的沟通与协作能力。通过这些努力,可以确保软件在发布前达到最佳的质量水平,满足用户的需求和期望。

什么是软件测试?软件测试具体要求做什么?

软件bug的定义?

软件bug,在计算机科学中,指的是在计算机软件程序、操作系统或游戏等中存在的错误、缺陷、故障或漏洞,这些错误可能导致程序无法按照预期的方式运行,或者导致程序崩溃、数据丢失、功能异常或安全漏洞等问题。简而言之,软件bug是程序中不期望的行为或结果,它违反了程序的规格说明或设计意图。

软件bug可以出现在软件开发的各个阶段,包括需求分析、设计、编码、测试、部署和维护等。它们可以由多种原因引起,包括但不限于:

  1. 编程错误:如逻辑错误、语法错误、类型不匹配等。 软件开发
  2. 设计缺陷:软件设计时的错误或遗漏,可能导致后续实现中的bug。 产品经理、软件开发
  3. 需求变更:在软件开发过程中,需求可能会发生变化,如果未及时更新设计或代码,就可能引入bug。 软件测试
  4. 外部因素:如硬件故障、操作系统问题、第三方库的错误等,也可能影响软件的正常运行。 软件测试

为了发现和修复软件bug,通常会进行一系列的测试活动,包括单元测试、集成测试、系统测试和验收测试等。这些测试旨在验证软件的正确性、可靠性和性能,并尽可能多地发现潜在的bug。

一旦软件bug被发现,通常会根据bug的严重性和影响范围来评估其优先级,并安排相应的开发人员进行修复。修复bug后,还需要重新进行测试,以确保修复没有引入新的问题,并且原有的bug已经被完全解决。

优先级
1.不影响用户体验 不会对用户数据造成影响  s
2.不影响用户体验 对用户数据造成影响  m
3.影响用户体验 对用户数据造成影响 b
4.影响多用户体验 对多用户数据造成影响 est

二、测试分类

1、黑盒、灰盒、白盒测试
黑盒测试
回答重点

黑盒测试是一种测试方法,测试人员在不了解程序内部结构和代码的情况下,从用户的角度出发,通过输入各种可能的输入值来验证软件的功能和性能。常用的黑盒测试方法主要包括:

1)等价类划分:将输入数据划分为不同的等价类,选取代表性的数据进行测试。 2)边界值分析:针对输入或输出范围的边界进行测试,尤其聚焦于边界条件。 3)决策表测试:使用决策表来设计测试用例,确保覆盖所有可能的情况和组合。 4)因果图:用于处理输入条件和输出结果之间的依赖关系,生成测试用例。 5)状态迁移测试:测试不同状态之间的转移情况,适用于带有状态机的系统。

扩展知识

黑盒测试方法太多了,我从一些经典的测试方法展开讲讲。

1)等价类划分

  • 将输入域划分为若干等价类,每个等价类中的所有数据都认为是等价的。
  • 举个例子,我们测试一个年龄输入框,它要求输入的年龄在18到60之间。等价类可以分为:18-60作为有效等价类,<18和>60作为无效等价类。

2)边界值分析

  • 聚焦于输入域的边界值及其两侧的数据,因为这些地方最容易出错。
  • 比如上面的年龄输入框,除了正常的等价类,我们还会测试边界值:17、18、60、61。

3)决策表测试

  • 通过构造决策表,可以很清楚地表示出复杂的业务规则和条件。
  • 假设有一个贷款审批系统,根据贷款金额和信用分数来决定是否批准。一个简化的决策表可能是:
    • 贷款金额 <= 5000 且信用分 >= 700 -> 批准
    • 贷款金额 > 5000 且 <= 20000 且信用分 >= 750 -> 批准
    • 贷款金额 > 20000 且信用分 >= 800 -> 批准
    • 其他情况 -> 不批准

4)因果图

  • 这是通过详细建模输入条件与最终行为之间的关系来生成测试用例的方法。
  • 比如输入条件为A、B、C,通过因果图分析可以得到所有可能的组合和相应的结果,从而生成测试用例。

5)状态迁移测试

  • 当你的系统存在多个状态并且可以在这些状态之间转移时,你会用到这种方法。

  • 比如一个简单的自动售票机:有"待机"、“选择票”、“付款”、"出票"四个状态,通过不同操作如按按钮、投币等行为在状态之间迁移。测试用例需覆盖所有状态以及状态转移。

    美团点外卖: 1. 下单(选单、选择地址、选择电子券) 2.支付 (微信、支付宝、云闪付、银行卡) 3.商家接单 (打小票,语音提示,备餐)

    4.骑手接单(骑手接单语音) 5. 骑手取货(到店) 6.骑手配送 7.骑手送达 8.用户评价

灰盒测试

灰盒测试在实际场景中有着广泛的应用,以下是一些具体实例:

  • 电商网站测试‌:在测试电商网站的购物车功能时,灰盒测试不仅关注购物车的输入输出行为,还会关注购物车与其他系统(如库存系统、价格系统)的交互。测试者会了解这些系统的交互方式,但不深入其内部实现代码,从而确保购物车功能的正确性和稳定性‌。
  • 集成测试阶段‌:在软件开发过程中,灰盒测试常用于集成测试阶段。测试者会关注程序模块之间的接口和通信,以及程序的主路径和功能。通过灰盒测试,可以更有效地发现模块间的问题,确保系统的整体质量和稳定性‌。

这些场景展示了灰盒测试在软件测试领域中的重要性和实用性。

白盒测试
回答重点

白盒测试(White-Box Testing)是一种基于软件内部结构和实现方式的测试方法。它关注软件的逻辑流、数据处理和功能实现,主要面向代码级别的验证。那么,具体的方法有哪些呢?

1)语句覆盖:测试每一条语句至少被执行一次。 2)分支覆盖:每个条件分支(如 if-else 语句)至少被执行一次。 3)路径覆盖:测试每一条独立的路径,确保所有可能的逻辑路径都被执行。 4)条件覆盖:确保每个条件表达式的所有可能布尔值都至少被一次覆盖。 5)多条件覆盖:确保每种组合的条件表达式的结果都至少被一次覆盖。 6)路径覆盖与路径测试:通过遍历代码的所有独立路径,确保覆盖所有可能的执行路径。

在实施白盒测试的过程中,可以按照以下步骤来进行:

1)分析要求和设计:了解代码所实现的功能和逻辑。 2)设计测试用例:根据选定的测试方法,设计相应的测试用例,确保覆盖所有需要测试的代码部分。 3)编写和运行测试代码:根据设计的测试用例编写测试代码,并运行来检验功能和逻辑的正确性。 4)结果分析和报告:分析测试结果,找出缺陷并记录测试覆盖率,生成测试报告。 5)回归测试:对于发现的缺陷进行修复后,重新测试以确保问题已解决且没有引入新的问题。

扩展知识

说到白盒测试,不得不提各种常用的工具和框架,它们可以大大提高测试的效率和准确性。比如:

1)JUnit:这是用于Java的一个常用单元测试框架,非常方便编写和运行测试用例。 2)PyTest:这是Python中比较流行的测试框架,支持简单灵活的测试和丰富的扩展功能。 3)CppUnit:用于C++的单元测试框架,类似于JUnit,但针对C++特性做了相应调整。 4)CodeCoverage工具:如Covertura或JaCoCo,可以用来分析你的代码覆盖率,帮助你确定哪些部分仍未被测试。

此外,对于复杂的系统,白盒测试可能不够全面,此时应结合黑盒测试进行混合测试,以全面确保软件质量。黑盒测试关心的是输入输出的正确性,不关注代码内部实现,两者结合才能覆盖更多的测试维度,达到较高的测试质量保证。

2、静态测试、动态测试
静态测试

定义:静态测试是指在不运行被测程序的情况下,通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。这种方法主要关注程序内部的逻辑和结构,以及代码是否符合编程标准和规范。

特点

  1. 不运行程序:静态测试不需要运行被测程序,而是通过分析代码、文档等静态资源来发现潜在的问题。
  2. 关注内部结构:静态测试侧重于分析程序的内部结构,如代码风格、逻辑结构、数据流和控制流等。
  3. 预防性测试:通过静态测试,可以在程序运行之前发现并纠正错误,从而减少程序在运行时出现问题的可能性。

常见方法

  • 代码审查:由多个开发人员或测开人员共同检查代码,发现潜在的错误和缺陷。
  • 静态结构分析:使用专门的工具对代码进行结构分析,找出不符合编程标准或规范的地方。
  • 代码质量度量:通过度量代码的复杂度、圈复杂度等指标来评估代码的质量。

常用工具

  • SonarQube:用于检测软件质量的开源平台,支持多种编程语言。
  • ESLint:JavaScript代码质量和编码风格检查工具,高度可配置且拥有丰富的插件生态。
  • Checkstyle:专门为Java语言设计的静态代码分析工具,用于检查代码是否符合特定的编码标准。
静态测试的实际场景
  1. 代码审查:
    • 场景描述:在软件开发团队中,团队成员定期聚集在一起,对某个模块或功能的代码进行逐行审查。审查的目的是找出潜在的逻辑错误、语法错误、不符合编码规范的地方,以及可能的性能瓶颈。
    • 目的:提高代码质量,减少运行时错误,确保代码的可读性和可维护性。
  2. 静态代码分析工具应用:
    • 场景描述:在软件开发过程中,使用静态代码分析工具(如SonarQube、ESLint、Checkstyle等)对代码库进行扫描。这些工具能够自动检查代码中的潜在问题,并提供改进建议。
    • 目的:自动化地发现代码中的错误和缺陷,提高代码审查的效率和准确性。
  3. 文档审查:
    • 场景描述:在软件项目的文档编写阶段,对需求文档、设计文档、用户手册等进行审查。审查的目的是确保文档的完整性、清晰性、一致性和准确性。
    • 目的:减少因文档错误或不一致导致的开发误解和用户困扰,提高项目的整体质量和用户满意度。
动态测试
  1. 功能测试:
    • 场景描述:开发人员或测试人员根据软件的需求规格说明书(解决方案),设计并执行测试用例,以验证软件的功能是否符合预期。这包括黑盒测试和白盒测试。
    • 目的:确保软件的功能正确无误,满足用户的需求和期望。
  2. 性能测试:
    • 场景描述:在软件发布前,使用性能测试工具(如JMeter)对软件进行压力测试、负载测试等,以评估软件在高负载下的性能和稳定性。
    • 目的:确保软件在生产环境中能够稳定运行,满足用户的性能需求。
  3. 安全测试:
    • 场景描述:模拟攻击者的攻击行为,对软件进行渗透测试、漏洞扫描等,以发现和修复软件中的安全漏洞。
    • 目的:提高软件的安全性,防止恶意攻击和数据泄露等安全问题。
  4. 集成测试:
    • 场景描述:在软件开发过程中,将各个模块或子系统集成在一起进行测试,以验证它们之间的接口和协同工作是否正常。
    • 目的:确保各个模块或子系统能够顺利集成,并满足整体系统的需求和规范。
  5. 用户验收测试(UAT):
    • 场景描述:在软件开发周期的最后阶段,邀请用户或客户对软件进行测试,以验证软件是否符合他们的需求和期望。
    • 目的:确保软件满足用户的实际需求,提高用户的满意度和信任度。
3、单元测试、集成测试、系统测试、验收测试
1. 单元测试

定义:单元测试(Unit Testing)是指对软件中的最小可测试单元进行检查和验证。在面向对象编程中,一个单元通常指的是一个类或一个方法。

目的:确保每个单元在独立于其他单元的情况下都能正常工作。

实施方法

  • 通常采用白盒测试方法,编写针对每个类或方法的测试用例。
  • 测试用例应覆盖所有可能的执行路径,包括正常情况和异常情况。
  • 单元测试通常由开发人员自己完成,以确保代码质量。
2. 集成测试

定义:集成测试(Integration Testing),也叫组装测试或联合测试,是在单元测试的基础上,将多个单元组合在一起进行测试。

目的:检查各个模块之间的接口是否正常工作,以及是否存在数据传递问题。

实施方法

  • 通常采用黑盒测试方法,关注模块之间的接口和交互。
  • 集成测试可以通过自底向上或自顶向下的方式进行。
  • 集成测试通常由专门的测试人员完成。
3. 系统测试

定义:系统测试(System Testing)是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方。

目的:验证最终软件系统是否满足用户规定的需求。

实施方法

  • 将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下进行测试。
  • 测试内容包括功能、性能、安全等方面的测试。
  • 系统测试通常由专门的测试团队完成,以确保整个系统的质量和稳定性。
4. 验收测试

定义:验收测试(Acceptance Testing)是部署软件之前的最后一个测试操作,也称为交付测试。

目的:确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。

实施方法

  • 相关的用户和独立测试人员根据测试计划和结果对系统进行测试和接收。
  • 验收测试是向未来的用户表明系统能够像预定要求那样工作。
  • 它是一项确定产品是否能够满足合同或用户所规定需求的测试。
4、手工测试、 自动化测试
手工测试

定义
手工测试是由测试人员手动执行测试用例,并观察软件的行为和结果,以此来评估软件的质量和性能。它不需要编写额外的自动化脚本,而是依赖于测试人员的技能和经验来发现软件中的缺陷。

特点

  1. 灵活性:手工测试能够灵活应对各种复杂的测试场景和突发情况,测试人员可以根据实际情况调整测试策略和方法。
  2. 发现缺陷的能力:由于测试人员具有主观判断能力,能够更容易地发现一些自动化测试难以捕捉的细微问题和界面错误。
  3. 成本:在初期阶段,手工测试的成本相对较低,因为它不需要额外的自动化工具和脚本开发成本。
  4. 覆盖范围:手工测试可以覆盖那些自动化测试难以实现的测试场景,如用户界面测试、兼容性测试等。

然而,手工测试也存在一些局限性,如测试效率相对较低、结果可能受到测试人员主观因素的影响等。

自动化测试

定义
自动化测试是通过编写测试脚本或使用自动化测试工具来模拟用户操作,自动执行测试用例并验证测试结果的过程。它旨在提高测试效率、减少人为错误,并确保软件质量的一致性。

特点

  1. 高效性:自动化测试可以快速地执行大量测试用例,并在短时间内生成测试报告,显著提高测试效率。
  2. 可重复性:自动化测试脚本可以反复执行相同的测试用例,确保测试结果的一致性和可重复性。
  3. 准确性:自动化测试减少了人为因素的干扰,提高了测试结果的准确性和可靠性。
  4. 支持复杂测试:自动化测试能够执行一些复杂的测试任务,如性能测试、安全测试等,这些任务往往难以通过手工测试来完成。

然而,自动化测试也需要一定的先期投入,包括测试脚本的编写、自动化工具的购买和维护等成本。此外,对于需求变化频繁的软件项目,自动化测试脚本的维护成本也可能较高。

总结

手工测试和自动化测试各有优缺点,它们并不是对立的,而是可以相互补充的。在软件测试过程中,应根据项目的实际情况和需求来选择合适的测试方式。例如,在初期阶段可以更多地采用手工测试来快速发现和解决问题;在后期阶段则可以引入自动化测试来提高测试效率和确保软件质量的一致性。同时,随着技术的发展和工具的完善,未来可能会出现更多将手工测试和自动化测试相结合的新方法和新工具。

5、功能测试、接口测试、性能测试、安全测试、安装卸载测试、兼容性测试

在软件测试领域,功能测试、接口测试、性能测试、安全测试、安装卸载测试和兼容性测试是六种常见的测试类型,每种测试都有其特定的目标和应用场景。以下是对这六种测试类型的详细解释:

1. 功能测试(Functional Testing) web测试、小程序

定义:功能测试是对产品的各功能进行验证,确保产品达到用户要求的功能。它主要关注软件是否按照需求规格说明书的规定正常工作。

特点

  • 黑盒测试:功能测试通常不需要了解软件内部结构和代码,只需根据软件需求进行测试。
  • 逐项测试:根据功能测试用例,逐项测试软件的各个功能。
  • 结果对比:将实际结果与预期结果进行对比,验证软件是否满足需求。
2. 接口测试(Interface Testing) postman软件

定义:接口测试是软件测试中的重要环节,它关注软件系统中不同模块之间的交互接口。

特点

  • 高度规范性:接口需要按照一定的规范进行设计与开发,测试人员需要按照这些规范进行验证。
  • 复杂性与灵活性:由于接口的复杂性,测试人员需要理解系统的整体架构和各个模块之间的关系。同时,接口可能会随着需求变化而调整,测试人员需要具备一定的灵活性。
  • 数据依赖性:接口的测试需要使用合适的数据进行验证,以确保系统在不同输入情况下的行为符合预期。
3. 性能测试(Performance Testing) jmeter软件

定义:性能测试是通过模拟生产运行的业务压力量和使用场景组合,来测试系统的性能是否满足软件的性能要求。

类型

  • 负载测试:找到系统处理能力的极限。
  • 压力测试:检查系统在高负载下的稳定性。
  • 并发测试:模拟多用户并发访问,测试系统是否存在性能问题。

特点

  • 目标明确:性能测试需要有明确的性能目标和测试场景。
  • 环境确定:在已经确定的环境下进行测试。
  • 加压测试:通过不断加压来观察系统的性能指标和稳定性。
4. 安全测试(Security Testing)

定义:安全测试是IT软件开发中的重要环节,旨在发现软件中的安全隐患。

特点

  • 目标不同:与功能测试不同,安全测试以发现安全隐患为目标。
  • 范围广泛:不仅关注系统的功能,还关注系统的机制、外部环境、应用与数据自身安全风险与安全属性等。
  • 依赖工具:安全测试通常需要使用专业的安全测试工具进行扫描、分析和定位。
5. 安装卸载测试(Installation and Uninstallation Testing)

定义:安装卸载测试是确保软件在正常情况下和异常情况的不同条件下,能够正确地进行安装和卸载。

特点

  • 安装测试:验证软件在各种条件下的安装过程是否顺利,包括首次安装、升级安装、完整安装或自定义安装等。
  • 卸载测试:验证软件卸载过程是否彻底,卸载后是否影响其他软件的使用,相关文件是否被正确删除等。
  • 异常情况处理:测试在安装或卸载过程中遇到异常情况(如电源中断)时的处理能力。
6. 兼容性测试(Compatibility Testing)

定义:兼容性测试是在不同软件、硬件、操作系统、网络环境等多个平台上测试产品的兼容性质量,以确保软件在各种环境下的正常运行。

特点

  • 多平台测试:测试软件在不同设备、系统或浏览器上的兼容性水平。
  • 提高品质:通过兼容性测试能够发现和解决软件或网站的兼容性问题,提高软件品质和用户体验。
  • 多种测试方法:兼容性测试涵盖黑盒测试、白盒测试、自动化测试、手动测试等多种测试方法和技术。

综上所述,这六种测试类型在软件测试过程中各司其职,共同确保软件的质量和稳定性。

6. Web应用测试、app软件测试、PC应用测试、小程序测试
1. Web应用测试

定义:Web应用测试是指对Web网页应用程序进行验证和评估的过程,以确保其功能、性能和安全性符合预期。

特点

  • 功能测试:验证Web应用程序是否按照需求规格说明书中定义的功能正常工作,包括输入验证、表单提交、页面导航、数据展示等方面的测试。
  • 兼容性测试:测试Web应用程序在不同操作系统、不同浏览器和不同设备上的兼容性,确保应用程序在各种环境下都能正常工作。
  • 性能测试:测试Web应用程序在高负载和并发情况下的性能表现,包括响应时间、吞吐量、并发用户数等指标的评估。
  • 安全性测试:测试Web应用程序的安全防护措施是否有效,包括身份认证、访问控制、数据加密等方面的测试。
  • 用户界面测试:测试Web应用程序的用户界面是否友好、易用,符合用户的期望和习惯。
  • 数据库测试:测试Web应用程序与数据库之间的交互是否正常,包括数据的读写、事务处理、数据完整性等方面的测试。
2. App软件测试

定义:App软件测试是针对移动应用程序(如iOS和Android应用)进行的测试,以确保其在各种设备和网络环境下的稳定性和性能。

特点

  • 设备兼容性测试:测试应用在不同品牌和型号的移动设备上的兼容性和稳定性。
  • 网络测试:验证应用在不同网络环境下的表现,如Wi-Fi、4G/5G等。
  • 性能测试:测试应用的启动时间、响应时间、内存占用等性能指标。
  • 安全性测试:检查应用的数据加密、用户隐私保护等安全措施是否到位。
  • UI/UX测试:评估应用的用户界面和用户体验,确保符合用户习惯和需求。
3. PC应用测试

定义:PC应用测试是针对个人电脑(PC)上运行的应用程序进行的测试,以确保其在Windows、macOS等操作系统上的稳定性和性能。

特点

  • 系统兼容性测试:测试应用在不同版本的操作系统上的兼容性。
  • 性能测试:评估应用的运行效率、资源占用等性能指标。
  • 功能测试:验证应用的所有功能是否按预期工作。
  • 稳定性测试:长时间运行应用以检查其稳定性和可靠性。
  • 用户界面测试:确保应用的用户界面直观、易用。
4. 小程序测试

定义:小程序测试是针对微信小程序、支付宝小程序等轻量级应用进行的测试,以确保其在不同设备和平台上的用户体验和性能。

特点

  • 跨平台兼容性测试:测试小程序在不同操作系统和浏览器上的表现。
  • 性能测试:评估小程序的加载速度、响应时间等性能指标。
  • 功能测试:验证小程序的各项功能是否按预期工作。
  • 用户体验测试:检查小程序的界面设计、交互方式等是否符合用户习惯。
  • 接口测试:验证小程序与后端服务器的接口交互是否正常。

综上所述,Web应用测试、App软件测试、PC应用测试和小程序测试在测试目标、测试环境和测试方法上各有侧重,但都是为了确保软件的质量和稳定性,提升用户体验。

7、其他测试:冒烟测试、弱网测试、并发互斥测试、回归测试、随机测试、探索性测试、权限测试等
1. 冒烟测试(Smoke Testing)

定义:冒烟测试是在软件版本包出包之后,正式测试之前进行的一种预测试。它的目的是快速验证软件的基本功能是否正常,以决定是否能进行后续的正式测试工作。

特点

  • 快速验证:冒烟测试耗时短,能够迅速判断软件是否具备测试准入条件。
  • 基础功能检查:主要关注软件的基本功能和核心流程是否能正常运行。
  • 预测试:在详细测试之前进行,确保软件没有明显的阻塞型缺陷。
2. 弱网测试(Weak Network Testing)

定义:弱网测试是在网络环境不佳(如网络带宽小、丢包、延时等)的情况下对应用软件或系统进行的测试。

目的

  • 验证客户端在弱网环境下的展示效果及丢包、延时的处理机制。
  • 确保软件或系统的核心功能在弱网环境下能稳定运行。
  • 验证断线重连机制是否合理,提升用户体验。
3. 并发互斥测试(Concurrency and Mutual Exclusion Testing)

定义:并发互斥测试主要关注多个用户或进程同时访问系统时,系统能否正确处理数据并发和互斥访问,以保证数据的一致性和完整性。

测试内容

  • 并发性能测试:模拟多用户同时操作,测试系统的响应时间和吞吐量。
  • 互斥访问测试:验证系统在多个进程或线程同时访问共享资源时,能否通过互斥机制避免数据冲突。
4. 回归测试(Regression Testing)

定义:回归测试是指修改了旧代码或增加了新功能后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。

特点

  • 重复性:需要重复执行以前的部分或全部测试用例。
  • 验证性:确保修改后的软件仍然保持原有的功能和性能。
  • 重要性:在软件开发的各个阶段都会进行多次回归测试,以确保软件质量。
5. 随机测试(Ad Hoc Testing)

定义:随机测试主要是根据测试者的经验对软件进行功能和性能抽查。

特点

  • 灵活性:测试者可以根据自己的经验和直觉来选择测试点和测试方法。
  • 非系统性:与计划性测试相比,随机测试更加灵活和随意。
  • 补充性:可以作为计划性测试的一种补充,帮助发现一些未被预期的缺陷。
6. 探索性测试(Exploratory Testing)

定义:探索性测试是测试人员根据自己对软件的理解,自由地对软件进行测试,并在测试过程中不断调整测试策略和测试方法。

特点

  • 动态性:测试人员可以根据测试过程中的发现随时调整测试计划。
  • 学习性:测试人员通过测试过程不断加深对软件的理解。
  • 高效性:能够在短时间内发现一些关键的缺陷。
7. 权限测试(Authorization Testing)

定义:权限测试主要关注系统对用户权限的控制是否准确有效,确保用户只能访问其被授权的资源。

测试内容

  • 角色分配:验证系统是否正确地将用户分配到相应的角色。
  • 权限验证:测试用户是否能够按照其角色权限访问相应的资源。
  • 数据隔离:确保不同用户之间的数据相互隔离,避免数据泄露。

这些测试类型在软件测试过程中各有侧重,共同构成了软件质量保证的重要手段。

三、测试计划

1.测试计划包含哪些内容

测试计划是软件测试过程中的重要文档,它详细规划了测试活动的各个方面,以确保测试工作的全面、系统、有序进行。一个完整的测试计划通常包含以下内容:

1. 项目概述
  • 项目背景:明确项目的起源、目的和重要性。
  • 项目目标:说明项目的具体目标,包括期望的成果和效果。
  • 被测对象:详细描述被测试的应用程序或软件系统的类型、版本等基本信息。
2. 测试目标

描述通过测试要达到的具体目的,如功能测试、性能测试、安全性测试等,以确保软件或应用程序的各个方面都得到全面评估。

3. 测试范围

明确测试的具体范围,包括要测试的功能、模块、接口等,以及它们的优先级和测试顺序。

4. 测试策略
  • 测试方法:确定测试的总体思路和方法,如单元测试、集成测试、系统测试、验收测试等。
  • 风险控制:阐述在测试过程中可能遇到的风险及相应的控制措施。
5. 测试环境

详细描述测试所需的软硬件环境,包括操作系统、数据库、网络环境、硬件设备等配置要求。

6. 测试资源
  • 人力资源:说明测试过程中所需的人员及其角色分配。
  • 其他资源:包括时间、预算、测试工具等资源情况,确保测试工作的顺利进行。
7. 测试数据

提供必要的测试数据,包括初始数据、中间数据和最终数据,以确保测试的全面性和准确性。这些数据应覆盖所有测试场景,以验证软件的稳定性和可靠性。

8. 测试进度

制定详细的测试进度表,包括每个测试阶段的开始和结束时间,以及关键节点的里程碑事件。这有助于跟踪测试进度,确保按时完成测试任务。

9. 风险管理
  • 风险识别:识别测试过程中可能存在的风险和障碍。
  • 应对措施:针对识别的风险制定相应的应对措施,以降低风险对测试工作的影响。
10. 测试文档管理

明确测试过程中的文档管理要求,包括测试计划、测试报告、缺陷跟踪等文档的编写、整理和提交。这些文档对于记录测试过程、分析测试结果和跟踪缺陷修复具有重要意义。

11. 测试标准

制定测试开始、挂起、恢复及结束的标准,以确保测试过程的规范性和一致性。这些标准有助于判断测试是否达到预期的效果和目标。

2.怎么编写计划

编写测试计划是一个系统而详细的过程,旨在确保软件测试活动的顺利进行和有效管理。以下是一个编写测试计划的详细步骤和要点:

一、确定测试目标和范围
  1. 明确测试目标:根据软件的具体情况和用户需求,定义测试的目标和预期结果。测试目标可以是性能、功能、兼容性、安全性等。
  2. 确定测试范围:明确需要测试的功能、模块、接口等,以及它们的优先级和测试顺序。
二、收集和分析项目信息
  1. 项目背景和需求:了解项目的起源、目的、业务需求和功能需求。
  2. 技术架构和相关规范:熟悉项目的技术架构、接口文档、UI原型图等相关规范。
三、制定测试策略
  1. 选择合适的测试类型:如功能测试、性能测试、安全测试等。
  2. 决定测试的深度和广度:根据项目的特点和需求,确定测试的详细程度和覆盖范围。
  3. 制定风险控制措施:识别和评估项目可能遇到的风险,并制定相应的风险控制措施。
四、规划测试资源
  1. 人力资源:确定测试团队的人员构成和角色分配,包括测试组长、测试工程师等。
  2. 其他资源:考虑所需的硬件、软件、测试工具和网络环境等资源。
五、编写测试计划文档

测试计划文档应包含以下内容:

  1. 项目概述:简要介绍项目的背景、目标、被测对象等信息。
  2. 测试目标和范围:详细阐述测试的目标和范围。
  3. 测试策略:描述测试的类型、方法、深度和广度等策略。
  4. 测试环境:详细描述测试所需的软硬件环境,包括操作系统、数据库、网络环境等。
  5. 测试资源:列出测试所需的人力资源、硬件资源、软件资源和测试工具等。
  6. 测试进度:制定详细的测试进度表,包括每个测试阶段的开始和结束时间,以及关键节点的里程碑事件。
  7. 风险管理:识别测试过程中可能存在的风险,并制定相应的应对措施。
  8. 测试标准和准则:明确测试的标准和准则,如测试通过的标准、缺陷的严重级别和优先级等。
  9. 测试方法和技术:描述将采用的测试方法和技术,如黑盒测试、白盒测试、灰盒测试等。
  10. 测试数据:提供必要的测试数据,包括正常数据、异常数据和边界数据等。
六、评审和更新测试计划
  1. 评审测试计划:与相关团队成员一起评审测试计划,收集意见和建议。
  2. 更新测试计划:根据评审结果进行必要的更新和完善,确保测试计划的准确性和可行性。
七、执行和跟踪测试计划
  1. 按照测试计划执行测试:按照测试计划的步骤和时间节点进行测试用例的执行。
  2. 跟踪测试进度和结果:及时记录每个测试结果的详细信息,如执行日期、执行人员、问题描述等,并跟踪测试进度。
  3. 调整测试计划:对出现的偏差及时采取措施进行调整,确保测试计划的顺利进行。

四、测试评审

1.为什么要做需求分析?

需求分析在软件开发过程中起着至关重要的作用,主要原因有以下几点:

  1. 明确目标和范围:需求分析的首要任务是明确软件需要解决的问题、实现的目标以及达到的性能指标。这有助于开发团队对项目有一个清晰的认识,确保项目方向正确,避免在开发过程中偏离目标。
  2. 确保用户需求得到满足:需求分析通过直接与用户或客户沟通,收集和整理他们的需求,确保最终开发的软件能够真正满足用户的使用需求。这有助于提升软件的用户满意度和市场竞争力。
  3. 促进项目管理和控制:通过需求分析,可以将复杂的软件项目分解成多个较小的、可管理的部分,有助于项目经理进行任务分配、时间规划和风险管理。同时,需求分析也提供了项目评估的依据,帮助决策者判断项目的可行性和投资价值。
  4. 提高软件质量和效率:详细的需求分析可以揭示潜在的问题和冲突,及早发现和解决这些问题可以避免在后续的开发过程中产生更多的错误和返工。此外,明确的需求也有助于开发团队更准确地估算开发成本和周期,提高开发效率。
  5. 支持后续阶段的工作:需求分析为软件设计、开发、测试和维护等后续阶段提供了基础。详细的需求规格说明书可以作为设计和编码的依据,帮助开发人员理解并实现软件功能。同时,它也为测试人员提供了测试的标准和准则,确保软件质量符合预期。
  6. 减少沟通成本:通过需求分析,可以建立统一的沟通平台,确保项目相关方对项目的需求有共同的理解。这有助于减少因沟通不畅导致的误解和冲突,提高团队之间的协作效率。
  7. 应对变更:在软件开发过程中,需求变更几乎是不可避免的。通过需求分析建立的需求变更管理流程,可以确保变更请求得到及时、有效的处理,并尽量减少对项目进度和成本的影响。
2.怎么做需求分析?

进行需求分析是一个系统而详细的过程,旨在确保软件开发项目能够准确满足用户和业务的需求。以下是如何进行需求分析的具体步骤和方法:

一、需求分析的基本步骤
  1. 需求获取
    • 目的:深入实际,在充分理解用户需求的基础上,获取系统的综合需求。
    • 方法:
      • 访谈法:与用户、客户、利益相关者进行面对面的交流,了解他们的需求、期望和问题。
      • 问卷调查法:设计问卷,向用户群体广泛征求意见和建议,收集大量数据和信息。
      • 竞品分析法:调研和分析市场上同类产品或项目,了解竞争对手的优势和劣势,找出用户对现有产品的不满和期望。
  2. 需求建模
    • 目的:对已获取的需求进行分析和提炼,进行抽象描述,建立目标系统的逻辑模型。
    • 方法:
      • 使用思维导图、UML图等工具对需求进行可视化表示。
      • 通过原型法制作产品原型或模型,让用户直观地感受和体验产品的功能和特性。
  3. 需求规约
    • 目的:对需求模型进行精确的、形式化的描述,为计算机系统的实现提供基础。
    • 方法:
      • 编写详细的需求规格说明书,明确需求的具体内容、约束条件、性能指标等。
      • 使用专业的需求管理工具进行需求跟踪和管理。
  4. 需求验证
    • 目的:发现需求分析的错误和缺陷,确保需求说明准确、完整地表达系统的主要特性。
    • 方法:
      • 通过需求评审会议,邀请相关方对需求规格说明书进行审查和确认。
      • 使用测试用例对需求进行验证,确保需求得到正确实现。
二、需求分析的方法
  1. 用户故事法
    • 以用户视角来描述产品需求和功能,通过讲述用户故事来表达用户的需求和期望。
  2. HWM分析法(How Might We)
    • 在头脑风暴前进行拆解分析,明确用户和问题,并尝试从多个角度(如否定、积极、转移等)寻找解决方案。
  3. 马斯洛需求层次理论
    • 在产品探索阶段进行,找到产品的核心方向,满足用户的不同层次需求(如生理需求、安全需求、社交需求、尊重需求和自我实现需求)。
  4. KANO模型
    • 用于对用户需求进行分类和优先排序,评估需求对用户满意度的影响,区分必要型需求、期望型需求、兴奋型需求等。
  5. 四象限法则
    • 根据需求的紧急程度和重要性进行分类,优先处理紧急且重要的需求。
三、注意事项
  1. 有效分析:
    • 分析需求时,要站在满足业务目标的立场上,而不是技术角度。
    • 挖掘用户表达出来的不满、抱怨、吐槽、期望背后的真正问题。
  2. 综合考虑多种需求:
    • 除了用户需求外,还要考虑价值需求、功能需求、维护性需求和非功能性需求等。
  3. 使用合适的工具:
    • 利用Excel进行数据收集和整理,使用思维导图工具进行需求建模,使用专业的需求管理工具进行需求跟踪和管理。
3.如何提高需求分析能力?

提高需求分析能力是软件开发和项目管理中的关键技能,以下是一些建议和方法,可以帮助你提升这一能力:

一、深入理解业务和用户
  1. 学习业务知识:深入了解你所处行业的业务逻辑、市场趋势和竞争态势,这有助于你更准确地把握业务需求。
  2. 用户研究:通过访谈、问卷调查、用户观察等方式,深入了解用户的使用场景、需求和痛点。尝试站在用户的角度思考问题,理解他们的真实需求。
二、掌握需求分析方法和工具
  1. 学习需求分析方法:如访谈法、问卷调查法、头脑风暴法、竞品分析法等,这些方法可以帮助你更全面地收集和分析需求。
  2. 使用需求分析工具:如Excel、思维导图工具(MindManager、XMind)、专业的需求管理工具(Pinecrest、MindCruncher)等,这些工具可以帮助你更好地整理、分析和跟踪需求。
三、培养批判性思维和问题解决能力
  1. 批判性思维:学会质疑和评估收集到的信息,避免盲目接受或拒绝需求。通过多角度、多层次的思考,发现潜在的问题和需求。
  2. 问题解决能力:面对复杂的需求问题,能够迅速找到问题的根源,并提出有效的解决方案。这需要你具备扎实的业务知识和丰 富的实践经验。
四、持续学习和实践
  1. 关注行业动态:保持对行业动态的关注,了解最新的技术、产品和市场趋势。这有助于你更准确地把握用户需求和市场变化。
  2. 参与项目实践:通过参与实际的项目实践,不断积累经验和教训。在项目中,你可以将所学的理论知识应用到实践中,并不断优化自己的需求分析方法和技巧。
五、提升沟通和协作能力
  1. 有效沟通:与团队成员、用户和客户保持有效的沟通,确保信息的准确传递和理解。通过清晰的表达和倾听,减少误解和冲突。
  2. 团队协作:与团队成员紧密合作,共同完成需求分析工作。通过集思广益和协作分工,提高需求分析的效率和质量。
六、培养系统思维和结构化思维
  1. 系统思维:将需求看作一个整体系统,关注各个部分之间的关联和相互影响。通过系统思维,你可以更全面地把握需求的全貌和复杂性。
  2. 结构化思维:将复杂的需求问题拆解成简单的子问题,并逐个解决。通过结构化思维,你可以更清晰地看到问题的本质和解决方案的路径。

五、测试用例

1.什么是测试用例?

测试用例(Test Case)是软件测试中的基本概念,它是一组为了特定目标而设计的测试输入、执行条件以及预期结果的文档或记录。测试用例用于指导测试执行人员如何对系统进行测试,以验证系统是否满足规定的需求,以及是否存在缺陷。

一个完整的测试用例通常包含以下几个部分:

  1. 测试用例编号:用于唯一标识测试用例,便于管理和追踪。
  2. 测试标题:简要描述测试用例的目的或功能点。
  3. 测试目的:明确说明该测试用例的目的,即验证系统的哪个功能或特性。
  4. 前置条件:执行该测试用例之前系统必须满足的状态或条件。
  5. 测试输入:包括测试数据、操作步骤或用户行为等,是测试执行过程中需要给系统的输入。
  6. 执行步骤:详细描述如何执行测试,包括操作步骤和顺序。
  7. 预期结果:明确指出执行测试后,系统应该产生的结果或行为。
  8. 实际结果:在测试执行后,记录系统实际产生的结果或行为,用于与预期结果进行比较。
  9. 测试结果:根据实际结果与预期结果的比较,判断测试是否通过。
  10. 备注:用于记录测试过程中遇到的问题、解决方案或其他需要说明的信息。

测试用例的设计是软件测试过程中的关键活动之一,它直接影响测试的质量和效率。良好的测试用例应该具有全面性、代表性、可重复性和可追踪性等特点,以确保测试能够覆盖到系统的所有重要功能和场景,并且能够准确地发现潜在的缺陷。

测试用例的设计方法有很多,如等价类划分、边界值分析、因果图法、正交实验设计、场景法等,测试人员可以根据具体的测试需求和系统特点选择合适的设计方法。

2.编写测试用例的作用?

编写测试用例在软件测试过程中起着至关重要的作用。以下是编写测试用例的几个主要作用:

  1. 确保测试的全面性:通过编写测试用例,测试人员可以系统地规划测试范围,确保所有的功能和场景都被覆盖到。这有助于减少遗漏,提高测试的全面性。
  2. 明确测试目标和预期结果:每个测试用例都明确指出了测试的目的、输入、执行步骤和预期结果。这使得测试执行人员能够清晰地了解他们需要做什么,以及他们应该期待什么结果。这有助于减少误解和错误判断。
  3. 提高测试的可重复性:由于测试用例是文档化的,因此它们可以被不同的测试人员在不同的时间重复执行。这有助于验证修复后的缺陷是否真正被解决,以及确保软件在不同环境或配置下的行为是一致的。
  4. 便于跟踪和管理:测试用例通常会被存储在测试管理系统中,并与需求、缺陷等进行关联。这使得测试团队能够轻松地跟踪测试进度、管理测试资源,并在需要时重新执行测试用例。
  5. 提高测试效率:通过编写测试用例,测试人员可以在测试之前对测试内容和步骤进行规划和优化。这有助于减少测试过程中的冗余和无效工作,提高测试效率。
  6. 促进沟通和协作:测试用例是开发团队、测试团队和其他相关利益方之间沟通的重要工具。它们有助于明确测试的范围、目标和标准,促进团队成员之间的协作和共识。
  7. 作为评估测试质量的依据:测试用例的执行结果和覆盖率是衡量测试质量的重要指标。通过统计和分析测试用例的执行情况,测试团队可以评估测试工作的充分性和有效性,并据此改进测试策略和流程。
  8. 支持自动化测试:许多测试用例可以被转化为自动化测试脚本,从而支持自动化测试的执行。这不仅可以提高测试效率,还可以减少人为错误,并确保测试的准确性和一致性。

综上所述,编写测试用例是软件测试过程中不可或缺的一环。它有助于确保测试的全面性、明确性、可重复性、可管理性和高效性,并为评估测试质量提供支持。

3.测试用例的组成
  1. 测试用例编号:用于唯一标识测试用例,便于管理和追踪。
  2. 测试标题:简要描述测试用例的目的或功能点。
  3. 测试目的:明确说明该测试用例的目的,即验证系统的哪个功能或特性。
  4. 前置条件:执行该测试用例之前系统必须满足的状态或条件。
  5. 测试输入:包括测试数据、操作步骤或用户行为等,是测试执行过程中需要给系统的输入。
  6. 执行步骤:详细描述如何执行测试,包括操作步骤和顺序。
  7. 预期结果:明确指出执行测试后,系统应该产生的结果或行为。
  8. 实际结果:在测试执行后,记录系统实际产生的结果或行为,用于与预期结果进行比较。
  9. 测试结果:根据实际结果与预期结果的比较,判断测试是否通过。
  10. 备注:用于记录测试过程中遇到的问题、解决方案或其他需要说明的信息。
4.测试用例的设计方法

测试用例的设计方法多种多样,旨在全面、有效地验证软件的功能、性能和稳定性。以下是几种常用的测试用例设计方法:

1. 等价类划分法
  • 原理:将测试的范围划分成几个互不相交的子集(等价类),每个子集中的数据对程序应有相同的影响。从每个等价类中选取一个代表值作为测试用例,确保所有有效等价类和无效等价类至少有一个测试用例覆盖。
  • 应用:适用于输入条件有多种情况,且每种情况对程序影响相似的场景。
2. 边界值分析法
  • 原理:关注输入变量的边界条件,在边界点及其附近设计测试用例。因为错误往往发生在输入或输出范围的边界上,而不是在内部。
  • 应用:对数值范围、字符长度等边界条件进行测试,如测试最小值、略小于最小值、正常值、略大于最大值以及最大值的情况。
3. 因果图法
  • 原理:使用图形表示系统行为与多个输入条件之间的逻辑关系,并据此生成满足所有可能逻辑组合的测试用例。
  • 应用:适用于输入条件之间有相互制约关系的场景,通过因果图可以清晰地表示出输入条件与输出结果之间的逻辑关系。
4. 判定表法
  • 原理:将多个输入条件及其对应输出结果整理成表格形式,根据表格中的每一种条件组合设计相应的测试用例。
  • 应用:适用于逻辑判断复杂的场景,通过穷举条件获得结果,并对结果进行优化合并,得到一个判断清晰的策略表。
5. 正交实验法
  • 原理:在各因素互相独立的情况下,设计出一种特殊的表格(正交表),找出能以少数替代全面的测试用例。
  • 应用:适用于输入参数较多且参数间可能存在交互作用的场景,通过正交表可以选择一组具有代表性的测试条件组合来减少测试用例的数量。
6. 错误推测法
  • 原理:根据经验、直觉或者历史项目中的常见问题,推测潜在错误并设计测试用例以发现类似问题。
  • 应用:适用于对程序逻辑有深入了解的测试人员,可以根据对程序的理解和经验来推测可能存在的错误点。
7. 场景法
  • 原理:模拟特定场景,通过某事件来触发某动作,并观察最终结果,从而发现需求中存在的问题。
  • 应用:适用于业务流程复杂、需要模拟用户实际使用场景的场景,通过场景法可以模拟完整的操作过程来验证系统的功能和行为是否符合预期。
8. 路径覆盖法
  • 原理:确保控制流路径被充分测试,如语句覆盖、分支覆盖、条件覆盖、路径覆盖等。
  • 应用:适用于对程序内部逻辑和路径有较高要求的测试场景,通过路径覆盖法可以确保程序中的每一条路径都被执行到。
9. 需求分析法
  • 原理:直接基于软件需求规格说明书详细描述的功能和非功能需求来编写测试用例。
  • 应用:适用于需求明确、详细的场景,通过直接对照需求规格说明书来编写测试用例,可以确保测试用例与需求的一致性。

以上是几种常用的测试用例设计方法,每种方法都有其适用的场景和优缺点。在实际测试过程中,测试人员可以根据项目的具体情况和需求选择合适的测试用例设计方法,以确保测试的全面性和有效性。

5.怎么保证用例覆盖度

保证用例覆盖度是软件测试中至关重要的一环,它直接关系到软件质量的可靠性。以下是一些关键的策略和步骤,以确保测试用例能够全面覆盖软件系统的各个方面:

一、明确测试需求
  1. 细化需求:将软件需求细化为具体的测试需求点,确保每个需求点都有明确的测试目标和预期结果。
  2. 需求分类:将需求按照类型(如功能需求、性能需求、安全需求等)进行分类,以便针对不同的需求类型设计相应的测试用例。
二、设计全面的测试用例
  1. 覆盖所有需求:确保每个需求点都有至少一个测试用例与之对应,以实现需求的全面覆盖。
  2. 采用多种测试设计方法:如等价类划分、边界值分析、因果图法、错误猜测法等,这些方法可以帮助识别并设计出各种典型和边缘场景的测试用例。
  3. 考虑边界条件和异常情况:在设计测试用例时,特别关注边界条件和异常情况,因为这些地方往往容易出现问题。
三、确保测试用例的可执行性和可测性
  1. 清晰的测试步骤:测试用例应包含清晰的测试步骤和预期结果,以便测试人员能够准确地执行测试并验证结果。
  2. 合理的测试数据:为测试用例准备合理的测试数据,以确保测试能够真实反映软件系统的运行情况。
四、实施测试用例评审
  1. 组织评审会议:定期组织测试用例评审会议,邀请需求、开发、测试等相关人员参加,对测试用例进行全面审查。
  2. 关注评审重点:在评审过程中,重点关注测试用例的结构和组织是否清晰、优先级是否合理、是否具有可执行性和可测性等。
  3. 持续改进:根据评审结果对测试用例进行持续改进和优化,以提高用例覆盖度和测试质量。
五、利用自动化测试工具
  1. 引入自动化测试:对于重复性强、易于自动化的测试用例,可以考虑引入自动化测试工具来执行,以提高测试效率和覆盖率。
  2. 持续集成:将自动化测试与持续集成流程相结合,实现代码的自动化构建、测试和部署,以便及时发现和修复问题。
六、关注测试覆盖度指标
  1. 监控覆盖度指标:定期监控测试用例的覆盖度指标(如语句覆盖、分支覆盖、条件覆盖、路径覆盖等),以评估测试活动的有效性和全面性。
  2. 设定目标:根据项目的实际情况和风险评估结果,设定合理的用例覆盖度目标,并努力达成这些目标。
七、加强测试团队协作与沟通
  1. 明确角色与职责:在测试团队中明确各成员的角色和职责,确保测试工作能够有序进行。
  2. 加强沟通与协作:加强测试人员与开发人员、需求人员之间的沟通与协作,共同解决测试过程中遇到的问题和挑战。

通过以上措施的实施,可以显著提高测试用例的覆盖度,从而保障软件系统的质量和可靠性。然而,需要注意的是,完全覆盖一个软件系统是不可能的,因此测试人员需要根据项目的实际情况和风险评估结果来设定合理的用例覆盖度目标,并持续努力改进和优化测试工作。

测试用例练手:xmind思维导图、excel测试用例

1.登录的测试用例 2.微信分享测试用例 3.电梯测试用例 4.饮料自动贩卖机的测试用例

六、BUG(缺陷)

1.BUG(缺陷) 的定义
一、基本概念

BUG本意是臭虫、缺陷、损坏等意思,现在通常指在电脑系统或程序中隐藏着的、未被发现的缺陷或问题。这些缺陷或问题可能导致软件运行不正常、功能失效、死机、数据丢失或非正常中断等现象。在中文中,BUG常被称作“缺陷”,这一术语更能反映事情的本质,即程序本身存在的问题或偏差。

二、具体表现

BUG在软件中的具体表现可能包括:

  1. 功能不正常:软件中的某个功能无法按照预期工作,或者工作结果与预期不符。
  2. 体验不佳:用户界面不友好、操作不流畅或存在其他影响用户体验的问题。
  3. 死机或崩溃:软件在运行过程中突然停止响应或崩溃。
  4. 数据丢失:软件中的数据被意外删除或丢失。
  5. 非正常中断:软件在运行过程中被意外中断,无法继续执行。
三、影响与分类

BUG对软件的质量和用户体验产生负面影响,因此需要及时进行修复。根据BUG的严重程度和影响范围,可以将其分为不同的等级,如严重、一般、轻微等。同时,BUG还可以根据其产生的原因和性质进行分类,如代码错误、设计缺陷、配置问题等。

2.提交BUG规范、包含哪些要素

提交BUG的规范以及包含的要素对于确保软件开发团队能够有效地跟踪、理解和修复问题至关重要。以下是根据多个来源整理的提交BUG规范及包含的关键要素:

提交BUG规范
  1. 明确模块划分:
    • 由于开发团队通常是分模块进行开发的,因此在提交BUG时,需要明确指出BUG所属的模块,以便测试管理人员和开发管理人员能够迅速评估问题的严重性和工作压力。
  2. 标题精炼:
    • BUG的标题应简洁明了,能够概括问题的本质。同时,可以在标题前使用括号注明模块和环境,如“【XX环境-XX模块】XXXXXXXXX问题”,以便快速识别问题所在。
  3. 同类问题汇总:
    • 如果发现多个BUG是由同一原因引起的,应将这些BUG汇总成一个报告,以便开发人员能够统一排查和解决。
  4. 复现步骤清晰:
    • 提交BUG时,需要详细描述复现问题的步骤,包括前提条件操作步骤预期结果实际结果。同时,应提供截图或视频等证明材料,以便开发人员更容易理解问题。
  5. 不稳定BUG注明复现概率:
    • 对于不能百分百复现的BUG,需要注明复现概率,并尽可能提供提升复现概率的方法。
  6. 合理分级:
    • 根据BUG的严重程度和紧急程度进行分级,以便开发团队能够优先处理影响进度的问题。
提交BUG包含的要素
  1. BUG编号:
    • 每个BUG都应有一个唯一的编号,以便在缺陷管理系统(禅道)中进行追踪。
  2. BUG标题:
    • 简短描述BUG的本质,包括在什么情况下执行了什么操作导致的问题。
  3. 所属系统和模块:
    • 指明BUG所属的系统和模块,以便开发团队能够快速定位问题。
  4. 发现的版本:
    • 记录发现BUG的软件版本,以便开发团队了解问题的范围和影响。
  5. BUG提交人:
    • 记录提交BUG的人员信息,以便后续沟通和确认。
  6. 错误类型:
    • 如代码错误、界面优化、设计缺陷、配置相关、安装部署、安全相关、性能问题等。
  7. 严重级别和优先级:
    • 根据问题的严重性和对业务的影响程度进行分级。
  8. 复现步骤:
    • 详细描述复现问题的步骤,包括前提条件、操作步骤、预期结果和实际结果。
  9. 附件:
    • 提供与BUG相关的截图、视频、日志文件等证明材料。
  10. 备注:
    • 提供其他有助于理解和解决问题的信息。
3.BUG(缺陷)的管理方法

BUG(缺陷)的管理方法是软件开发过程中的重要环节,它涉及发现、报告、跟踪和解决软件中的缺陷。以下是一套系统的BUG管理方法:

一、缺陷报告

在软件测试过程中,测试人员一旦发现缺陷,需要准确地记录缺陷的详细信息,这些信息通常包括:

  • 缺陷描述:对缺陷进行清晰、简洁的描述,确保开发人员能够理解问题的本质。
  • 重现步骤:提供一系列步骤,以便开发人员能够重现缺陷,从而进行修复。
  • 缺陷的严重程度和优先级:根据缺陷的影响程度和修复紧迫性进行分类,有助于开发团队优先处理最严重的缺陷。
二、缺陷分类和分级

测试团队会对每个缺陷进行分类和分级,常见的分类包括:

  • 功能性缺陷:与软件功能实现不符的问题。
  • 性能问题:软件运行效率不达标的问题。
  • 用户界面问题:用户界面设计不合理或用户体验差的问题。

分级则根据缺陷的严重程度和影响范围进行划分,如致命、严重、一般、轻微等。

三、缺陷分配

一旦缺陷被报告,测试团队需要将其分配给相应的开发人员或团队进行修复。分配时通常会考虑开发人员的专业领域、负责的模块或功能等因素。

四、缺陷跟踪

跟踪缺陷是确保缺陷得到及时解决的关键步骤。测试团队会使用缺陷跟踪系统或工具来记录缺陷的状态、解决进度和相关讨论等信息。这有助于团队成员之间的沟通和协作,并确保缺陷得到适时处理。常见的缺陷跟踪状态包括:

  • 新建:可能出现的缺陷,但尚未得到验证。
  • 分配:将创建的缺陷分配给开发团队。
  • 激活:缺陷处于开发团队排查或解决中。
  • 测试:缺陷已被开发团队标记为已解决,软件测试人员进行测试。
  • 验证:缺陷已由软件测试人员进行回归验证。
  • 关闭:关闭已验证通过的缺陷。
  • 重新激活:缺陷未修复好,软件测试人员标记为重新激活或重新打开分配给开发团队以进行修复。
  • 延迟:因某些因素需要,暂缓该缺陷的修复。
  • 拒绝:开发团队拒绝修复该缺陷,可能是因为该缺陷是重复的、不是缺陷或不可重现。
五、缺陷解决和验证

开发人员接收到分配的缺陷后,会进行相应的修复工作。修复完成后,测试团队会重新测试相关功能或模块,以确认缺陷是否已经得到解决。

六、缺陷关闭

一旦缺陷被修复并且经过验证,测试团队会将其标记为已关闭。此时,缺陷报告中的状态将被更新为已解决,并且相关的文档和记录也会进行更新。

七、缺陷统计和分析

测试团队可以根据缺陷报告和缺陷跟踪系统中的数据生成报告,以便评估软件质量、发现潜在的趋势和改进测试过程。这有助于团队在未来的开发过程中避免类似缺陷的出现,提高软件的整体质量。

4.BUG(缺陷) 完整的生命周期
  • 新建:可能出现的缺陷,但尚未得到验证。
  • 分配:将创建的缺陷分配给开发团队。
  • 激活:缺陷处于开发团队排查或解决中。
  • 测试:缺陷已被开发团队标记为已解决,软件测试人员进行测试。
  • 验证:缺陷已由软件测试人员进行回归验证。
  • 关闭:关闭已验证通过的缺陷。
  • 重新激活:缺陷未修复好,软件测试人员标记为重新激活或重新打开分配给开发团队以进行修复。
  • 延迟:因某些因素需要,暂缓该缺陷的修复。
  • 拒绝:开发团队拒绝修复该缺陷,可能是因为该缺陷是重复的、不是缺陷或不可重现。

二、计算机基础

一、计算机的基础

1.计算机运行原理

input(键盘、鼠标等等)

  1. 发出启动命令 2.控制信号 3.载入内存 4. 载入计算器 5.输出结果

output (屏幕、音响等等)

img

2.操作系统

操作系统是计算机软硬件系统的中枢,常见的操作系统有多种,以下是一些主要的操作系统:

一、桌面操作系统
  1. Windows
    • 开发商:微软(中国)有限公司
    • 简介:Windows是微软公司研发的操作系统,自1985年推出以来,已成为全球应用广泛的操作系统。Windows采用了图形用户界面,提升了系统的易用性,并具有良好的硬件适应性,支持多种硬件平台。目前,Windows有多个系统版本,如Windows 10、Windows 11等。
  2. macOS
    • 开发商:苹果公司
    • 简介:macOS是由苹果公司开发的运行于Macintosh系列电脑上的操作系统,首次发布于1984年。macOS是基于XNU混合内核的图形化操作系统,属于类Unix的商业操作系统,采用闭源的方式,只适用于苹果公司出品的PC产品。
  3. Linux
    • 简介:Linux是一种自由和开放源代码的类Unix操作系统,起源于20世纪90年代初,由林纳斯·托瓦兹首次发布。Linux可以运行在多种硬件平台上,如x86、ARM等,并广泛应用于服务器、桌面、嵌入式等领域。Linux具有高度的稳定性和安全性,以及强大的网络功能和可定制性。
  4. 麒麟软件KYLINSOFT
    • 开发商:麒麟软件有限公司
    • 简介:麒麟软件隶属于中国电子集团旗下,以安全可信操作系统技术为核心,面向通用和专用领域打造安全创新操作系统产品。其产品包括桌面操作系统、服务器操作系统等,全面支持飞腾、鲲鹏、龙芯等国产主流CPU。
  5. 统信UOS
    • 开发商:统信软件技术有限公司
    • 简介:统信UOS是统信软件技术有限公司研发的操作系统,专注于为不同行业提供安全稳定、智能易用的产品与解决方案。统信UOS能够满足不同用户和应用场景对操作系统产品的广泛需求,为政企行业信息化、数字经济建设提供坚实可信的基础支撑。
二、移动操作系统
  1. iOS
    • 开发商:苹果公司
    • 简介:iOS是由苹果公司开发的移动操作系统,最初设计给iPhone使用,后来陆续套用到iPod touch、iPad上。iOS以其出色的用户界面、设计和优化而闻名,广泛应用于苹果公司的移动设备中。
  2. Android
    • 开发商:谷歌公司
    • 简介:Android是谷歌公司旗下的一种基于Linux的自由及开放源代码的操作系统,主要应用于智能手机和平板电脑等移动设备。Android由操作系统、中间件、用户界面和应用软件组成,由Google与多家硬件制造商、软件开发商及电信营运商共同研发改良。
  3. 鸿蒙HarmonyOS
    • 开发商:华为投资控股有限公司
    • 简介:鸿蒙HarmonyOS是华为发布的面向全场景的分布式开源操作系统,广泛应用于各类智能终端设备。鸿蒙系统通过将人、设备、场景有机地联系在一起,实现消费者在全场景生活中接触的多种智能终端的极速发现、极速连接、硬件互助、资源共享。
三、服务器操作系统
  1. Windows Server
    • 开发商:微软(中国)有限公司
    • 简介:Windows Server是微软公司研发的服务器操作系统,提供了用于运行网络和应用程序的服务器环境。Windows Server具有易于部署和管理、高可靠性和安全性等特点,广泛应用于企业服务器领域。
  2. Linux(服务器版)
    • 简介:Linux服务器版是Linux操作系统在服务器领域的应用,具有高度的稳定性和安全性,以及强大的网络功能和可定制性。Linux服务器版广泛应用于Web服务器、数据库服务器、邮件服务器等领域。
3.网络

1.网线 2.光纤 3. 单位 4.物理IP、内网IP、子网掩码、网关 5.协议

img

4.CPU、内存、线程、进程等
CPU处理器 : Intel i5-13490F 核心数 10 (6P+4E) 线程数 16 (12P+4E)工艺 Intel 7  AMD    控制器、处理器
		   i3入门  i5初级  i7高级  i9旗舰  代数  级别  F无核显 K超频  S顶级
内存条:  DDR5  5000-8000 hz  依赖于主板支持什么
        DDR4  2000-4000 hz  虚拟内存 物理内存
核心数: CPU一共有多少个核心同时处理任务
线程:CPU可以同时处理多少个任务
进程:一个程序线程包含很多个进程->子任务

二、Linux系统

1.Linux系统的安装和基本管理
  • 安装VmWare
  • 安装XShell、Xftp
  • 在Linux下安装java-jdk
2.Linux系统常用命令
一、文件和命令
1、cd 命令
(它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径)
cd /home 进入 ‘/ home’ 目录
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd / 返回跟目录
cd - 返回上次所在的目录
mkdir <目录名> 创建目录
mkdir dir1 dir2 同时创建两个目录
mkdir -p /tmp/dir1/dir2 递归创建目录树
rm -f file1 删除’file1’⽂件
rmdir dir1 删除’dir1’⽬录
rm -rf dir1 删除’dir1’⽬录和其内容
-rm -rf dir1 dir2 同时删除两个⽬录及其内容

2、pwd 命令
pwd 显示工作路径

3、ls 命令
ls 查看目录中的文件
ls -l 显示文件和目录的详细资料
ls -a 列出全部文件,包含隐藏文件
ls -lh 查看⽂件和⽬录的详情列表(增强⽂件⼤⼩易读性)
ls -lSr 查看⽂件和⽬录列表(以⽂件⼤⼩升序查看)
tree 查看⽂件和⽬录的树形结构 (如果没有需要先安装 yum install tree)
ls -R 连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来
ls -al /proc/pid/exe 通过pid查询程序正在运行的路径

4、cp 命令
(用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下)
-a 将文件的特性一起复制
-p 连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
-i 若目标文件已经存在时,在覆盖时会先询问操作的进行
-r 递归持续复制,用于目录的复制行为
-u 目标文件与源文件有差异时才会复制
-cp dir/* . 复制某目录下的所有文件至当前目录
cp -a dir1 dir2 复制目录
cp -a /temp/dir1 . 复制一个目录至当前目录
ln -s file1 link1 创建指向⽂件/⽬录的软链接
ln file1 lnk1 创建指向⽂件/⽬录的物理链接
touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)

5、mv 命令
-f force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i 若目标文件已经存在,就会询问是否覆盖
-u 若目标文件已经存在,且比目标文件新,才会更新
1 old_dir new_dir 重命名/移动⽬录
6、rm 命令
-f :就是force的意思,忽略不存在的文件,不会出现警告消息
-i :互动模式,在删除前会询问用户是否操作
-r :递归删除,最常用于目录删除,它是一个非常危险的参数
二、查看文件内容
7、cat 命令
(用于查看文本文件的内容,后接要查看的文件名,通常可用管道与 moreless 一起使用)
cat file1 从第一个字节开始正向查看文件的内容
cat -n file1 标示文件的行数
cat xxx.txt awk ‘NR%2==1tac file1 从最后一行开始反向查看一个文件的内容
more file1 查看一个长文件的内容
less file1 类似 more 命令,但允许方向操作
head -n 2 file1 查看一个文件的前两行
tail -f /log/msg 实时查看添加到⽂件中的内容
tail -n 2 file1 查看一个文件的最后两行
tail -n +1000 file1 从1000行开始显示,显示1000行以后的
cat filename | head -n 3000 | tail -n +1000 显示1000行到3000行
cat filename | tail -n +3000 | head -n 1000 从第3000行开始,显示1000(即显示3000~3999行)
grep ss hello.txt 在⽂件hello.txt中查找关键词 ss
grep ^s hello.txt 在⽂件hello.txt中查找以 s 开头的内容
grep [0-9] hello.txt 选择hello.txt⽂件中所有包含数字的⾏
sed 's/ss/mm/g' hello.txt 将hello.txt⽂件中的 ss 替换成 mm
sed '/^$/d' hello.txt 从hello.txt⽂件中删除所有空⽩⾏
sed '/ *#/d; /^$/d' hello.txt 从hello.txt⽂件中删除所有注释和空⽩⾏
sed -e '1d' hello.txt 从⽂件hello.txt 中排除第⼀⾏
sed -n '/s1/p' hello.txt 查看只包含关键词"s1"的⾏
sed -e 's/ *$//' hello.txt 删除每⼀⾏最后的空⽩字符
sed -e 's/s1//g' hello.txt 从⽂档中只删除词汇s1并保留剩余全部
sed -n '1,5p;5q' hello.txt 查看从第⼀⾏到第5⾏内容
sed -n '5p;5q' hello.txt 查看第5⾏
paste file1 file2 合并两个⽂件或两栏的内容
paste -d '+' file1 file2 合并两个⽂件或两栏的内容,中间⽤"+"区分
sort file1 file2 排序两个⽂件的内容
sort file1 file2 uniq
sort file1 file2 uniq -u
sort file1 file2 uniq -d
comm -1 file1 file2 ⽐较两个⽂件的内容(去除’file1’所含内容)
comm -2 file1 file2 ⽐较两个⽂件的内容(去除’file2’所含内容)
comm -3 file1 file2 ⽐较两个⽂件的内容(去除两⽂件共有部分)
三、文件搜索
8、find 命令
find / -name file 从根目录开始搜索文件/目录
find / -user user1 搜索用户 user1 的文件/目录
find /dir -name *.bin 在目录/dir 中搜索带有 .bin 后缀的文件
find / -name file1 从 ‘/’ 开始进入根文件系统搜索文件和目录(完整文件或文件名)
find / -user user1 搜索属于用户 ‘user1’ 的文件和目录
find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
find . -regex '.*\(net\|comm\).*' ‘-regex’ 选项匹配整个路径名,出当前目录树中所有文件名中任意位置包含字符串 net 或 comm 的文件
locate *.mp4 寻找 .mp4结尾的文件
whereis <关键词> 显示某⼆进制⽂件/可执⾏⽂件的路径
whereis halt 显示一个二进制文件、源码或man的位置
which <关键词> 查找系统⽬录下某的⼆进制⽂件
which halt 显示一个二进制文件或可执行文件的完整路径
四、文件的权限 - 使用 “+” 设置权限,使用 “-” 用于取消
9、chmod 命令
ls -lh 显示当前目录所有文件的权限
chmod 777 文件名 修改文件权限(最高权限)
chmod ugo+rwx dir 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r,4 )、写(w,2)和执行(x,1)的权限
chmod go-rwx dir1 删除群组(g)与其他人(o)对目录的读写执行权限
chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限
chmod u-s /bin/file1` 禁用一个二进制文件的 SUID位
chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的
chmod g-s /home/public 禁用一个目录的 SGID 位
chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件
chmod o-t /home/public 禁用一个目录的 STIKY 位
chmod +x 文件路径 为所有者、所属组和其他用户添加执行的权限
chmod -x 文件路径 为所有者、所属组和其他用户删除执行的权限
chmod u+x 文件路径 为所有者添加执行的权限
chmod g+x 文件路径 为所属组添加执行的权限
chmod o+x 文件路径 为其他用户添加执行的权限
chmod ug+x 文件路径 为所有者、所属组添加执行的权限
chmod =wx 文件路径 为所有者、所属组和其他用户添加写、执行的权限,取消读权限
chmod ug=wx 文件路径 为所有者、所属组添加写、执行的权限,取消读权限
10、chown 命令
(改变文件的所有者)

chown user1 file1 改变一个文件的所有人属性
chown -R user1 dir1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性
chown user1:group1 file1 改变一个文件的所有人和群组属性
11、chgrp 命令
(改变文件所属用户组)

chgrp group1 file1 改变文件的群组
五、文本处理
12、grep 命令
(分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等)

grep Aug /var/log/messages 在文件 '/var/log/messages’中查找关键词"Aug"
grep ^Aug /var/log/messages 在文件 '/var/log/messages’中查找以"Aug"开始的词汇
grep [0-9] /var/log/messages 选择 ‘/var/log/messages’ 文件中所有包含数字的行
grep Aug -R /var/log/* 在目录 ‘/var/log’ 及随后的目录中搜索字符串"Aug"
sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 “string1” 替换成 “string2”
sed '/^$/d' example.txt 从example.txt文件中删除所有空白行
13、paste 命令
paste file1 file2 合并两个文件或两栏的内容(查看两文件合并后的内容)
paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分
14、sort 命令
sort file1 file2 排序两个文件的内容
sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)
sort file1 file2 | uniq -u 删除交集,留下其他的行
sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)
15、comm 命令
comm -1 file1 file2 比较两个文件的内容只删除 ‘file1’ 所包含的内容
comm -2 file1 file2 比较两个文件的内容只删除 ‘file2’ 所包含的内容
comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部
六、打包和压缩文件
16、tar 命令
对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压)推荐

-c :新建打包文件
-t :查看打包文件的内容含有哪些文件名
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
-j :通过bzip2的支持进行压缩/解压缩
-z :通过gzip的支持进行压缩/解压缩
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename :filename为要处理的文件
-C dir :指定压缩/解压缩的目录dir
压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
bunzip2 file1.bz2 解压一个叫做 'file1.bz2’的文件
bzip2 file1 压缩一个叫做 ‘file1’ 的文件
gunzip file1.gz 解压一个叫做 'file1.gz’的文件
gzip file1 压缩一个叫做 'file1’的文件
gzip -9 file1 最大程度压缩
rar a file1.rar test_file 创建一个叫做 ‘file1.rar’ 的包
rar a file1.rar file1 file2 dir1 同时压缩 ‘file1’, ‘file2’ 以及目录 ‘dir1’
rar x file1.rar 解压rar包
zip file1.zip file1 创建一个zip格式的压缩包
unzip file1.zip 解压一个zip格式压缩包
zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包
#查看当前系统的信息
uname -a
#切换管理员账号
su root
#查看当前文件夹下所有文件的信息
ll
#移动文件夹并重命名
mv 文件夹路径 新路径

三、数据库

1.数据库的基本概念

数据库(Database)是存储和组织数据的一种结构化方式,使得数据的访问、管理和更新变得更加高效和便捷。以下是数据库的一些基本概念:

  1. 数据(Data):
    • 是指存储在数据库中的信息,可以是数字、文字、图像、音频等。
  2. 数据库管理系统(DBMS, Database Management System):
    • 是一种用于存储、检索和管理数据库的软件系统。常见的DBMS包括MySQL、PostgreSQL、Oracle、SQL Server、MongoDB等。
  3. 数据库模式(Database Schema):
    • 描述数据库的结构,包括表、列、数据类型、约束条件等。模式定义了数据如何组织、存储和相互关联。
  4. 表(Table):
    • 数据库的基本存储单元,由行和列组成。每一行代表一条记录,每一列代表一个字段。
  5. 行(Row):
    • 表中的一条记录,通常包含与某一实体相关的数据。
  6. 列(Column):
    • 表中的一个字段,定义了数据的类型和含义。
  7. 主键(Primary Key):
    • 表中的一列或多列,其值唯一标识表中的每一行。主键不允许为空。
  8. 外键(Foreign Key):
    • 一个表中的一列或多列,其值在另一个表的主键中找得到,用于建立和维护表之间的关系。
  9. 索引(Index):
    • 用于提高数据库查询速度的数据结构。通过索引,数据库系统可以快速定位数据,而不需要扫描整个表。
  10. 关系(Relationship):
    • 描述不同表之间的连接方式。常见的关系有一对一、一对多和多对多。
  11. 视图(View):
    • 一种虚拟表,由SQL查询定义。视图不存储数据,而是基于表的查询结果。
  12. 存储过程(Stored Procedure):
    • 一组为了完成特定功能而预编译的SQL语句。存储过程可以接受参数,返回结果集或执行特定操作。
  13. 触发器(Trigger):
    • 一种特殊的存储过程,当数据库中的特定事件发生时自动执行。常见的触发器事件包括插入、更新和删除操作。
  14. 事务(Transaction):
    • 一系列操作的集合,这些操作要么全部成功,要么全部失败。事务保证了数据库的完整性和一致性。
  15. 并发控制(Concurrency Control):
    • 管理多个事务同时访问和修改数据库的技术,以防止数据不一致和冲突。
  16. 数据备份与恢复(Backup and Recovery):
    • 保护数据库免受数据丢失或损坏的过程。包括定期备份数据库和恢复数据的策略。
2.数据库的介绍和安装部署
MySQL
1.下载 MySQL 5.7 安装包

官网下载页面地址:

https://downloads.mysql.com/archives/community/

Product Version 选择 5.7.39

Operating System 选择 Linux Generic

OS Version 选择 Linux - Generic (glibc 2.12) (x86, 64-bit)

下载 mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz

此版本的下载链接:

https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz

download_mysql.png

2.创建 mysql 属组、用户、安装目录

为 MySQL 创建单独的属组、用户,把安装目录属主改为mysql。

在MySQL启动的时候,单进程mysqld,该进程的属主就是mysql,这样就保证了mysql服务的独立性。

即使mysql服务被黑掉,得到了mysql用户权限,也不会影响整个系统的安全。

# 创建新数组 mysql
groupadd mysql
# 创建用户 mysql ,指定属组为 mysql,禁止其登录
useradd -r -g mysql mysql -s /sbin/nologin
# 创建安装目录
mkdir /usr/local/mysql
3.上传 MySQL 安装包、解压、放到安装位置

将安装包 mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 上传到 /root/ 目录。

# 进入到root目录
cd root
# 解压
tar -zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz
# 将解压后的mysql文件挪到创建的安装目录
mv /root/mysql-5.7.39-linux-glibc2.12-x86_64/* /usr/local/mysql/
4.配置 MySQL

创建所需目录

# 创建数据存储目录
mkdir /usr/local/mysql/data/
# 创建数据日志目录
mkdir /usr/local/mysql/log/
# 创建临时文件目录
mkdir /usr/local/mysql/tmp/
# 创建运行文件目录
mkdir /usr/local/mysql/run/
# 创建启动错误日志
touch /usr/local/mysql/log/mysqld_safe_error.log
# 创建默认的错误日志目的地
touch /usr/local/mysql/log/alert.log
# 创建慢查询日志文件
touch /usr/local/mysql/log/slow.log
# 创建通用查询日志文件的
touch /usr/local/mysql/log/general.log

编辑配置文件

vi /etc/my.cnf

将以下内容写入配置文件 /etc/my.cnf

# mysqld_safe脚本启动时读取的配置
[mysqld_safe]
# 存放 MySQL 后台程序 pid 的文件位置
pid-file=/usr/local/mysql/run/mysqld.pid
# 启动错误日志
log-error=/usr/local/mysql/log/mysqld_safe_error.log

# 本地 mysql 客户端程序的配置块
[mysql]
# 本地 mysql 客户端连接的端口
port=3306
# 本地 mysql 客户端命令行提示信息
prompt=\\u@\\d \\r:\\m:\\s>
# 本地 mysql 客户端字符集
default-character-set=utf8mb4
# 开启命令补全
no-auto-rehash

# 所有mysql客户端程序读取的配置块
[client]
# 连接端口
port=3306
# mysql的主机和客户机在同一host上的时候,使用unix domain socket做为通讯协议的载体文件
socket=/usr/local/mysql/run/mysql.sock

# mysql服务端程序mysqld、mysqld_safe和mysqld_multi的配置文件
[mysqld]
# 进程崩溃时生成core file dump文件,便于程序调试和问题排查
core-file
# 该参数指定了安装 MySQL 的安装路径(mysql安装目录),填写全路径可以解决相对路径所造成的问题。
basedir=/usr/local/mysql
# 该参数指定MySQL的数据文件的存放目录,数据库文件即我们常说的 MySQL data 文件。
datadir=/usr/local/mysql/data
# 临时目录
tmpdir=/usr/local/mysql/tmp
# 用于错误消息的区域设置。默认值是en_US。服务器将参数转换为语言名,并将其与lc_messages_dir的值结合,以生成错误消息文件的位置。
lc_messages=zh_CN
# 错误消息所在的目录。服务器使用该值和lc_messages的值来生成错误消息文件的位置。
lc_messages_dir=/usr/local/mysql/share
# 默认的错误日志目的地。如果目标是控制台,则值为stderr。否则,目标是一个文件,log_error值是文件名。
log-error=/usr/local/mysql/log/alert.log
# 慢查询日志文件名。默认值是host_name-slow.log,但可以通过slow_query_log_file选项更改初始值。
slow_query_log_file=/usr/local/mysql/log/slow.log
# 通用查询日志文件的名称。默认值是host_name.log,但初始值可以通过general_log_file选项更改。
general_log_file=/usr/local/mysql/log/general.log
# mysql的主机和客户机在同一host上的时候,使用unix domain socket做为通讯协议的载体文件
socket=/usr/local/mysql/run/mysql.sock
# 服务端字符集
character-set-server=utf8mb4
# 此变量控制写入错误日志的消息中的时间戳的时区,以及写入文件的一般查询日志和慢查询日志消息中的时间戳的时区。
log_timestamps=SYSTEM
# 操作系统中可用于mysqld的文件描述符的数量。
open_files_limit=61535
# 同时允许的最大客户端连接数。
max_connections=1000
# mysql_stmt_send_long_data() C API函数发送的一个包或任何生成/中间字符串的最大大小,或任何参数的最大大小。默认是64MB。
max_allowed_packet=1G
# 如果设置为0,表名将按指定的方式存储,并且比较区分大小写。如果设置为1,表名将以小写形式存储在磁盘上,比较不区分大小写。如果设置为2,则表名按给定值存储,但以小写进行比较。此选项也适用于数据库名称和表别名。
lower_case_table_names=1
# 慢查询日志是否开启。取值为0(或OFF)表示关闭日志,取值为1(或ON)表示打开日志。默认值取决于是否给出——slow_query_log选项。日志输出的目标由log_output系统变量控制;如果该值为NONE,则即使启用了日志,也不会写入任何日志项。
slow_query_log=1
# validate_password插件的加载方法
plugin-load-add=validate_password.so
# validate-password在服务器启动时使用该选项来控制插件的激活
validate-password=FORCE_PLUS_PERMANENT
5.初始化数据库
# 将安装目录的所有权授予用户、属组 mysql:mysql
chown -R mysql:mysql /usr/local/mysql
# 初始化数据库
cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
# 再次将安装目录的所有权授予用户、属组 mysql:mysql
chown -R mysql:mysql /usr/local/mysql
# 将安装目录的 rwx 授予其所属用户mysql
chmod u+wrx -R /usr/local/mysql

接下来打印的日志中,localhost@root: 后面的内容,就是本机root用户的初始密码,需要记录下来。

初始密码:i5xUY_9KcHqk

如需重新初始化,需要清空 /usr/local/mysql/data 目录。

6.配置开机自启 (开启)

把启动脚本 mysql.server 放到开机初始化目录 /etc/init.d/ ,同时改名为 mysqld

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
7.启动mysql服务
# 启动mysql服务
service mysqld start

其他相关命令

# 停止mysql服务
service mysqld stop
# 重启mysql服务
service mysqld restart
# 查看mysql服务是否启动
service mysqld status
8.登录MySQL进行初始化设置
  1. 登录MySQL

    # 进入MySQL安装目录
    cd /usr/local/mysql/
    # 登录MySQL
    ./bin/mysql -u root -p
    # 密码是前面记录的初始密码
    # 如果前面没有记下,可以使用下面命令查询mysql初始密码
    # grep -e 'temporary' /usr/local/mysql/log/alert.log
    
  2. 设置root密码

    此处将root的密码设置为 123456 (按个人需求设置),将此处设置的新密码进行妥善记录。

    -- 设置密码验证安全级别
    set global validate_password_policy=LOW; 
    -- 设置密码验证最小长度
    set global validate_password_length=6;
    -- 设置密码为123456(根据自己的想法设置)
    alter user root@localhost identified by '123456';
    
  3. 降低密码验证等级

    -- 查看密码验证规则
    SHOW VARIABLES LIKE 'validate_password%';
    
  4. 设置允许远程访问

    -- 选择 mysql 库
    use mysql;
    -- 将 root 用户的可访问主机改为 %,即任何主机
    update user set user.Host='%' where user.User='root';
    -- 执行生效指令
    flush privileges;
    -- 退出登录
    exit;
    
  5. 防火墙放行MySQL监听的端口

    # 防火墙放行 3306 tcp 端口
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    # 防火墙重新加载
    firewall-cmd --reload
    
9.自带客户端本地登录 MySQL

在安装 MySQL 的机器登录

# 进入MySQL安装目录
cd /usr/local/mysql/
./bin/mysql -u root -p
# 密码是新设置的密码

简单使用

# 查看所有库
show databases;
# 选择一个库
use sys;
# 查看所有表
show tables;
# 查看一张表的所有数据
select * from sys_config;
# 退出登录
exit;
  • 关系型数据库

    • MySQL

    • Microsoft SQL Server

    • Oracle

  • 非关系型数据库

    • Redis
    • MongoDB
3.数据库管理工具
4.数据库的增删改查(基本的sql语言都要会)

三、岗位、生命周期说明

1. 产品经理 (门槛低、交流能力要好)
  • 主要职责:负责产品的整体规划、设计和管理,包括市场需求分析、竞品分析、产品规划、需求文档编写、协调开发测试等工作。产品经理需要与设计师、开发工程师、测试工程师等多个角色紧密合作,确保产品的顺利开发和上线。
  • 岗位职责:主要跟甲方去沟通需求,传达给开发同事,协调开发、测试资源,文档的一些编写。
2. UI/UX设计师 (门槛低,比较卷,加班多,不推荐)
  • 主要职责:负责产品的用户界面和用户体验设计,包括界面布局、色彩搭配、图标设计、交互设计等。设计师需要理解用户需求,结合产品功能和品牌特性,设计出既美观又易用的界面。
3. 前端开发工程师(门槛高,比较卷,加班多,不推荐)
  • 主要职责:负责产品的前端开发工作,包括网页、APP、小程序等界面的实现和交互逻辑的编写。前端开发工程师需要熟练掌握HTML、CSS、JavaScript等前端技术,以及Vue、React等前端框架。
4. 后端开发工程师 (语言比较多,java,c++, python 门槛高,比较卷,加班多,不推荐)
  • 主要职责:负责产品的后端开发工作,包括服务器端的逻辑处理、数据库设计、API接口开发等。后端开发工程师需要熟悉Java、Python、Node.js等后端编程语言,以及Spring Boot、Django等后端框架。
5. 测试开发工程师 quality assurance 质量保证 (门槛中,不是很卷,加班多, 推荐)
  • 主要职责:负责产品的测试工作,包括编写测试用例、执行测试、发现并记录缺陷等。测试开发工程师还需要参与自动化测试框架的搭建和维护,提高测试效率。随着行业的发展,测试开发工程师的需求日益增加,特别是在高端测试开发领域。
6. 运维工程师 (门槛最低,不是很卷,不加班,要24小时在线,节假日要值班 ,薪资低,不推荐)
  • 主要职责:负责产品的运维工作,包括服务器的配置和管理、网络环境的维护、监控系统的搭建等。运维工程师需要确保产品的稳定运行,及时处理各种突发问题。
  • 岗位职责:主要是负责软件的运行问题,负责服务器的重启配置等等,数据的处理。
7. 短视频运营 (门槛低,不加班,薪资低, 不推荐)
  • 主要职责:负责通过拍摄和发布短视频内容来吸引用户,实现产品宣传、推广和营销。随着短视频平台的兴起,短视频运营成为了一个新兴且热门的岗位。
生命周期
1)需求分析阶段:明确软件要解决的问题,定义具体的功能需求和性能需求。  产品经理
2)设计阶段:架构设计和详细设计。确立软件的整体架构和模块之间的接口,随后进入具体模块和流程设计。   UI/UX工程师 架构师
3)编码阶段:根据设计文档进行实际编码,将设计转换为可执行的软件。  前端/后端开发
4)测试阶段:对编码完成的软件进行功能、性能和安全方面的全面测试,确保软件质量。  测试工程师
5)安装和部署阶段:将测试合格的软件部署到用户环境中,让用户开始使用。   运维工程师
6)维护阶段:对已经部署的软件进行后续支持和维护,修复发现的缺陷或添加新的功能需求。  运维工程师  开发/测试
7)退役阶段:软件已不再使用,进行遗留数据处理和系统关闭。 运维工程师
软件环境
本地环境(Local Environment):
也称为dev或开发环境,是开发人员在自己的计算机上搭建的用于编写和初步测试代码的环境。这个环境通常包含开发所需的所有工具和库,以便开发人员能够高效地编写和调试代码。
测试环境(Test Environment):
专门用于测试人员执行测试用例的环境。测试环境通常与生产环境相似,但可能不包含生产环境中的全部数据或用户。测试环境用于验证软件的功能、性能、安全性和稳定性,确保软件在发布前能够满足所有需求。
预发布环境(Staging Environment):
也称为预生产环境或QA环境,是软件在正式发布到生产环境之前进行最终测试和验证的环境。预发布环境通常与生产环境非常接近,包括相同的硬件、操作系统、网络配置和数据库等。这个环境用于模拟生产环境,以便在软件正式上线前发现并解决潜在的问题。
生产环境(Production Environment):
也称为线上环境或正式环境,是软件最终运行的环境,面向真实的用户和数据。生产环境需要高度稳定和安全,以确保软件能够持续、可靠地为用户提供服务。

五、事故分析

9 月 14 日,阿里云盘被曝出存在一个“灾难级的严重 bug”。有用户偶然发现,在阿里云盘的相册功能中,只要创建一个文件夹,然后在分类选择图片这一操作下,竟然可以看到其他用户云盘里的图片。
a用户竟然看到b用户云盘隐私????
1. 权限的问题 a用户——> b用户 前端a用户访问->  b用户属性到后端  后端没有校验  a->b用户的数据   越权的问题
2. 前端没有去处理权限, 后端也没有处理权限问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值