程序员写完代码之后该做什么?
程序员写完代码之后该做什么?
根据个人多年开发经验,为了有效提升项目代码质量,应该从程序员开始做一些能够提升代码质量的工作。一方面是对bug 的进一步筛查修复,另一方面,也能够对项目进行复盘,优化代码结构,提升代码质量。
下面四个代码测试工作,我个人认为比较重要,而且也是应该是程序员分内的工作。完成一些以下四个方面的工作,能够有效提升代码质量和项目质量。
- 单元测试(unit testing)
- 代码评审(Code review)
- 静态分析(Static program analysis)
- 动态分析(Dynamic program analysis)
下面是对应的详细介绍:
单元测试(unit testing)
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
注:在本人的工作经验中,这一部分大部分是程序员自己做的。写一写代码块的单元测试,对项目代码的高内聚,低耦合都有好处。尤其是多人合作项目,一定量共享的单元测试脚本,能在相当程度上避免扯皮。
代码评审 (Code review)
代码评审 (Code review)。代码评审是指在软件开发过程中,对源代码的系统性检查。通常的目的是查找系统缺陷,保证软件总体质量和提高开发者自身水平。 Code Review是轻量级代码评审,相对于正式代码评审,轻量级代码评审所需要的各种成本要明显低的多,如果流程正确,它可以起到更加积极的效果。正因如此,轻量级代码评审经常性得被引入到软件开发过程中。
注:在本人的工作经验中,这一部分相当的工作是由项目小组组长做的。一般在某一时间片段内(例如一天),对SVN或者git上提交的所有的代码变更,进行审查。这样可以让小组长能掌握组内所有成员的代码进度情况和质量情况。而且在提交的时候,能够有效的形成组长和组员的良性交流和互动,让组长能够及时的了解组员最近一个时间段内代码编写情况。在沟通过程中,也能对小组成员的代码质量完成点评,对组员的代码质量提升也很有帮助。
另外的代码审查方式有:结对编程(两人互相完成code review)。
静态分析(Static program analysis)
静态分析(Static program analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。
Static program analysis is the analysis of computer software that is performed without actually executing programs. (Analysis performed on executing programs is known as dynamic analysis.)[1]In most cases the analysis is performed on some version of the source code, and in the other cases, some form of the object code.
The term is usually applied to the analysis performed by an automated tool, with human analysis being called program understanding, program comprehension, or code review. Software inspections and software walkthroughs are also used in the latter case.
静态程序分析是对没有实际执行程序的计算机软件进行分析。(对执行程序进行的分析称为动态分析)。在大多数情况下,分析是在源代码的某个版本上执行的,在其他情况下,则是某种形式的对象代码。
这个术语通常应用于由自动化工具执行的分析,而人工分析被称为程序理解、程序理解或代码复查。软件检查和软件演练也用于后一种情况。
注:以本人的项目经验,静态程序分析一般就是指自动化工具执行的分析。通过Sonar oclint 等脚本自动化完成对代码质量的分析。一般是项目组或者整个个公司,共用一套分析工具,例如使用 jenkins+Sonar构建统一的代码质量管理平台,能够完成项目的自动集成和代码质量分析,并完成相关的代码质量报告生成。
下图就是Sonar分析代码质量报告的图例:
图片.png
Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
扩展阅读:
使用Jenkins搭建iOS/Android持续集成打包平台
动态分析(Dynamic program analysis)
动态分析(Dynamic program analysis)。动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。
Dynamic program analysis is the analysis of computer software that is performed by executing programs on a real or virtual processor. For dynamic program analysis to be effective, the target program must be executed with sufficient test inputs to produce interesting behavior.[clarification needed] Use of software testing measures such as code coverage helps ensure that an adequate slice of the program's set of possible behaviors has been observed.[why?] Also, care must be taken to minimize the effect that instrumentation has on the execution (including temporal properties) of the target program.[why?][context?] Inadequate testing can lead to catastrophic failures similar to the maiden flight of the Ariane 5 rocket where dynamic execution errors (run time error) resulted in the destruction of the vehicle.[1][relevant? – discuss]
Dynamic analysis is in contrast to static testing. Unit tests, integration tests, system tests and acceptance tests use dynamic testing.
动态程序分析是计算机软件的分析,它是通过在一个真实的或虚拟的处理器上执行程序来执行的。为了使动态程序分析更有效,目标程序必须通过足够的测试输入来执行,以产生有趣的行为。使用软件测试措施,例如代码覆盖率,有助于确保已经观察到程序的一系列可能行为的适当部分。此外,必须注意尽量减少仪器对目标程序的执行(包括时间属性)的影响。不充分的测试可能导致灾难性的故障,类似于Ariane 5火箭的首次飞行,在这种情况下,动态执行错误(运行时错误)导致了车辆的破坏。
动态分析与静态测试相反。单元测试、集成测试、系统测试和验收测试使用动态测试。
注:动态分析要比静态分析更加依赖于工具,例如在macOS/iOS 编程中,使用Xcode 可以对整个程序运行时的状态进行监控调试。而且可以限定外部环境,例如变更定位的经纬度,变更不同的网络状态(高速网络,拥塞网络等),这样能够让程序员更加便捷的了解程序的运行状态,从而对程序运行的相应情况更加了解。
下图是Xcode 对一个iOS 程序的运行时的监控界面:
屏幕快照 2018-05-02 上午11.13.41.png