如何写好测试用例,看完即会

news2024/9/23 0:35:09

目的

测试用例这个名词,相信各位从业者已经是熟悉的不能再熟悉了,无论你是从事何种行业,只要是软件测试从业者,测试用例始终贯穿于我们的日常工作中,今天我们就针对设计测试用例的方方面面进行一个详细的介绍。

写好黑盒测试用例的因素

这里要说的设计因素不仅仅是大家熟知的测试用例的各种设计方法,很多同学都应该有类似的经历,各类设计方法虽然是很经典的测试用例设计方法,但在真实的工作中经常会因为各类的主观、客观因素导致大部分的设计方法无法投入实战。

这次我们就从另外一个角度来介绍一下写好测试用例的各大因素,这些全部都是博主团队中沿用至今的指导方法,应用于实战,旨在可以让大家在其中找到一些灵感并加以改良,结合自身技能与公司现状,用于自己的团队与日常工作中。

同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

软件测试视频教程观看处:

华测教育软件测试进阶全套视频教程(2023全网最新版,软件测试进阶自学必备)

1、深入理解产品业务

一定会有人反问,作为一名测试人员理解产品业务不是天经地义的事情吗?大家注意,这一观点的重点在于“深入”,何为深入?

有些测试同学在编写测试用例的时候会将产品设计文档或PRD内描述的产品功能业务照样抄一遍,以陈述句的口吻作为测试用例的测试点。

这样的行为无法叫深入理解,试问全公司对于产品的功能与业务最熟悉的人是谁?产品经理?项目经理?开发人员?售前售后人员?是测试!在这个点上最有底气也最能抬头挺胸说出这句话的人就是测试。除了长时间接触测试产品的各个功能点之外,整体使用与产品问题解答、缺陷的解决也造就了测试人员的这一优势。

测试用例的设计也是测试人员对于产品业务理解的直接体现,如果对被测对象的业务理解片面就很容易造成测试用例的测试点错误或偏离。

这里的深入指的是千万不要被PRD文档所约束,部分测试同学无论是看PRD或者参加产品评审会时都不太会发表自己的论点与疑问,常常只是被动的接收被测对象相关的需求与业务,无法真正的站在测试人员的角度提出自己的观点。

我在制定测试团队工作流程的时候,会要求业务测试人员在项目前期加入文档测试,测试的对象就是PRD或产品设计,针对最初的原型与业务提出自己的观点。对待产品的设计文档抱着怀疑的态度去审视,告诉自己“产品的设计文档一定有问题”,以这样的潜意识去进行文档测试,你会发现这样做远远比你去熟悉产品设计文档所获得的信息要多的多,自己也从一个旁观者变成了参与者,甚至是审视者。

如何做到深入呢,除了不被现有的信息与认知束缚外,另一个有效的做法就是多问自己几个为什么,无论是碰到正确的业务说明还是你认为错误的、有争议余地的业务,都值得我们去问为什么。

那么这样做是不是会花费大量的时间?答案是肯定的,但我们必须去做:

  • 首先这是一个刻意练习的过程,你老是一味的接受,会发现随着工作年限的增加,多数时候自己无法顺畅地提出自己的观点;

  • 反过来说一旦善问原因的习惯养成,你会自己形成一套高效的询问机制,先问自己为什么,带着答案再去与人进行讨论,最后得到大家都能信服的答案。

你会发现自己做这件事的耗时越来越短,效率越来越高,这也是我们所说的熟练工。随着时间的累积,你除了测试岗位的经验之外,你也获得了另外一种核心竞争力,那就是你的思维已经和其他人变得不同,你是积极的,独立的,不善于妥协的。

另外这样做的好处也在于我们使用了同样的时间,已经进行了一遍最初的产品测试,这个也与我们测试左移的理念高度重合。而且这样的高度参与形式也利于我们加深对产品业务的理解与印象,在设计测试用例的时候也会更加优质高效。

2、测试需求分析(转化)

测试需求分析指的是将产品或项目相关的需求进行转化的一种动作,大家要知道我们所获得的产品需求是无法直接进行测试活动的,产品与项目需求一般是经过专职人员(产品经理等)将原生需求进行转化的阶段性产物,我们测试人员在获取这些需求后一般会再进行一次转化,将此类需求分析转变为更具象化更符合测试活动所需的相关信息。

根据公司业务与客观因素的影响,甚至会出现原生需求直接流入测试团队的现象发生,所以在各类需求状态参差不齐的现状影响下,从产品质量保障的角度下,测试需求的分析、转化就显得尤为的重要。

