供热信息化过程中对软件产品质量的思考

作为供热行业软件提供商,我们深刻地感受到企业软件的需求越来越强烈,信息化越来越普及,软件已经成为企业运营的必备基础设施,并和企业管理不断融合,成为企业效益和竞争力提升的重要因素。在企业级软件领域,软件需要满足企业的个性化和实用性需求,就要不断地和企业的业务相融合,通过软件来支撑业务运转并辅助优化业务流程,因此对于软件公司,其服务特性越来越明显,这其中伴随着一些咨询、实施、定制开发、服务外包等服务内容。软件的质量也一直是软件开发方、使用方都很关注的事情,对于使用方,软件质量影响着使用体验和业务效率,对于开发方,软件质量影响着品牌、成本。软件质量该如何来评价,又该如何来提高?作为软件从业者,这是我们一直在思考和探寻的问题。

什么是软件产品质量

软件产品质量是指产品能够让用户顺利完成指定需求的能力, 对于大多数人来说,一说到质量,就会想到软件缺陷,而这只是质量的一部分,软件质量一般包括以下六个特性:

  1. 功能性,软件功能满足用户需求的程度。
  2. 可靠性,软件的稳定性,最好是不要出故障,其次是即使出了故障尽量不要影响主体功能,再次如果影响了主体功能,系统能够尽快恢复。
  3. 易用性,软件是否好用、好看、好理解、好上手。
  4. 性能,软件的响应速度,以及能支撑多大的并发、数据量。
  5. 可维护性,软件能否适应需求的变化而不断改进、扩展。
  6. 可移植性,软件能否适应环境的变化,包括硬件环境、软件环境等。

除此之外,产品质量特性还有先进性、安全性等。软件质量的标准不是绝对的,是有其相对性的,和行业特点、用户背景、期望、竞争产品水平都有关系,不同用户对软件的关注点也不一样,用户对软件质量的感知是产品各个方面特性的均衡反映。如何将复杂的软件做到高质量,这是软件开发行业一直的挑战和追求。

软件究竟是什么

软件从外在看是一些直观的界面,对于没有从事过软件开发的人来说,软件也像个黑盒子,里面的一切都是不清楚的,而盒子里面的内容决定了软件的一切表现,包括以上那些软件质量特性。软件究竟是什么?

软件的内在是程序,程序的本质是计算机指令,指令非常严谨,因为计算机是一个纯粹地执行体,绝对服从命令,因此指令也容不得一点错误。软件功能简单,程序也相对会比较简单,但如果当软件功能变得复杂,程序也开始变得复杂,并且这种复杂的递增并不是简单的线性增长,其复杂性是会叠加的。复杂系统的维护也会变得越来越复杂,出问题的概率也相应会增加。如果质量相同的两个软件产品,一个复杂度是另外一个复杂度的两倍,那前者研发难度将远大于后者研发难度的两倍。软件的趋势是越来越复杂,因为需要承载的业务和适应的场景越来越多,性能和体验也要求越来越多。

软件质量如何提高

有一种说法是,软件质量是开发出来的,不是测试出来的。严谨的软件开发过程是软件质量的重要前提,从前期的需求分析、业务架构设计、功能设计、技术架构设计、开发设计,到中期的编码开发,到后期的测试等,加上中间的各种评审节点,一个功能的实现需要上十个工序和节点,这些工序的质量综合决定了软件的质量。

这里重点说说设计环节,作为开发的前置环节,设计的充分度、清晰度将直接决定了后续环节的质量,这个环节包括对需求的收集、分析,对产品业务的架构设计,对需求场景的梳理明确,对细分逻辑的梳理明确,对操作流程、UI界面的设计等等。测试用例也是在这个环节开始并行做的,好的测试用例能大大提高测试质量。根据产品设计方案,再进行技术架构设计、开发设计,技术是对现实的抽象,好的产品设计能够让技术设计也更加清晰,再而让编码开发环节也更加顺畅,理想情况下,编码开发环节的时间占比是很小的,应该小于整个研发周期的五分之一。但实际很多情况软件开发过程中的编码时间占比是远超五分之一的,常见原因是设计不充分,甚至是边设计边开发,边开发边改设计,其次是编码质量不足。

有一个去超时买东西列购物清单的例子,列购物清单和写程序有显著的区别,如果购物单列得很乱,只不过会降低买东西的速度。但是如果程序写得很乱,实现最终的目标就会尤其困难。为什么呢?因为购物单是简单短小的,用完就可以扔掉。而程序是很复杂很庞大的,你可能还需要维护很多年。所以,同样是没有秩序,购物单只会给你造成一点儿小麻烦,程序却可以给你增添无尽的烦恼。对于一个软件产品来说,其维护的周期要远大于开发周期,因此软件的可维护性应该作为重点来考虑,仓促的设计、编码会使其维护性大大下降,从而导致滚雪球般的维护负担。

面对现实需求的复杂性,软件行业不断出现很多的开发方法,如UML、架构设计模式、领域驱动、敏捷开发、微服务等等,这些都有助于分解和降低软件的复杂性,来提升软件开发效率及质量。软件质量的提高需要加大对前期设计的投入,以提高设计质量,其次提高代码质量,让软件产品的维护性得以提高,从而能够投入更多的精力在软件其他特性的提升上,最后达到软件质量整体提高的目的。