一个老程序员的软件质量观

一、 下面从两个角度谈软件质量——用户角度和开发者角度。
二、 质量保证和质量掌控的手段
三、 根据代码覆盖改进单元测试、提高代码覆盖率
四、 测试包括测试员测试、开发者测试
五、 质量意识、编码质量
六、 能够通过理解编码从而理解软件开发
七、 代码优化的原则
八、 数据库插入数据的性能优化
九、 对抗病毒、维护系统环境和开发环境的先进理念
十、 代码注释相关论点
十一、 能在头脑中设计软件
十二、 重点、难点、不明的、可能影响系统架构稳定性的问题的处理
十三、 成为软件高手必备的素质
十四、 高效的文档观
十五、 bug客观存在论
十六、 Logging排错法
十七、 测试员复测先进理念
十八、 函数编码方法论
十九、 安全编码意识
二十、 质量是高效的基础
二十一、 优秀的软件企业需要建设自己的企业开发平台
二十二、 要养成勤做笔记的习惯
二十三、 自动化测试能够提升软件开发和测试效率
二十四、 在他人的帮助下能够用原型法分析需求
二十五、 不同的详细设计观点
二十六、 模块分解粒度
二十七、 非技术领导了解和大体掌控软件质量的好方法
二十八、 能用匈牙利命名法对变量命名
二十九、 程序员和高级程序员相同点和不同点
三十、 高级程序员和架构师相同点和不同点
三十一、 架构师和高级架构师相同点和不同点

一、 下面从两个角度谈软件质量——用户角度和开发者角度。

所谓用户角度就是普通用户是看不到研发企业内部,接触不到研发人员和研发过程。普通用户只能通过使用产品来了解和感受产品质量。
所谓开发者角度就是要站在研发人员角度全面看产品质量,其中也包含了从用户角度看软件质量。不仅如此,还包含了研发过程掌控、质量保证和质量掌控的手段、软件和系统架构、开发效率、测试效率、源代码质量、源代码的复用性、软件性能、算法与数据结构等。

二、 质量保证和质量掌控的手段

管理、黑盒测试、开发者测试、使用开发平台优化系统、复查、复盘等等。
开发者测试,开发者测试的方法和手段层出不穷,花样繁多。比较重要的有利用断言测试、单元测试和代码覆盖、自动化测试(包括应用场景自动化测试)等。
合理使用断言(assert)可以提升产品质量,提高软件生产力。
单元测试的好处:
(1)高效的测试方法,可以快速进行大规模测试;
(2)可以与代码覆盖相结合优化测试用例;
(3)非常方便和高效的优化代码;
(4)提供了接口或类的全面的编程应用示例;
(5)做单元测试能让编码变得更有意思;
(6)单元测试本身是一种应用案例;
(7)测试先行会强迫你写code前先做规划;
(8)能尽早发现bug,开发成本更低,开发效率更高;
(9)从设计上讲,它的责任很明确,很容易就能放进系统之中,就跟它很容易放进测试之中一样。

三、 根据代码覆盖改进单元测试、提高代码覆盖率

(1)提高代码的覆盖率实际上就是进行了更完整的单元测试
(2)充分利用代码覆盖的好思路
(3)有些IDE不支持代码覆盖,如果语言是C/C++,尽量编写适合于该IDE和Visual Studio通用的代码,这样前期看是麻烦,实则是高效的方法

四、 测试包括测试员测试、开发者测试

研发人员需要通过自动化测试来保证正常使用产品或平台是没问题的,包括功能测试、应用场景测试。
自动化测试是指利用计算机自动进行的测试,一般自动化测试都是用代码(或脚本)完成的。纳信的自动化测试有:
(1)源代码级的自动化测试;
(2)NC/NScript级自动化测试(包括应用场景自动化测试)。
测试人员不仅需要测试正常使用,还要配合研发人员进行可靠性测试、易用性测试、性能测试、大数据量测试、标准化用语测试、安全性测试、国际化与本地化、破坏性测试、错误处理等。

