个人经验:如何保证软件的质量?

如何保证软件的质量?

我是从事三维建筑设计软件研发的,因此我用它来起个头。
三维建筑设计软件属于三维设计软件。无论是哪个领域的三维设计软件,它的基本组成元素是点、线、面、体等几何图元。因为我们无法限制用户的操作行为,所以软件在用户操作之前,是不知道用户具体会在哪些位置创建点、线、面、体这些几何图形的。作为软件的研发者,我们如何能够保证在用户操作的时候不会出现质量问题?

质量保证三方面

软件质量的保证依靠三个方面,产品设计、研发和测试。
产品设计,一个好的产品设计,应该是简单明了的。用户可以通过最少的步骤,来完成他想要的操作。步骤少了,自然出错的可能性就降低了。我们经常说,好的产品需要聚焦于我们的核心用户的核心场景。
至简大师、苹果之父乔布斯曾说:“聚焦就是要说‘不’。你必须学会说‘不’。聚焦的结果就是一个伟大的产品,这个产品整体的价值远超于所有部件加起来的总和。”苹果公司的产品就是提炼出来的最终结果。不要错误地认为给用户“更多”地产品或服务就是“更好”;在很多时候,我们“去除什么”更重要。”少就是多“地观点不难被认同,要做到绝非易事。《麦肯锡结构化战略思维:如何想清楚、说明白、做到位》
上面的这段话同样适用于产品设计,一个好的产品,必然是聚焦的,功能必然是”少“的,不该有多余的功能。
研发,在确定了产品设计之后,就进入了研发的环节。作为写了十几年代码的老程序员,代码质量肯定是第一位的,是一切好软件的基石。但软件架构的设计、技术方案的选型也很关键,有可能会导致工作量上数倍的差异。例如,在技术选型中,是自研某个模块,还是采用第三方的呢?这是一个老生常谈的问题。一般来说,如果是核心模块,是软件的核心竞争力,一般优先自研。所谓核心竞争力,也是我们和其他厂商差异的地方,为了保证性能、质量和开发的自由度,自主研发更靠谱。如果是非核心模块,第三方已经非常成熟了,且成本可控,一般通过采购的方式,毕竟研发团队本身也是要聚焦于核心业务的。
测试,软件测试一般分为人工测试和自动化测试。对于新功能,刚研发出来的时候,需要人工测试;等功能稳定了之后,会通过脚本来进行自动化测试,并且会加入到CICD的流程中。人工测试很好理解,但为什么需要自动化测试呢?对于功能特别简单的软件,可以不要自动化测试。但对于大多数有一定逻辑的软件,自动化测试体系还是必要的,它能大大节省测试的人力和时间。软件研发的过程中,很有可能会破坏原有的功能。因此,每一个代码提交,理论上都需要把原有的功能都跑一遍,这在人力成本和时间上都是不可行的。在研发中保证代码质量,可以减少这种可能性,但无法杜绝。判断一家软件公司的研发水平,如果有自动化测试体系,水平不一定优秀,但如果没有自动化测试,水平一定相对较差。
回到三维建筑设计软件,如何保证软件质量?仍然从产品设计、研发和测试三个角度来分析。
产品设计,需要把该软件所面向的建筑设计产品描述清楚,从而定义出软件的功能。好的设计成果一般是非常简单明了,易于理解的。对于三维建筑设计软件,那么必然是从产品层面围绕建筑元素,例如墙梁板柱,来做的产品设计。它和建筑设计师原本头脑中就有的概念是一致的。
研发,三维建筑设计软件,它针对建筑所设计的数据结构和软件架构,从底层开始到应用层,要力求自研,确保对产品设计在技术实现层面上做到可控。另一个关键点,仍然是代码的质量。为了保证代码的质量,常规的代码审核、代码规范肯定少不了。同样,代码中的保护性代码也是必须的。上述这些是通用的,除此之外,三维设计软件还需要一系列和三维图形相关的测试工具,保证软件产生的几何体是正确的。
测试,自动化测试在三维建筑设计软件的研发过程中至关重要。没有自动化测试,软件研发基本没有可能性。回到开头,如何确保用户随意绘制,软件仍能正常运转?每一个发布版本,在发布之前,需要做大量的测试。这里的“大量”是远超合理的人工测试的工作量。在成熟的大公司,这类软件一般会有数万个自动化测试脚本,需要依赖于机器集群,并且非常耗时。

总结

软件的质量保证是个系统性的工程,在软件研发的整个流程中,都必须严阵以待,不能忽视其中任一环节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值