一般来说需求分析转化这个动作是由测试经理或测试主管来完成的,他们会将大的新功能需求或复杂业务需求进行转化、拆分,将其通过测试计划来进行工作分配,那么对应的功能模块也自然会分到各自测试同学的名下,那么接下来就是将各自的功能模块根据产品设计文档中的业务说明进行测试需求的分析与转化。

这里可能会有同学听的云里雾里的,其实说的直白一点,这个动作的实际目的就是将大的需求拆成小的需求,再将小的需求转化为测试功能点。转化的效率与质量由个人对于业务与需求的理解深度、完成度来决定,这里也是和之前说的深入理解产品业务相呼应。

3、用例的呈现形式

经过了以上两步的工作之后,我们就对被测对象基本有了一个比较完整的认知与了解了。那么做过项目与完整产品的同学都知道,每一次的迭代周期都是不同的,时间、资源、要求都不会一成不变。针对这样的情况,我们的测试用例也应该有着与之相对应的呈现形式,根据以上的各个维度与对应可能出现的变化,灵活的呈现形式可以让测试活动更加的可控。

举个例子,如果一个项目是基于敏捷开发的,功能层面也不是里程碑版本,那么他的迭代周期差不多也就是1-2周的时间。这样的迭代周期在当今的互联网行业中也是普遍现状,而且高速迭代的话基本到第2周的时候测试团队就已经介入多时并开展测试活动了,开发则已经开始了下一个迭代版本(新功能)的开发,也就是说测试的第2周测试活动开始后之后也要介入下一个版本的前期项目互动中去。如果是面对这样的高速节奏,很难有充裕的时间让测试慢慢写完完整的测试用例。

视项目与产品的时间周期而定,我们的测试用例一般会有三种类型:

  • word

  • excel

  • xmind

word

这三种类型分别用来对应不同的周期长度,项目如果是高度定制化的且周期较长,我们使用word来进行充分的测试用例设计工作,每一个用例的执行步骤、预期结果、实际执行情况都会详细的描述其中,测试颗粒度也是最小的。

高度定制化的项目特点就是不可复制,且项目成本与收益率比都是比较高的,这样的情况下团队可以有足够的预算来进行充足的项目开发、保障、交付工作。

excel

如果是项目周期适中,3周至1个月的小型项目,就可以使用excel来进行测试用例的设计。

这种测试用例的特点是小巧、独立,因为是列表形式的,我们就不会要求在用例中存在执行的具体步骤,可以将每一条看做是一个测试功能点,因为相对之间独立、无依赖,所以也可以在多处拿来进行复用。

之前也有测试同学提出过excel形式的不好管理,其实这个见仁见智,如果你真的想将此类型的用例进行管理与复用,完全可以搭配测试管理工具来进行实现,比如我们常见的禅道、testlink、Jira等等都是可以的。

但这里不推荐直接使用这些工具来进行编写,一个是用例结构无法互通,复用率不高,另一个是描述与编写的复杂程度不弱于word的呈现形式,成本较高。

xmind

至于像之前说的高速迭代的项目,周期一般在1-2周的那种,那就比较推荐使用xmind来进行测试用例的设计,其实与其说是测试用例,倒不如说是测试点,因为他的描述形式实在是足够简单,但简单不代表草率,能用一句话描述清楚需要测试的功能点也是测试同学都应该掌握的软技能之一。

用xmind或类似的思维导图工具来进行用例设计,不仅仅可以大幅缩减编写中的时间成本,另一个优势就是他特有的展现形式,图文类的展现形式就可以有效的将你编写的测试功能点平铺在你的面前,将测试点进行图形化管理,方便查缺补漏,这个也是文档类测试用例所不能媲美的。

如果团队对xmind有一定时长的使用经验,可以尝试下Xmind2testcase,这个是基于python实现的一个工具,他可以在xmind中进行测试用例的模板定制,提升我们日常工作中测试用例设计的效率与规范程度。另外它也可以将xmind中的用例转化成csv,从而导入至测试管理工具进行二次管理、复用,真正的在用例管理层面中实现闭环。

测试用例设计

这里就不再介绍黑盒测试用例的设计方法了,相信大家应该早已烂熟于心。接下去要说的是我们在日常工作中设计用例时需要注意的一些关键事项与技巧。

在这一阶段,很多测试同学通常会根据自己之前做的一些准备工作来进行用例设计,都经过之前的几步准备动作了,现在还不得马上开始编写测试用例吗?博主想说的是,既然都已经做了这么多准备了,我们就更不能草率的直接进行用例的设计,其实在我们的身边也有很多的资源可以进行利用,来辅助我们的用例设计工作。