五、 质量意识、编码质量

质量意识是指产品质量和企业的生存、企业的经营效率、成本、利润、管理等因素对比的地位,地位越重要越具有质量意识。
编码质量是一个综合问题,涉及到编程语言、编译器、数据结构、软件架构和设计、代码优化、数据库、界面、 络等技术等。

要保证用户角度的产品质量不难,很多企业都能做到,包括一些中小企业。全面保证研发者角度的软件质量是很难的,因为需要高级软件架构师,并且需要有自己的软件开发平台。

六、 能够通过理解编码从而理解软件开发

(1)编码是最容易的事,因为每个程序员都会编码;
(2)编码同时又是最难的事,因为即使你写了十年的代码,你非常可能与顶级编码高手仍然存在着非常大的差距;
(3)正式因为如此造成了软件开发追求功能完成是非常容易的,但要高效地开发高质量的软件却极端困难。

七、 代码优化的原则

(1)尽量精简代码,合理的压缩代码行;
(2)重复的代码COPY应尽量合成一份;
(3)减少没有必要的数据冗余;
(4)提升代码的执行效率

八、 数据库插入数据的性能优化

以SQL Server为例:
(1)”INSERT…”的效率和”INSERT…; INSERT…; 20到30个INSERT; INSERT…;”的性能约差一个数量级;
(2)20到30个INSERT和SQL Server的BulkCopy插入数据的性能约差一个数量级;
(3)BulkCopy和将数据存储到文件中的性能数据约差一个数量级

九、 对抗病毒、维护系统环境和开发环境的先进理念

对抗和预防病毒的先进理念是不安装杀毒软件,通过ghost备份几个不同阶段的系统映像,需要时可以快速切换到需要的系统状态。该方法用于维护多台同样配置的计算机非常高效,并且能够充分享受到100%的运行速度

十、 代码注释相关论点

(1)好的代码本身就具有很强的可读性,不需要很多的注释;
(2)对外接口必须有详尽的注释;
(3)要保证注释与代码的一致性;
(4)如果自己的代码过段时间(例如半年)后要花很长时间才能看懂,表示你该增加注释了

十一、 能在头脑中设计软件

(1)在头脑中设计软件是高效的软件设计方法,就像面对一个棋局,我们可以在头脑中计算今后的走向和变化;
(2) 通过头脑中设计+写写画画解决列出的问题,“头脑中设计+写写画画”进行概要设计;辅以写写画画可以进一步提升在头脑中设计软件的效率;
(3)在头脑中设计过程中,关键的、重要的、不明的概要设计问题要用技术可行性分析来论证;
(4)我们有很好的质量保证手段,因此我们在设计过程中把重点放在数据处理及数据展示上,同时考虑如何降低研发成本、维护成本和如何提升软件易用性上。前两步要反复迭代进行直至解决下列问题:软件有哪些模块模块的数据是什么在内存中的数据结构件和数据库中的数据结构量多大能够处理多长时间的数据数据的前提下如何保证系统流畅运行降低维护成本提升软件易用性降低用户学习成本才能具有强大扩展性化测试是否可行p>

十二、 重点、难点、不明的、可能影响系统架构稳定性的问题的处理

重点、难点、不明的、可能影响系统架构稳定性的问题要用技术可行性分析来论证,作为架构师和高级架构师,非常重要的一项工作原则是要尽量避免模块的开发工作推倒重来。虽然有些模块的重构工作不可避免,但要避免由于设计过程中考虑不周导致系统很多模块被推倒重来的问题出现。哪些是系统重点问题是系统难点问题问题可能影响系统的架构问题如何处理p>

十三、 成为软件高手必备的素质

(1)逻辑思维能力强;
(2)坐得住冷板凳;
(3)努力工作;
(4)刻苦钻研;
(5)爱好学习;
(6)勤于思考

