google的软件工程实践》在内容上,从软件开发,项目管理,团队建设三个方面提到了在google公司软件工程实施的一些实践。提到的很多实践并不陌生,在众多软件公司,包括我们周围的开发队伍中也在使用。但要达到google的实践水平,工作需要更细致、更系统、更具针对性(人力资源)一些。

结合google的软件工程实践内容,下图描述了软件产品项目的软件工程能力建设进程涉及的内容:

wKiom1jHsXzR0EhkAABu7Wd0Tv0412.png-wh_50

图中从文档、工具、测试、同行评审、项目管理、团队建设六个方面描述软件工程能力的逐步建设的进程。

        文档:软件产品项目应首先建立完善的文档模板库,在项目进程中,逐步完善项目基线文档、项目设计文档、项目测试文档、产品发布文档、产品工程文档等文档集合。随着软件产品的不断迭代,可根据工程实践和开发中遇到的问题逐步构建项目知识库。

        工具:“工欲善其事,必先利其器”,软件开发在初始阶段选择好使用的第三方开发、测试工具(如单元测试(UT)工具)、检查工具(如静态代码检查工具等),在项目进程中,可逐步开发一些提升工作效率的小工具。在测试阶段,自动化的测试工具会大大提升效率。使用版本自动化构建与发布工具是构建CI环境的基础,使用CI工具搭建CI环境能够实现软件版本的快速迭代。

        测试:测试是保障软件质量的重要手段,UT是开发阶段的重要一环,很大规模的软件代码错误能够在UT阶段就被发现,应该在软件团队中形成纪律(TDD(测试驱动开发)也是可以尝试的选择)。产品构建后,应根据集成测试规程进行集成测试,下测试部系统测试前完成冒烟测试。测试部测试后应该给出系统测试报告及测试通过与否的结论。产品迭代过程中,应对重点功能,模块进行专项测试或压力测试。

       同行评审:同行评审应贯穿在软件项目进程的所有阶段,有需求评审,设计文档评审,测试规程评审到代码走查都是为了发现潜在的问题。

        项目管理:项目进行中应首先明确项目阶段性目标和里程碑,目标和里程碑应具有时间可度量、成果可见和可验收的特性。应准确估算阶段成本和风险,根据目标选择合适的开发方式(瀑布式或agile方式)。阶段目标完成后应进行阶段性的总结和回顾。应定期进行软件代码的重构以保证产品的扩展性和鲁棒性。

    团队建设:人是软件工程的根本。团队建设是软件产品项目开发最重要的一环,软件团队中可设置不同的角色以完成特定的工作(如设置QA(可由软件工程师兼任)负责统计静态检查的bug数目)。提倡团队成员与团队一起成长,在团队内不同的模块和负责人员可交叉备份(集成测试时可交叉测试)。团队的协同解决问题能力提升同时,团队的战斗力也得到了提升。团队中应根据成员贡献确定明确的激励机制,提升团队的凝聚力。在项目进程中,提倡技术沉淀的几类,产品开发中使用的常用模式,常用问题解决方式可以文档、代码的方式沉淀下来以利于新的团队成员融入团队。