大家可别忘了测试人员并不是一个团队在战斗,我们还有被称为开发的战友。

在我们开始设计用例的阶段,一般开发团队的各类设计文档都已经完善或初具雏形,这些资源也是帮助我们设计优质用例的好帮手。

说几个最简单的,功能模块的详细设计或者数据库的设计文档应该都有吧,上面这两个文档就可以帮助我们更好的描述自己的测试用例,详细设计里面一般会描述功能模块的实现逻辑、数据库设计图则是支撑业务实现的所需数据结构的新增、变更等。

而这些文档你需要主动的去找开发索要,因为在他们的认知中这些东西是支撑他们开发的必需品,但对测试来说则不是这样。当然以上说的这些只是最基本的一些开发设计文档,大家还是根据各自公司团队的真实情况去进行确认。

当我们开始了测试用例的设计与编写时,另一个非常重要的就是基于产品测试与质量保障的一些认知与经验了,经验这个方面比较感性,博主在此不作介绍,这里重点说一下认知。

认知这个东西虽然比较抽象,但却是我们在做某些专业性工作时必不可少的重要因素之一,那作为软件测试来说,部分的产品质量保障(毕竟保障不光是测试在做,整个项目团队都是质量的保障者),测试活动本身的质量保障都是整个项目全生命周期中必须时刻谨记的目标。

这里就围绕着产品测试的一些认知问题来进行讲解,首先我们在设计黑盒测试用例时一般都会以画面为单位进行设计,那这里推荐将UI部分放在第一确认位,比起被测功能的正确实现,我们应该先确认UI的整体布局是否合理、风格是否统一,是否有错乱显示等。

测试同学在执行用例时应该站在客户的角度出发,为了更好的体现这一点,设计用例的时候就更应该将这一理念加入其中,客户在接触被测产品的第一时间,他关注的是功能还是整体的UI设计,相信专业的测试同学心中都已经有了一个答案。

我们在设计用例时必定会加入正例和反例,正例的作用是覆盖所有被测对象的预期功能是否正确,反例则不同,它必须照顾到用例的全面性,和覆盖率不同,它是基于一些错误的场景来对软件进行额外的功能尝试。

举个例子,我们平时说的比较多的等价类设计方法,其中就分为有效等价类与无效等价类,而无效等价类就是反例设计的最好体现,也是我们日常最容易想到的反例。那么是否所有的用例都需要设计反例呢?这个命题从字面上来看是不是就已经错了。

下面我们就来举几个场景,通过这些我们就可以提取出设计反例的时机:

  • 被测对象中使用频率高或者较高的功能

  • 被测对象中业务逻辑复杂的功能

  • 被测对象中相对独立的功能

  • 被测对象中开发耗时较长的功能

  • 被测对象中主打、特色的功能

  • 被测对象中如果出错将导致严重损失的功能

  • 被测对象中开发比较担心的功能

测试用例的描述一定要言简意赅,千万不能拖沓,最好也不要用大白话。所以对于软件测试的同学来说,文字功底优秀那当然最好,但如果不是,那至少要扎实,用不来可以不用,可以查,但千万别乱用。

在一个团队中,迭代版本或老功能进行交叉测试的几率还是挺高的,此时你的用例是否可以被高效的执行,描述的完整与准确程度就成了一个决定性的因素。虽然说起来是老生常谈,但往往却被很多测试同学忽视,除了对产品本身的业务熟悉与否,另外一个就是对于行业内的专业术语是否有准确的认识,如果本身对被测对象中的一些描述有异议可以尽早在团队中做讨论,以统一大家的认知。

举个例子,在一个创建信息的界面中,在信息输入框内填入对应信息,点击保存按钮,这时会弹出一个确认窗口。那么这个窗口的名称就会出现各种各样的叫法,有的叫“弹窗”,有的叫“确认窗口”,有的叫“二次确认窗口”,如果在没有统一的情况下,用例中的描述就很容易出现偏差,导致其他测试同学执行时候的效率低下。

测试用例之间不能有依赖,一条用例应该是验证被测对象某个业务中的单个功能点是否符合需求设计的,切不可将多个功能点加入一个测试用例中以用来验证一连串的业务操作是否正确。

因为后期如果测试用例中有某些条件依赖或高耦合,会导致用例的复用率降低,在UI自动化、回归和冒烟测试中,我们就无法将优先度高的用例抽出进行组合来执行对应的测试任务。

