1 软件测试基本概念

news2024/11/28 7:48:17

文章目录

  • 课程目标
    • 1. 入门前的7个基础问题
    • 2. 软件测试基本概念
      • 2.1 需求的概念
        • 2.1.1需求的基本概念
        • 2.1.2 从软件测试人员角度看需求
        • 2.1.3 为什么需求对软件测试人员如此重要?
        • 2.1.4 如何才可以深入理解被测试软件的需求
      • 2.2 bug的概念(了解)
      • 2.3测试用例的概念
        • 2.3.1 概念
        • 2.3.2 为什么要设计测试用例?
      • 2.4 软件生命周期
      • 2.5 开发模型
        • 2.5.1 瀑布模型(Waterfall Model)
        • 2.5.2 螺旋模型 (Spiral Model)
        • 2.5.3 增量、迭代模型
        • 2.5.4 迭代式开发和瀑布模型的区别
        • 2.5.4 敏捷模型
          • 2.5.4.1 scrum 敏捷模型
        • 2.5.5 V模型
        • 2.5.6 W模型

课程目标

如下图:

  • 课程学完可以到达中高级测试工程师
  • 到达第二部分,基础入门非常重要.
    在这里插入图片描述

1. 入门前的7个基础问题

  1. 什么是软件测试?

软件测试是验证用户产品死否满足用户需求. 是否满足用户需要关乎公司盈利.

2.调试和测试区别?

目的:

  • 调试:发现解决软件中的缺陷.
  • 测试:发现软件中的缺陷.

参与角色:

  • 调试: 开发人员
  • 测试:开发人员,测试人员等 单元测试和集成测试主要由开发人员完成.

执行阶段:

  • 调试:编码阶段.
  • 测试: 贯穿整个软件生命周期.

3.软件测试的岗位

测试工程师:

  • 测试开发工程师
  • 测试工程师

职能:

  • 测试开发工程师 :
    • 测试产品质量;
    • 开发效能工具:
      • 自动化工具,代码覆盖工具,数据构造工具.
  • 测试工程师:
    • 测试产品质量

软件研发工程师和测试开发工程师的区别:

  • 研发工程师: 开发为主.
  • 测开工程师: 测试为主,开发为辅.

4.软件测试的发展前景

如下图:

  • 测试管理工具: 禅道开源软件.
  • selenium : 界面自动化工具
  • appium:移动平台上主流的自动化测试工具
  • jenkins:自动化工具
  • loadrunner,jmeter : 界面的性能工具,
  • jmeter: 接口性能工具
  • 安全测试: sql注入,xss,白帽子 这些都要求测试人员具备的基础安全测试.
  • 探索性测试: 依靠测试人员的经验.
  • 职位路线: 初中高 到 管理
    在这里插入图片描述

5.软件测试的薪资如何

职友集

  • 低级测试泛滥,俗称 点点点.
  • 高级测试稀缺 : 每个阶段按年算.
  • 高级测试与研发岗薪资差不多.

6.软件测试和开发的区别

难易程度

  • 开发专业度高;
  • 测试人员掌握内容广度大。

工作环境办公用品:

  • 笔记本+显示屏
  • 开发环境:完全一致。

薪水:

  • 中小企业测试人员薪资比开发要低一点。
  • 中大型企业测试人员和开发人员薪资相当。
    发展前景
  • 发展前景和开发一样

繁忙程度:

  • 执行测试一项目上线完成
  • 项目上线也需要测试人员跟进

技能要求:
+

7.测试人员具备的素质

在这里插入图片描述

2. 软件测试基本概念

2.1 需求的概念

2.1.1需求的基本概念