十四、 高效的文档观

(1)如果是Word文档,仅限于用文本+样式、图像、表格、编 、Visio图来表达文档内容,不要搞太多花样,因为这样易学、易写、易读,从而减少了不必要的成本;
(2)不要把重要的时间浪费在文档上,因为绝大部分企业不能保证文档与产品、项目或现状的一致性,这就导致员工不愿看文档,更倾向于面对面交流;
(3)文档的形式建议多样化,例如文本、图片、Word、Excel、录音、视频;
(4)我们要注重文档的实用性而不是形式

十五、 bug客观存在论

(1)无论你有多高的水平,你写的代码都充斥着bug,所以要养成写完代码立即调试和排错的好习惯,而不是写完代码立即运行;
(2)单元测试和代码覆盖率可以提高开发测试效率,能实施单元测试和代码覆盖率的要尽量实施;
(3)“调试+单元测试+代码覆盖”是高效地、低成本地排除大多数bug的好方法
(4)能用软件标准术语 告bug 每个页面都有一个页面名称;页面名称 -> 操作步骤一 -> 操作步骤二 -> 错误现象描述 -> 修改建议

十六、 Logging排错法

(1)在不能调试的环境采用Logging来定位错误发生的原因;
(2)Logging不能解决所有的问题;
(3)应该能够关闭Logging;
(4)Logging在被关闭状态应该保证对系统的性能几乎没有影响,即最低的调用成本

十七、 测试员复测先进理念

合理安排测试员复测是一个非常好的激励黑盒测试手段,复测出bug数量就是前一个测试员没有测出的bug,通过将绩效与该bug数挂钩可以很大程度上激励黑盒测试

十八、 函数编码方法论

一次完成函数所有的代码之后再调试运行测试的方法是坏习惯,编码要逐步推进。例如:第一步先搭框架,调试运行测试至OK;第二步编写部分代码,调试运行测试至OK;第三步再编写更多代码,调试运行测试至OK,如此直至完成函数.
能够通过调试优化代码,保证代码质量
(1)学习先进理念的“bug客观存在论”;
(2)写完一小段代码要立刻调试;
(3)软件开发高手一定是抓bug能手,只要可能抓bug要从调试开始,因为调试是最低成本最高效的抓bug的方法

十九、 安全编码意识

(1)安全编码意识是指用非常低廉的成本或是零成本实现更可靠的代码,举一个简单的例子:

