O研发管理系统。
3、开发自动化体系的建立。
相对于过程信息化而言,开发自动化体系的建立容易被忽视。其实,随着计算机技术的不断发展,在开发自动化支持方面已经有了不少成熟的解决方案。对软件开发而言,最典型的莫过于自动构建与持续集成,其它还包括代码自动走查,自动测试工具等。对硬件而言,也有不少自动测试手段,研发在生产加工的自动化支持方面同样有不少工作可做。其实,这里之所以提出自动化体系的建立,是指研发团队应该不停审视所有的研发过程,尽量将能够自动化的过程自动化。如果能够通过一个系统或计算机自动完成,就不要用人工的方法来完成这个工作。尽管很多研发过程自动化的建立相对而言比较耗费时间,但是为企业研发团队带来的效率的提升却往往非常明显。当然,自动化体系的建立是一个长期而艰苦的过程,但是真正优秀的公司的研发核心竞争力也往往会体现在这个方面。
对于文档体系和信息化体系的建立,我想不用过多的阐述大家都很容易理解,但是对于“开发自动化体系的建立”的这个概念,或许只是我的一点个人看法,为了便于大家理解,我这里就用一个对电子通讯和仪器仪表等行业研发团队在嵌入式软件开发领域非常适用的具体实例来阐述一下何谓开发自动化思想,如果您负责的团队正好也包含嵌入式软件研发,我想你会更加容易理解下面的内容:
对嵌入式软件来说,堆栈空间有严格的大小限制,而堆栈的使用状况对编程人员来说又不能够直观的被观察,这直接导致在嵌入式软件系统中经常会遇到堆栈溢出问题,一些低水平的开发人员总是容易在这上面犯错。而这种问题一旦被引入到最终的产品中,其隐蔽性强,导致的后果严重,且不易跟踪重现。我们具体来分析一下原因,从事过嵌入式软件开发的人都知道,函数参数和函数内的局部变量以及函数的递归调用层次等在函数运行时都会对堆栈的占用产生影响,而一些编程经验不足的开发人员往往容易在函数实现时在内部定义空间要求过大的局部变量(诸如多维数组)。大多数研发团队的解决思路是:将这个定义成编程规范,或者写成经典案例,或者将这个检查作为代码审查的CheckList的一部分。但是,我要说的是这些方法都不是最优的终极解决方案。这里我推荐我以前负责的研发团队中采用的一种做法给大家参考:函数对堆栈的大小依赖是可以被静态检查的,在函数编译的中间过程文件中,你可以分析一下里面的汇编语言,然后通过正则表达式匹配找出函数实现的地方,并分析出函数对堆栈的使用情况。通过写一小段堆栈使用检测的扫描脚本,在每次软件编译后,自动运行该脚本,然后将扫描的异常结果发给相关人review。这个自动处理的过程在我们的系统中引入后,几乎再也没有出现过堆栈耗尽溢出问题。我总结一下上面的过程:开发人员checkin代码->自动构建脚本运行->构建完成后自动运行代码静态扫描脚本(这里可以是任何静态检查工具,如PCLINT和C++Test以及我上面提到的堆栈检测扫描代码)->自动运行测试脚步(如冒烟测试,Unit测试等)->自动保存build结果供后续人工测试。上面的任何步骤失败都会自动通知相关人。 以上过程说复杂也有些复杂,说简单也简单,毕竟你要做的仅仅是整合各种现成的工具,然后开发一点点自动脚本,但是这条自动生成线一旦建立,却能够切实提升研发效率。
我上面只提到一个软件开发的实例,其实在开发过程中,有很多具体的环节都可以通过一些自动化的手段显著提高研发效率。如何发现哪些研发过程需要或可以自动化呢?这个需要仔细观察团队的实际工作情况,找出开发过程中重复的手工劳动比重大的工作,然后研究一下自动化是否可行,然后实施推广。
上述三个方面的内容谈的都非常笼统,任何一方面的工作展开来探讨都是一大堆内容,希望今后有机会能够与大家共同探讨一下这些方面的工作如何开展。