作者回复: 赞,感谢回复!🙏
作者回复: 我觉得对于API,应该要有版本的概念,也就是一个版本的API在确定前,多论证,多确认,确认后就不要做大的改动,大改动就用新版本,新版本上线时,旧API应该持续运行一段时间。
然后对于API修改后,应该当作一个小项目来看待,也就是要确保通知所有相关方,确定API切换的时间点,帮助调用房升级迁移到新版本。
最后再是自动化测试帮助检测。
作者回复: 首先,你要先搭建好自动化测试环境,让自动化测试代码能跑起来,最好最好要和CI(持续集成工具)整合在一起,每次提交代码CI都会跑自动测试,然后能看到运行结果。
然后,把自动化测试作为开发流程的一部分,比如说要代码审查和自动化测试通过后才能合并代码。这部分工作如何和CI集成会容易很多。
再有就是要培训,比如遇到不会写的,开始先带着他写几个,确保他学会了自己能写,然后下次代码审查的时候,看到缺了就要求补上,还不会就继续教,来不及写的就创建个TIcket跟踪起来。
简单来说,就是代码审查+CI+培训
作者回复: 我对嵌入式和硬件不懂,没有这方面的经验。不过软件和硬件的开发,都属于工程开发,这里面其实有很多道理是相通的。
吴军老师写过一篇很好的文章:《把事情做好的三条边》,里面举了莱特兄弟发明飞机的例子,莱特兄弟在试飞之前,打造了一个风洞,进行了上千次的风洞试验,这样可以不需要上天就可以对飞机进行测试。而同时期的很多飞行发明家,自己打造了一个飞机就上天,很多都摔死了。
自动化测试其实有些类似于风洞试验,相对于手工测试,可以“低成本”、“高效率”的对产品进行反复的测试和验证,每次提交代码就可以自动运行测试,马上收到反馈。
从软件的自动化测试和飞机的风洞试验,可以找到一些可以借鉴的点:
1. 找到了一条低成本测试的方式
风洞试验,可以降低飞行测试的成本,不必付出生命代价就可以测试结果;
软件的自动化测试,刚开始写的时候是要付出一些成本的,但磨刀不误砍柴工,运行次数越多成本越低。
嵌入式系统是不是也可以找到一条低成本、模拟的、反复测试的方式?
2. 可以模块化的测试
软件的自动化测试,主要有单元测试、集成测试、端对端测试这三种自动化测试类型。单元测试成本是最低效率最高的,而集成测试和端对端测试成本要高很多,所以通常单元测试最多,集成测试次之,端对端测试最少。
我想莱特兄弟发明飞机飞机之前,在组装成整个飞机之前,对各个模块也是有单独的测试,而且测试的应该和自动化测试的比例也是类似。
那么嵌入式系统的自动化测试,是否也可以分模块化的进行测试?让模块的测试占更大比例?
3. 可以即时得到反馈
软件的自动化测试,尤其是结合CI(持续集成),可以即时得到反馈。每次提交代码修改,就会出发自动化测试任务,这样一旦有导致自动化测试失败的代码,能即时发现。
风洞试验也是类似的,飞机不用上天,通过风洞的测试,马上就能得到反馈。
嵌入式系统的自动化测试,是否也可以做到即时反馈?在作出修改后,能否马上得到测试结果的反馈?
以上三点是我认为可以从软件自动化测试借鉴的地方,希望有所帮助!
作者回复: 推荐:《how we test software at microsoft》中文版《微软的软件测试之道》
不过没有书其实你也可以找到很多资料的。比如我平时写前端程序,那么我会去GitHub或者Google,通过关键字、语言找跟我项目类似的开源项目,然后看其中有没有自动化测试写得好的,找到了(例如:reactstrap、electron-react-boilerplate、kitematic)就照葫芦画瓢好了,因为都是真实项目,所以特别简单有效,建议你也可以试试。
另外耐心一点,你也可以看到很多关于测试知识分享的技术文章,多看一看也有收获。
作者回复: 1. 一般来说是这么对应的
3. 没有必要达到100%,这样做成本太高,需要有一个平衡和取舍
4. 我们项目集成测试和单元测试都有。
我们前端项目基于React开发的,所以接口的测试基于React的单元测试接口。
各有几百个测试用例。
整个测试单元测试很快,一分钟不到,集成测试要长一点,5-10分钟。
5. 前端框架都有测试框架,比如React/Vue都有单元测试框架,可以查阅其文档
作者回复: 实际开发中,理论上来说一个场景大中小测试都要写的。
通常来说,开发写小型测试和中型测试,测试写大型测试,或者开发帮助写大型测试。
小型测试:中型测试:大型测试比例大约为 7:2:1
小型测试尽可能多覆盖,不要求100%,谷歌是85%
中型测试覆盖大部分用户使用场景
小型测试覆盖主要用户场景
作者回复: 单元测试你可以用gtest,集成测试工具你可以参考我之前 那篇集成测试的文章,比如说试试Jenkins或者Gitlab CI。
具体怎么搭你可以参考网上的教程,应该已经有很多了
作者回复: 狭义的持续集成不包括发布,主要指集成,持续的(每次提交代码变更都触发,频繁的提交)对代码进行集成(合并到主干),但集成前要确保自动化测试通过。
广义的持续集成还包括部署,也就是集成后自动部署测试环境(持续交付)或者生产环境(持续部署)。
在《26 | 持续交付:如何做到随时发布新版本到生产环境?》这一篇里面有详细介绍。
作者回复: 1. 文章中的小型测试和中型测试都应该是开发来写的。大型测试一般是测试开发工程师来写,也可以开发写。
2. 这个必须要去学习的,
3. 单元测试不能使用真实数据库,必须要模拟数据访问的,否则速度太慢也不稳定
4. 集成测试一般用本机的数据库,或者也可以模拟数据。大型测试肯定用真实数据库的。
作者回复: 100%覆盖这个我觉得可以作为一种理想追求,但是没必要追求极致,还是要在进度和质量之间有个平衡比较好,毕竟进度也很重要。
另外对于前端业务,我更重视集成测试的覆盖,对于主要业务场景集成测试覆盖到位后,单元测试也就有比较多的覆盖,相对性价比更高,然后再逐步补充单元测试的覆盖率。
作者回复: 如果是单元测试,.Net Core应该自带了,例如:《.NET Core 和 .NET Standard 单元测试最佳做法》https://docs.microsoft.com/zh-cn/dotnet/core/testing/unit-testing-best-practices
你可以换一下关键字:".Net core unit testing", ".Net core integration tests"。
这一篇《Integration tests in ASP.NET Core》https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests 写的很详细,还有实例。
另外不知道你的具体是什么类型项目,Web还是Winform?
作者回复: 网站安全会在后面一篇有详细讲。如果你现在遇到了入侵,你可以查一下操作的日志看看,看登录的IP、账号,看是不是有什么线索。
作者回复: 可以试试 Appnium或者Ranorex。不过我没直接用过,不好评价是不是适合你,建议你先试试看。
作者回复: 开发写自动化测试,这是个事实,也是个趋势。像亚马逊、微软等很多公司都已经没有专职测试了,都是开发自己写自动化测试,部署测试环境后相互测试。
然而现在测试工作还是有很多开发人员做不到或者做不好的地方,比如说撰写测试用例、开发无法测试好自己写的代码、一些无法自动化测试的测试,像UI实现和UI设计之间的差异等。
作者回复: 👍感谢分享