上述编码没有安全编码意识,编码者认为a不可能 (2)更安全的写法是if(a (3)优秀的编码人员要时刻有这样的安全编码意识;
(4)最为关键的是这种写法带来的安全性是免费的,是零成本的;
(5)类似的思路还有有时候需要用if和assert双保险来判断函数或模块的输入,保证输入虽然是垃圾,但输出不是垃圾

二十、 质量是高效的基础

(1)质量是高效的基础,只有拥有稳固的地基,才能建设高楼大厦;
(2)企业开发平台要一点一点的建设,要保证企业开发平台中每个模块的质量,这是高效的做法

二十一、 优秀的软件企业需要建设自己的企业开发平台

(1)优秀的软件企业需要建设自己的企业开发平台,建设企业开发平台是保证产品质量和提升软件开发效率的必经之路;
(2)软件企业只有通过构建企业开发平台才能慢慢积累企业的软件生产力从而做强做大

二十二、 要养成勤做笔记的习惯

不要怕麻烦,如果你事事怕麻烦,那你就不可能成为这个领域的顶尖高手。
编码过程中的思考是非常重要的资源,要充分利用它勤做记录。
记录好点子;
记录测试建议;
为需要复查或改进的代码做标记(ToDo)

二十三、 自动化测试能够提升软件开发和测试效率

(1)企业开发平台需要构建自动化测试体系,其中非常重要的模块脚本语言;
(2)合理而高效的自动化测试会遍及企业软件架构体系的每一层,包括单元测试层级的自动化测试,API、接口和类库层级的自动化测试,组件层级自动化测试和应用层自动化测试;
(3)越是高层级(例如应用层)的自动化测试越是依赖脚本语言;
(4)自动化测试是利用计算机自动进行测试的,并且无需人员值守,因此是高效的测试手段。

二十四、 在他人的帮助下能够用原型法分析需求

(1)客户是不可能完整表达他所有的需求;
(2)让客户根据原型提需求是非常好的需求分析方法;
(3)原型和分析需求的过程可以进行多次迭代

二十五、 不同的详细设计观点

(1)对于普通的应用程序,不赞同特别细致的详细设计。当然,大型应用和稳定性极端重要的软件除外;
(2)实际问题留在实践中解决,这正是软件研发企业的效率所在,也是软件研发的乐趣所在;
(3)很多企业的程序员和架构师被详细设计文档折磨得极其痛苦,不赞同这种做法.

二十六、 模块分解粒度

(1) 能够通过模块的分解和任务的制定大致掌握软件开发的进度,模块分解最大的粒度是5个工作日,最小的粒度为1个工作日;
(2)制定任务时不用“2017-5-8至2017-5-9”这种形式,要用“1工作日”这样的形式;
(3)制定任务要预留一定的缓冲时间.

二十七、 非技术领导了解和大体掌控软件质量的好方法

(1)功能及应用场景阶段性复审是非技术领导了解和大体掌控软件质量的好方法;
(2)将整个产品的研发过程分为几个阶段,定义每个阶段必须演示的功能及用户场景;
(3)告诉研发团队演示过程中尽量长时间连续运行软件;
(4)建议演示时间不要低于4小时,非研发人员不低于10人;
(5)制定一个演示大纲,演示过程中鼓励大家随时提出自己感兴趣的内容,想法越新奇花样越多越好,要求研发人员必须通过操作软件来回答和演示对方提出问题;
(6)总之形成一个长时间运行,并且研发人员不能按照他的预想步骤来操作软件,这样长时间的不按预想步骤的演示非常容易看出软件质量的;
(7)注意,开发早期也需要演示,可演示并且保证质量是一种好的研发思路;
(8)提供几个数据供参考,如果整个演示过程中出错次数小于等于1次,软件质量是顶级的;小于等于5次,软件质量非常不错;大于10次说明对软件质量的掌控存在一定问题.

二十八、 能用匈牙利命名法对变量命名

匈牙利命名法是一种重要变量命名规范,变量名=属性+类型+对象描述。举例来说,frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单。匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读性,方便各程序员之间相互交流代码。

二十九、 程序员和高级程序员相同点和不同点

(1)程序员和高级程序员的主要工作职责都是编写代码;
(2)相对于程序员,高级程序员能编写更高质量的代码;
(3)相对于程序员,高级程序员对企业开发平台、各种API、各种接口和类库了解更全面;
(4)一般而言,高级程序员有更丰富的开发经验;
(5)因此,一般而言,高级程序员肩负着开发更重要的模块;
(6)另外,高级程序员肩负着辅导和督促程序员的成长

三十、 高级程序员和架构师相同点和不同点

(1)高级程序员的主要工作职责是编写代码,架构师的主要职责是保证产品质量和提升团队的开发效率;
(2)对于企业开发平台,高级程序员侧重的是应用,而架构师侧重的是构建和维护企业开发平台;
(3)架构师对于数据结构的理解比高级程序员更加深入。

三十一、 架构师和高级架构师相同点和不同点

(1)架构师和高级架构师的主要职责都是保证产品质量和提升团队的开发效率、构建和维护企业开发平台;
(2)一般而言,高级架构师对于数据结构的理解比架构师更加深入,也有着更丰富的研发经验。
交流QQ:44511785

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年5月22日
下一篇 2019年5月22日

相关推荐