《软件工程之美》打卡第六周

345 阅读6分钟

上一周我给大家总结分享了软件工程之美当中的开发编码篇,这周会继续分享软件测试篇中的内容:

31 | 软件测试要为产品质量负责吗?

首先这个问题软件测试要为产品质量负责,但并不代表软件测试要担所有的责任,因为在软件工程当中,我们包含多个环节,比如:

  • 需求环节
  • 设计环节
  • 开发环节
  • 测试环节

每个环节都可能导致质量问题,而测试只是负责最后验收,它不能确保软件完全不出问题。

我们常说是软件产品质量是什么?

  • 功能质量(Bug数量、性能、UI/UX等指标)
  • 代码质量(可维护性、可读性、执行效率、安全性、课测试性)
  • 过程质量(是否如期,开发成本可控)

以上的定义相关影响,共同决定软件的质量。

谁该为产品质量负责?

不同的角色应该承担不同的责任:

  • 软件测试:对功能质量负责,产品测试验收,确保满足功能需求
  • 开发人员:对代码质量负责,写测试代码,通过自动化的方式做功能测试
  • 项目负责人:对过程质量负责,起主要责任

最理想状态:人人都为产品质量负责

32 | 软件测试:什么样的公司需要专职测试?

软件测试的主要工作

  • 发现bug
  • 报告bug
  • 跟踪bug

如何发现bug?

根据需求设计测试用例,尽可能覆盖所有用户操作的可能。除了基本的功能性测试,还需要进行非功能性的测试,包括性能、安全性和用户体验等。测试人员通过设计出完整的、有较高覆盖率的测试用例,逐一测试,这样就可以做到及时发现bug。

如何报告bug?

发现bug之后,通过bug跟踪系统跟开发人员创建Ticket,详细说明bug的内容,包括以下部分:

  • 预期和实际效果
  • 重现步骤
  • 必要的截图、日志等辅助信息

如何跟踪bug?

除了报告bug让开发去修复,测试人员还应该针对bug的修复验证。通常就是我们常说的回归测试,避免开发者因为修复一个Bug,引入其他的问题。

关于一些大厂不设置专职测试的话题

比如Facebook、Google和Amazon这些公司之所以能够做到不设置专职测试,它们都有以下共同的特点:

  • 大量优秀的工程师,可以同时兼任开发和测试;
  • 有大量的自动化测试代码覆盖
  • 强大的发布和监控系统
  • 时间进度比较宽松
  • 用户对Bug容忍较高

光是第一条,国内很多公司都达不到,我个人觉得人才是最重要的一环,能够写自动化测试代码并且保证覆盖的工程师本身就稀缺,还要依赖完备的发布和监控系统;从时间的调性,国内强调KPI,产品竞争激烈,时间会压得很紧,所以工程师首先压的就是测试的时间,更别说是写自动化测试了。

但从未来的趋势看,开发和测试更多的融合是一种常态,对工程师要求会越来越高;我认为完全不设置测试岗位不现实,类似一些功能性测试或许会从正式人力变成外包的形式,而正式人力会更多要求有开发能力去开发能提升测试效率的工具和搭建平台。

33 | 测试工具:为什么不应该通过QQ/微信/邮件报Bug?

一个基本的Bug信息包括

  • 标题;
  • 描述(包括期望结果、实际结果和重现步骤等关键信息)
  • 优先级;
  • 指派人;
  • 状态(New、Open、Rejected、Fixed等);
  • 其他。

为什么不用QQ、邮件等方式处理Bug?

  • 不易检索和跟踪
  • 效率太低,开发人员容易被消息打断
  • 不够直观,比如各种状态的统计

Bug跟踪系统的主要功能是用来跟踪Bug的,不是用来讨论和扯皮的。

一些自动化测试的趋势

  • 国外的一些大厂,手工测试职位在减少,转变招聘能写自动化测试的软件测试人员
  • 软件开发人员不仅要能写功能代码,还需要实现一定量的自动化测试代码

关于宝玉老师列的一些软件测试工具我就不重复贴了,感兴趣自己去订阅看看。

34 | 账号密码泄漏成灾,应该怎样预防?

这节课从标题上就能知道有关安全的话题,软件中的安全问题来源主要分为以下三大类:

  • 第一类:恶意输入(比如SQL注入、XSS攻击)
  • 第二类:假冒身份(后台没有做权限控制)
  • 第三类:数据泄露(账号密码明文记录,日志泄露)

如何应对安全问题?

  • 需求阶段就明确要求安全需求,做出针对性预防措施;比如用户权限的,要求有身份的验证;敏感信息,对数据进行加密等

  • 设计阶段,从架构层面增加安全方面的评审

    • 攻击面最小化
    • 权限最小化
    • 纵深防御
  • 开发阶段,保证良好的编码习惯和安全意识

    • 编码规范中加入安全相关内容
    • 要有代码审查
    • 增加安全相关的自动化测试
  • 测试阶段,增加安全性方面的测试

  • 上线维护阶段

    • 不部署源代码,只对编译后程序部署;删除Debug文件
    • 对服务器进行安全设置,比如说严格限制端口,只保留必须的端口;只对少数服务器开发外放服务;开启操作日志;对访问目录设置最小的权限。

出现安全问题怎么办?

  • 设立应急流程,出现问题知道找谁,第一时间恢复生产,避免进一步损失
  • 分析漏洞源头,可以通过分析日志,找出漏洞所在,针对性修复
  • 总结分析原因,吸取教训,改进流程,避免再次发生

最后

这周主要的学习内容是软件测试相关的,测试虽然是软件工程中一个环节,但也是非常重要的环节,它是保证产品质量的一道关卡,需要为产品最后验收的质量负责,帮助产品发现更多的bug。以前我们常常把开发和测试独立划分开,但随着研发模式进化,测试也逐渐成为开发人员也需要兼顾的角色,通过自动化测试的手段来减少手工测试,提升研发效率。这也给我们带来一些启示,未来测试的角色的工作会有所变化,开发的边界也不再局限于写代码这个角色,能够给产品带来效能的改进,就不应该设置边界。人人都应该为产品质量负责,人人都是产品经理。

欢迎关注我的公众号:巫山老妖

巫山老妖