同一产品的测试用例适当做“减法”。随着版本的不断迭代,我们的黑盒测试用例数会随之增多,当达到一定的规模之后日常管理的成本与消耗就会变得越来越大,除了定期对已有的测试用例集做瘦身、转化(删除无效用例,已稳定的功能相关用例可转化为自动化测试用例)之外,我们在设计用例之初就应该本着高效的理念,遵循上面几点所说的来进行处理,非必要时绝不进行全量设计,哪怕是靠近全量的大范围覆盖测试用例设计。

有不少的软件测试同学总会觉得设计用例时生怕会漏下任何一点或使用场景,尽可能多的组合与排列各类条件,创造出了大量可能存在类似、重复或低效的测试用例。

大家都知道穷尽测试是不可能的,也完全没有必要去纠结会发生一些意想不到的问题,作为软件测试的执行者来说,我们首要保证的是被测对象的功能是否完全满足原生需求,是否可以解决用户提出的痛点。

基于上面的“减法”观点,另一点需要我们注意的是,如果你是初入测试行业的同学,建议在测试用例设计完成一小部分的时候让团队内的业务专家或测试老鸟看下你的用例,这样做的好处在于他们一般都会告诉你用例可能存在的问题和团队内部的设计风格大致是什么样的,也方便及时纠正错误的设计方向,避免大量的重复返工动作。

测试用例中还有一个因素也是比较容易被忽略的,那就是前置条件,有部分软件测试的同学觉得没有前置条件貌似也不会影响测试任务的进行。但这里有一个很大的误区,测试用例一般都不是一次性的,经常会有交叉执行、冒烟测试、后期提炼、复用重构的场景存在,甚至在很长的一段时间之后,那些执行过的测试用例将会再一次被提取出进行测试活动。

那么在这样的场景下,一个明确的前置条件就变得极为重要了,如果没有了前置条件或前置条件比较潦草,就会导致再次执行用例的时候出现失败的情况,甚至需要花费大量的时间去回忆与调查问题出现的原因,往往大呼得不偿失。

最后,一切从用户角度出发。这不是一句空话,无论是设计用例还是测试执行过程中皆是如此。我们需要了解当前测试活动的背景,我们的客户是什么样的人群,高频的使用场景是怎样的,我们的新功能是否可以更好的解决客户的当前痛点(需求)。

我们除了在设计用例时适当的用上八大设计方法之外,更多的还是需要换位思考,如果我是客户的话会如何考量当前的UI、功能体验?

如果测试同学仅仅只是坐在自己的工位上YY自己是客户的话,那最多也只是自欺欺人而已,在日常的工作过程中,我们是否可以向销售、产品、售前售后人员进行必要的客户特征信息收集,甚至与相关人员访问客户、做对应的调查问卷,这些必要的动作都是需要测试人员去完成的,不然凭什么说测试可以站在客户的角度对产品进行测试,提出中肯而又专业的修改建议?

当软件测试同学真正的掌握了客户的画像与特征信息后才能够在用例的设计工作中创造出针对性极强的高效用例,而不是一纸空谈。

总结

由于篇幅关系,关于影响黑盒测试用例的设计因素大致就写这些。文章内的这些观点也是博主日常对团队内成员的真实要求,毕竟测试用例设计的是否优秀高效也是大家作为测试从业者的核心竞争力之一。

还有一点比较重要的就是坚持,如果你也想提升自己的用例设计能力,不妨在日常工作中多多的刻意练习,这个与环境无关、与旁人无关、与任何借口都没有关系,重点就在于你的动机与目标是否值得你驱使自己真正的动起来并坚持下去。

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

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

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

相关文章

【华为HCIP | 职业认证考试】821每日一刷

个人名片: 🐼作者简介:一名大三在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零…

STM32 ADC数模转换器

STM32 ADC数模转换器 ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁 STM32主要是数字电路,数字电路只有高低电平&#xf…

计算机网络重点概念整理-第四章 网络层【期末复习|考研复习】

第四章 网络层 【期末复习|考研复习】 计算机网络系列文章传送门: 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 第四章 网络层 【期末复习|考研复习…

云计算与ai人工智能对高防cdn的发展

高防CDN(Content Delivery Network)作为网络安全领域的一项关键技术,致力于保护在线内容免受各种网络攻击,包括分布式拒绝服务攻击(DDoS)等。然而,随着人工智能(AI)和大数…

AOSP 编译真机镜像与AVD镜像