概念:

  • 满足用户期望或正式规定文档(合同、标准、规范)所具有的条件和权能,包含用户需求和软件需求。
  • IEEE定义:软件需求是 (1)用户解决问题或达到目标所需条件或权能(Capability)。 (2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。 一种反映上面(1)或(2)所述条件或权能的文档说明。它包括功能性需求及非功能性需求,非功能性需求对设计和实现提出了限制,比如性能要求,质量标准,或者设计限制.

在多数软件公司,会有两部分需求,一部分是用户需求,一部分是软件需求。

用户需求:

  • 可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成
    的任务。该需求一般比较简略
  • 假如我要给同学们开发一个声控灯,同学们能够提出哪些需求?
    • 灯亮的时间、灯何时亮、灯安装的位置
    • 灯的颜色
    • 灯的形状
    • 五花八门的用户需求
    • 灯的材质
    • 灯的亮度
    • 灯可以联网
    • 灯支持语音识别

软件需求:

  • 或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。
  • 大多数公司在进行软件开发会把用户需求转化为软件需求。
  • 用户需求不能够直接作为开发和测试人员工作的依据。
  • 原因是需要对用户的需求进行分析:
    • 市场可行性(成本)
    • 技术可行性(技术上是否能实现,技术上实现死否有难度,投入的人力和时间成本是否远远大于市场收益。

2.1.2 从软件测试人员角度看需求

需求是测试人员开展软件测试工作的依据。(重点)

在具体设计测试用例的时候,首先需要搞清楚每一个业务需求对应的多个软件功能需求点,然后分析出
每个软件功能需求点对应的多个测试需求点,然后针对每个测试需求点设计测试用例。

过程如下,业务需求—>软件功能需求点—>测试需求点—>测试用例

在这里插入图片描述

2.1.3 为什么需求对软件测试人员如此重要?

  • 测试需求点到测试用例的产出,都是对需求进行分析发现的。
  • 测试需求点关乎到测试用例的测试覆盖率。

2.1.4 如何才可以深入理解被测试软件的需求

  • 在产品分析阶段或设计阶段开始时介入,因为软件测试贯穿软件的整个生命周期。
  • 只有真正理解了原始业务需求之后,才有可能从业务需求的角度去设计针对性明确,从终端用户的使用场景到端到端的覆盖率较高的测试用例集。

2.2 bug的概念(了解)

  • 当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是错误。
  • 当需求规格说明书没有提到的功能,判断标准以最终用户为准:当程序没有实现其最终用户合理预期的功能要求时,就是软件错误.

2.3测试用例的概念

2.3.1 概念

测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环
境、操作步骤、测试数据、预期结果等要素。

测试用例解决了两大问题:测什么,怎么测。

例如如下图,编写注册网页邮箱的测试用例:

在这里插入图片描述

2.3.2 为什么要设计测试用例?

两点原因:

  • 围绕着软件需求来设计测试用例。
  • 解决了重复测试问题。- - 可以避免测试用例用后即弃。

2.4 软件生命周期

软件生命周期是指从软件产品的设想开始到软件不再使用而结束的时间。 如果把软件看成是有生命的事
物,那么软件的生命期可以分成6个阶段,即需求分析、计划、、设计、编码、测试、运行维护。

  • 需求分析 : 分析用户需求是否合理( 市场分析,软件需求上的技术分析) ,编写出软件需求文档
  • 计划 : 指定需求执行计划, 即确认需求要执行多久,什么时候开始,什么时候结束,安排多少人力,投入成本,产出计划文档
  • 设计 : 将用户需求细化成一个个任务,进行技术设计(设计那些接口,采用那些技术).产出设计文档
  • 编码 : 开发人员按照需求文档以及设计文档进行编码
  • 测试 : 测试人员参考测试用例来执行测试
  • 运行维护 : 项目上线之后对产品进行线上的维护:
    • 修复性维护 : 对项目中未发现的问题进行修复
    • 完善性维护:对功能进行完善
    • 预防性维护(居安思危):为了避免产品在线上出现一些其他的问题,进行一些预防的手段

2.5 开发模型

2.5.1 瀑布模型(Waterfall Model)

在这里插入图片描述特点 :

  • 线性的开发流程、不能够应对需求的变化

缺陷:

  • 测试被后置
    • 风险往往迟至后期的测试阶段才显露,因而失去及早纠正的机会
    • 需要有足够的时间预留给测试活动,否则将导致测试不充分,从而把缺陷直接造留给用户

主要缺陷:

  • 可以运行的产品很迟才能被检测。风险往往被后至发现,因而失去及时纠正的机会。

使用场景:

  • 需求固定的小项目。 - -

2.5.2 螺旋模型 (Spiral Model)

简介

  • 一般在软件开发初期阶段需求不是很明确时,采用渐进式的开发模式。螺旋模型是渐进式开发模型的代表之一。
  • 这对于那些规模庞大、复杂度高、风险大的项目尤其适合。
  • 这种迭代开发的模式给软件测试带来了新的要求,它不允许有一段独立的测试时间和阶段,测试必须跟随开发的迭代而迭代。
  • 因此,回归测试的重要性就不言而喻了。

如下图

  • 在瀑布模型基础上,每个阶段都给予一次风险分析,每次分析完成之后都会生成一个新的原形。
  • 例如下图:从中心开始看,需求计划生成原型1,风险分析到原型2。
  • 计划需要用户需求转变软件需求,开始计划,风险分析产出原型3。
  • 软件产品设计指软件需求转变接口,风险分析产出原型4。
  • 详细设计包含编码,单元测试,等等。
  • 客户评估,客户提出新的需求,我们在按照原型4进行迭代。

在这里插入图片描述

在这里插入图片描述

螺旋模型的使用场景

  • 规模庞大,软件复杂度高,风险大的项目。

缺陷

  • 时间拉长,人力,资金。
  • 风险分析能力与产品遗留的风险成正比。- - 需要有专业的风险分析的人,成本增高。

2.5.3 增量、迭代模型

注意事项

  • 需要区分增量模型和迭代模型。

简介

  • 增量开发能显著降低项目风险,结合软件持续构建机制,构成了当今流行的软件工程最佳实践之一。
  • 增量开发模型,鼓励用户反馈,在每个迭代过程中,促使开发小组以一种循环的、可预测的方式驱动产品的开发。
  • 因此,在这种开发模式下,每一次的迭代都意味着可能有需求的更改、构建出新的可执行软件版本,意味着测试需要频繁进行,测试人员需要与开发人员更加紧密地协作。
  • 增量通常和迭代混为一谈,但是其实两者是有区别的。
  • 增量是逐块建造的概念,例如画一幅人物画,我们可以先画人的头部,再画身体,再画手脚……而迭代是反复求精的概念,同样是画人物画,我们可以采用先画整体轮廓,再勾勒出基本雏形,再细化、着色。

详细讲解

  • 如下图、假设用户有一个需求,功能包含ABCD…
  • 增量模型完成的流程:
    • 开发完A我就直接上线提供给用户使用
    • 开发完B我就直接上线提供给用户使用
    • 开发完C我就直接上线提供给用户使用
  • 迭代模型完成的流程:
    • 先开发一个基础版本(包含共A,B,C,D),但是ABCD功能比较简陋。
    • 接下我们会继续在基础版本上对比功能进行迭代优化。
  • 生活例子理解:一个人物画
    • 增量模型:
      • 先画头、在画身体、再画四肢
      • 逐渐建造
    • 迭代模型:
      • 先画一个轮廓、在细化、再补色…
        在这里插入图片描述

2.5.4 迭代式开发和瀑布模型的区别

  • 瀑布模型是完成一个阶段才到下一个,如果出现测试问题需要回到上阶段进行修改。
  • 增量式开发基础了瀑布模型,将软件的生命周期划分为多个阶段,每个阶段都会完成所有的阶段。
  • 每轮迭代结束后,开始新一轮迭代,直到软件项目被终止,整个生命周期才会结束,其核心思想是,每次只完成软件中最迫切需要的一部分功能,并且随时关注用户的反馈信息。
  • 它弥补了传统开发方式中的一些缺点,具有更高的成功率和生产率。

2.5.4 敏捷模型

简介:

2001年,以Kent Beck、Alistair Cockbum、Ward Cunningham、Martin Fowler等人为首的“轻量”过程派聚集在犹他州的Snowbird,决定把“敏捷”(Agile)作为新的过程家族的名称。

在会议上,他们提出了《敏捷宣言》(http://agilemanifesto.org/): 我们通过身体力行和帮助他人来
揭示更好的软件开发方式。

经由这项工怍,我们形成了如下价值观:

  • 个体与交互重于过程和工具 解释: 轻流程,强调人与人之间面对面的高效沟通.
  • 可用的软件重于完备的文档 解释: 轻文档,重产出.
  • 客户协作重于合同谈判 解释: 多于用户沟通
  • 响应变化重于遵循计划 解释: 用户需求可能发生变化,需要我们能快速变化.
  • 在每对比对中,后者并非全无价值,但我们更看重前者。

四局宣言表达敏捷模型的一个特点:轻流程,轻文档,重目标,重产出.

由敏捷宣言可以看出,敏捷其实是有关软件开发的社会工程(Social Engineering)的。敏捷的主要贡献在于他更多地思考了如何去激发开发人员的工作热情,这是在软件工程几十年的发展过程中相对被忽略的领域。
敏捷开发有很多种方式,其中scrum是比较流行的一种。

2.5.4.1 scrum 敏捷模型

三个角色和五个会议。

三个角色:

  • 产品经理: 收集用户的需求,编写需求文档,对产品负责的人。
  • 项目经理:负责召开各种会议,协调项目,为研发团队服务。催工.
  • 研发团队:开发人员,测试人员,ui设计人员等等。

五个会议:

在这里插入图片描述
product Backlog : 需求代办列表 (需求池)
Sprint Backlog : 周期内需要实现的用户需求.
daily scrum meeting : 每日会议

Potentially Shippable Product Increment : 可交付的软件

scrum的基本流程如上图所示:

  • 产品负责人负责整理user story,形成左侧的product backlog。产品经理从需求池里选取几个需求,开展发布计划会议。
  • 发布计划会议:product owner负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,sprint backlog
  • 迭代计划会议:项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,每个任务都有明确的负责人,并完成工时的初估计。
  • 每日例会:每天scrum master召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题。即使了解项目进度,预知风险,规避风险。
  • 产出物: 可交付的软件。过了一段时间有产出了。
  • 演示会议:迭代结束之后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由po整理,形成新的story。将新的需求放到需求池了。
  • 回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,已达到持续改进的效果。

具体案例:

在这里插入图片描述

2.5.5 V模型

在这里插入图片描述

V模型最早是由Paul Rook在20世纪80年代后期提出的,目的是改进软件开发的效率和效果。是瀑布模型的变种:

明确的标注了测试过程中存在的不同类型的测试,并且清楚的描述了这些测试阶段和开发过程期间各阶段的对应关系

V模型指出,单元和集成测试应检测程序的执行是否满足软件设计的要求;系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标;验收测试确定软件的实现是否满足用户需要或合同的要求。

人话将就是,V模型是基于瀑布式开发模型的,相比瀑布模型,V模型在各阶段都给予针对性的测试,例如用户需求对应验收测试,详细设计对应单元测试。

局限性:仅仅把测试作为在编码之后的一个阶段,未在需求阶段就进入测试。

特点:

  • 明确标注了测试的类型
  • 明确标注了测试阶段和开发阶段之间的对应关系

缺点:

  • 测试后置,未能在需求阶段就进入测试。

2.5.6 W模型

在这里插入图片描述
如上图,有两个v模型,对应着开发模型和测试模型。测试从需求开始阶段就介入了,用户需求阶段,需要开始准备验收测试,用户需求阶段到下一个阶段需求分析与系统设计,需要开始准备系统测试,一直到编码阶段到测试阶段,测试阶段顺序,
单元测试由开发人员编写,开发人员编写完集成后集成测试开始,实施后到系统测试,交付阶段后验收测试。

W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。

W模型特点:测试的对象不仅是程序,需求、设计等同样要测试,测试与开发是同步进行的

W模型优点:有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,显著减少总体测试时间,加快项目进度。

局限性:需求、设计、编码等活动被视为串行的;测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。无法支持敏捷开发模式。对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临着困惑。

优点

  • 测试从需求开始阶段就介入了。

缺点

  • 上一个阶段完成下一个阶段才能开始。例如:用户需求阶段完成后到需求分析与系统设计阶段。
  • 开发模型和测试模型也保持着一种前后的线性关系。例如:用户需求完成后,验收测试准备才能开始。
  • 重文档,重过程 - -不支持敏捷模式。

v模型与w模型的区别

  • W模型中则更强调测试在整个开发流程中的重要性,每个阶段都有对应的测试阶段,以减少后期修复问题的成本。

  • 总的来说,V模型相对比较传统,侧重于阶段的顺序和阶段中的测试,适用于需求已经明确,较为稳定的项目;而W模型更加灵活,强调测试在整个开发过程中的重要性,适用于需求不稳定或需求变更频繁的项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI读心术

近期,德克萨斯大学奥斯汀分校的神经科学家们展开了一场「AI」实验,利用人工智能聊天机器人ChatGPT,将大脑活动转化为文字信息。 参与实验的志愿者,在进行长达20小时的「训练」后,成功被「AI」识别出正在进行的活动。按…

portraiture宿主插件最新v4中文版本下载及使用教程

自拍怎么可以不修图呢?如果要修图的话,磨皮就是其中非常重要的一环。皮肤看起来细腻光滑了,整个人的颜值都会瞬间拉高。下面就让我们介绍一下磨皮用什么软件好用,什么软件可以手动磨皮的相关内容。portraiture是ps人像修图中常用的…

喜报!恭喜知了堂学员成功通过CISP-PTE证书考试

有人说,大学可以不谈恋爱,但一定要考证。 考证,是大学校园生活的关键一环。充分利用在校时间为后期就业提前储备优势,毕业后如果从事IT领域,证书就是一个高含金量的专业认证,尤其是网络安全行业&#xff0…

干货|SpringBoot-Maven与Gradle多模块搭建

比较熟悉的模式是SpringbootMaven多模块的组织方式,由于近期Gradle势力很猛,据Gradle官网给出的5种压测场景的数据来看,Gradle的处理性能确实比Maven快,所以就来体验一下Gradle怎么做多模块搭建和各种依赖的引入和查看。 对Gradl…

【unity】燧光MR设备接入极简教程

官网说明文档: https://doc.ximmerse.com/sdkconf/unityxrsdk/index.html 一、环境准备 1、Unity环境准备 配置adb环境 官网下载:https://developer.android.google.cn/studio/releases/platform-tools 找到SDK Platform-Tools下载 参照 此教程 配置ad…

vulnhub dc-9

1.信息搜集 端口 80 20 filter 存活ip 172.16.1.65 2.访问网站进行信息搜集 cms staff 寻找漏洞 登录处尝试弱口令失败,尝试sql失败 search处sql注入 3.sqlmap跑用户名和密码 注意这题两个库的用户名和密码都需要 UserDetails,Users search处是post传参&…

trace clock structure的若干方法

这里分享几个trace clock structure的方法,各有特点。 1)report_clock_qor -to FF/CK -clock $clk_name -type structure 报告的结果与innovus的clock structure报告类似,如下示例。 (H) clock_root_name # sdc中的root name (0) cts_buf: A-> Y [REF: XX/BUF_XX] [Lo…

【Android开发基础】说说模块设计(下拉刷新、图片查看、布局设计)

文章目录 一、引言二、设计1、下拉刷新(1)依赖(2)使用 2、图片需求 三、结论 一、引言 描述:设计一个简单说说功能模块需求: 1、能够下拉刷新,更新数据 2、一条说说里允许包含多张图片&#xf…

第七章 Electron Vue3实现音乐播放器

一、介绍 🍑 🍑 🍑 一个音乐播放器应该具备播放、暂停、上一首、下一首、播放模式(单曲循环、列表循环、顺序播放……)。除了这些比如还可以扩展进度条的展示、拖拽、音量大小的调节,如果资源允许的话可以…

跨境电商开发的基本流程

在全球化的浪潮下,跨境电商已成为一个热门的商业模式。然而,很多人在跨境电商开发的过程中遇到了许多问题。本文将介绍跨境电商开发的流程,希望能够帮助大家更好地了解这个行业。 首先,跨境电商开发的第一步是寻找合适的产品。这…

DOC文件丢失怎么恢复?用这7种方法找回

在日常生活和工作中,我们经常会因为各种原因丢失重要的DOC文件,这给我们带来了不小的困扰。但是,不必担心,在本文中,我们将带大家了解一下DOC文件丢失怎么恢复。 关于DOC文件 DOC文件是指一种微软公司开发的文字处理软…

【短视频抖音多账号管理系统源码开发路径】

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 短视频矩阵系统开发涉及到多个领域的技术,包括视频编解码技术、大数据处理技术、音视频传输技术、电子商务及支付技术等。因此,短视频矩阵系统开发人员需要具备扎实的计算机基础知识、出色的编…

多边形三角化Earcut分析,以mapbox EarCut源码举例

多边形三角化,简单来说,就是给定一圈有序的多边形点生成三角面片,EarCut的原理描述网络上有很多(如https://blog.csdn.net/qq_24459491/article/details/102976671),就不细说了。但是有的时候看是一回事&am…

Ae 效果详解:Mocha AE

Ae菜单:效果/Boris FX Mocha/Mocha AE Effects/Boris FX Mocha/Mocha AE Ae菜单:动画/Track in Boris FX Mocha Animation/Track in Boris FX Mocha Mocha Pro 是一款强大的平面跟踪软件。既可作为独立软件运行,也提供了 Ae 的插件版本&#…

1.4C++运算符重载作函数

C运算符重载函数作为类成员函数 作为类成员函数时,运算符重载函数使用类的成员变量作为操作数。 写个 demo: 运算符重载函数作为类成员函数时,需要注意:运算符重载函数必须是类的成员函数,不能是普通函数或者全局函…

MIT6.024学习笔记(二)——图论(1)

学习不是为了竞争和战胜他人,而是为了更好地了解自己和世界。 - 达赖喇嘛 文章目录 图的相关概念涂色问题基础涂色方法(贪婪算法)证明 二分图匹配问题应用:稳定婚烟问题算法性质及其证明 图的相关概念 图的定义:一组&…

We need you | 隐语开源共建计划第一期任务等你认领

作为隐私计算开源界的一颗新星,隐语一直致力于推动隐私计算行业的发展,同时也在不断发展和完善中。通过开放、透明和共享的方式,协同行业优秀人才协同合作,推动隐私计算领域蓬勃发展,这是隐语开源的意义。因此&#xf…

FPGA多路视频叠加融合 HLS算法实现 提供2套工程源码和技术支持

目录 1、前言2、视频叠加模块的功能和性能3、HLS视频叠加融合设计4、vivado工程1--单路同源视频的缩放叠加详细设计方案vivado工程详解SDK工程详解 5、vivado工程2--两路非同源视频的缩放叠加详细设计方案vivado工程详解SDK工程详解 6、上板调试验证7、福利:工程代码…

MySQL底层数据结构

1、引入 一个sql语句在mysql中究竟是如何运行的?又应该通过怎样的方式去查找我们要找的数据?这里就涉及到几种存储数据的算法; 可以做索引的数据结构有数组、链表、二叉搜索树和B树(B-树、B树)。 2、各种数据结构 …

flutter多版本切换

方式一:符号连接(软链接) 注:无需修改环境变量,也不用重启AndroidStudio mac具体flutter版本切换操作步骤: 1、项目clean然后切换自己需要的分支 2、删除文件夹flutter目录文件(这里的flutter是原来的符号连接&…