如何提高c/c++大型项目的软件质量?
软件的交付质量一直是我们软件开发项目最为关注的核心问题,那么如何保证软件项目,尤其是大型和超大型软件项目的质量,不管在国内还是国外一直是许多软件企业一直关注和研究的问题。
通常我们会在功能性,可用性,高效性,可测试性,可维护性和可移植性等6个维度来对软件质量进行把控和评定。
1.功能性,即软件是否满足了客户业务要求;
2.可用性,即衡量用户使用软件需要付出多大的努力,简洁容易操作的软件,对于客户来说是非常重要的,就拿国内用户量最大的微信来说,你会不会觉得它的设计总是那么的简洁易用,以至于使用了这么多年,它的复杂度也没有增加很多,大道至简的产品设计和简单好用往往能吸引更多的用户;
3.可靠性,即软件是否能够一直处在一个稳定的状态上满足可用性;可靠性是质量的传统定义和基本要求。当然对于不同应用场景的软件有不同的要求,比如,大部分客户端软件来说,好用,绝大部分情况下能够正常运行和处理问题就可以了,但是对于一些行业的软件,如金融交易软件,航天和医疗软件,如果出现问题,那么产生的代价是巨大的。
4.高效性,即衡量软件正常运行需要耗费多少物理资源;程序的实际执行和事件处理效率。尤其是对于一些实时性要求较高的应用场景,几毫秒的差异可能会带来结果的截然不同。如互联网金融的高频交易软件、策略交易软件和军用软件。
5.可测试性,即能对每个功能模块做有效的测试,通常,我们的软件不会只因为通过了测试就变得可靠;到了你能够测试的时候,软件已经建立了内在质量。并不是所有的软件都可以被有效的测试。为了让软件可以有效地测试,我们必须在项目的开始的每一个环节都本着高质量的这个目标进行设计。
6.可维护性,即衡量对已经完成的软件进行调整的可行度;好的软件必须要有系统的缺陷追踪和对客户新需求的可扩展性。对于C++开发的许多系统来说,如果系统的设计不好,可能导致系统的维护成本和扩展成本都会非常高。大型的系统,可维护的设计都是从项目的每一步(需求分析,系统架构,详细设计,质量保障,严格测试等)都进行精心设计和策划而来的。
7.可移植性,即衡量软件是否能够方便地部署到不同的运行环境中;任何一个好的系统都应具备向新平台的可移植性。
提高软件质量的方法:
1. 质量保证(Quality Assurance,QA),一般是一个软件公司内部负责“确保”产品质量已达到某种标准的组织。建立软件测试过程模型,QA所做的测试都是在最终用户层次上进行的。任何层次的回归测试都依赖于开发者本身。
2. 质量保障,QA必须成为开发过程中不可获取的一部分,不能只等着开发人员扔过来一个软件才开始测试。开发者有责任保障软件产品的质量。QA要去体现这一点。不管是客户,还是架构师,开发人员,还是QA测试人员都有全程参与保证项目质量的责任和义务,要保证高质量的软件产品,系统架构师和软件开发者在整个软件开发过程中都必须把质量放在首位。
3. 建立PDCA循环,不光是对于开发人员的要求,也是对QA测试人员的要求。PDCA循环又叫质量环,是管理学中的一个通用模型。是英语单词Plan、Do、Check和Adjust的第一个字母,PDCA循环就是按照这样的顺序进行软件质量管理。
4. 避免重复代码,重构系统中重复的代码,减少不必要的干扰。
5. 及时测试已经完成的代码,建立缺陷跟踪。
6. 定期对代码进行审查,做好代码review。
7. 规范的代码注释,注释的目的是使得其他开发人员能够明白你所写的这段代码是做什么的?如果你的注释能做到这点,那么OK,那么你的注释是基本完美的。
8. 代码逻辑清晰,减少不必要的代码,写每一段代码之前都多思考一下,假设着提出几种方案,看哪种方案更加简洁易懂,就使用那种方案,力求能写出不言自明的代码。
9. 对多种能达到同一目的的算法,比较分析,找出更加有效和高效的算法。
10. 良好的命名习惯,函数变量名,变量,方法的命名要见词达意,使得看得人能一眼就看懂。
11. 复杂的类,方法,参数过多的函数应当把它拆分成更小的单元来实现,保证每一个单元的职责单一。
12. 不要在代码里面使用纯数字,能使用宏定义,经量使用宏。
13. 多层嵌套的代码,分开来处理,不要嵌套过深。
14. 局部变量保证其用途单一。
15. 提倡使用代码生成工具,尤其在大型系统开发中,使用自动化工具的好处是显而易见的。