硬件设备当然是配置越高越好,虚拟机编译至少需要16G内存300G硬盘空间 配置环境 Ubuntu 最好,安装方式网上一大堆,自行搜索,本文是基于 Ubuntu 22.04.3 LTS 更新&&配置 sudo apt-get update sudo apt-get upgrade sudo ap…

云服务器搭建Zookeeper集群

文章目录 1.集群配置2.zookeeper的群起脚本3. Zookeeper节点的创建和删除相关4. Zookeeper的选举机制 1.集群配置 Zookeeper的集群个数最好保证是奇数个数,因为Zookeeper的选举过程有一个“半数机制”。 5台服务器,可以设置Zookeeper的集群为3或者5&…

世界前沿技术发展报告2023《世界航空技术发展报告》(二)军用飞机技术

(二)军用飞机技术 1.作战飞机1.1 美俄对第五代战斗机进行升级改进1.2 美欧第六代战斗机技术取得新进展1.3 美国B-21隐身轰炸机正式亮相 2.支援飞机2.1 美国空军拟研制翼身融合布局运输/加油机2.2 美欧厂商积极参加北约未来预警机技术研究项目2.3 美国空军…

FPGA时序分析与约束(7)——通过Tcl扩展SDC

一、概述 术语“Synopsys公司设计约束”(又名SDC,Synopsys Design Constraints)用于描述对时序、功率和面积的设计要求,是EDA工具中用于综合、STA和布局布线最常用的格式。本文介绍时序约束的历史概要和SDC的描述。 二、时序约束…

【计算机网络】TCP协议

文章目录 1. TCP报文的结构2. TCP的发送缓冲区和接收缓冲区3. 确保可靠性序列号和确认序列号确认应答超时重传连接管理1️⃣三次握手建立连接2️⃣四次挥手断开连接 4. 提高性能流量控制滑动窗口拥塞控制延迟应答捎带应答 5. 面向字节流6. TCP/UDP对比 概念:TCP&…

threejs(7)-精通粒子特效

一、初识Points与点材质 // 设置点材质 const pointsMaterial new THREE.PointsMaterial(); import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; // 导入动画库 import gsa…

854算法之线性表

周小伦说的建议王道的所有算法题最好都写一下啊,尤其是树的,排序相关的要写一下,然后还有链表,链表有一些反转链表啊一些经典的代码肯定要背的呀,比如说,三种遍历的递归和非递归,怎么找树的宽度…

【C程序设计】用心浇灌<C程序>

目录 数据类型 整数类型 实例 浮点类型 void 类型 类型转换 数据类型 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 C 中的类型可分为以下几种&…

服务端推送、 server sent event、sse、springboot+sse

SSE(server-sent events) SSE全称server-sent events,翻译过来是服务端发送事件,通常的http请求,客户端请求,服务端返回响应,一次只能返回一个值;SSE使用的http协议,客户端请求后,服…

bbr 的 “最优操作点”

最近做一组测试,我复现了一组结果准备阐释另一个事。先看这个测试结果: 常规的一个 wrk2(expected_latency_timing 改为 actual_latency_timing 计数) 压 nginx 的测试,调整 -R 参数,Req/sec 同步增加,当 Req/sec 不…

(免费领源码) Asp.Net#SQL Server校园在线投票系统10557-计算机毕业设计项目选题推荐

摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,校园投票通过网…

液氮恒温器主要特点

恒温器是直接或间接控制一个或多个热源和冷源来维持所要求的温度的一种装置。 主要特点 更宽温区:液氮恒温器的温区宽度扩展到了80K~500K,为液氮温区实验用户提供更宽温区解决方案。 操作更简单:液氮恒温器在样品更换、液氮填充、控制液氮…

UI自动化概念 + Web自动化测试框架介绍

1.UI自动化测试概念:我们先明确什么是UI UI,即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试: Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 …

【分享】RAR压缩包的密码可以取消吗?

在日常工作中,我们可能经常用到RAR文件,RAR作为一种常见的压缩文件格式,可以将一个或多个文件压缩成单个文件,方便传输和保存。 RAR文件还可以设置“打开密码”,这样只有输入正确的密码才能打开压缩包里面的文件&…

SpringBoot 快速实现 api 加密

在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。常用的加密算法包括对称加密(AES)和非对称加密(RSA),博主选取码云上最简单的API加密项目进行下面的讲解。 下面请出我们的最亮的…

5 个编写高效 Makefile 文件的最佳实践

在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动化构建、编译、测试和部署。然而,编写高效的Makefile文件并不是一件容易的事情。在本文中,我们将讨论如何编写高效的Makefile文件,以提高我们的开发…