理顺软件开发各个环节-14(开发管理-编程实现)
5.7编程实现
软件开发,最后终归要编写程序代码来实现。
5.7.1关于程序语言
程序语言,即计算机语言,与自然语言的语种一样,也是五花八门,就我自己用过的语言就有:汇编、BASIC、FORTRAN、VB、C、C++、C#、PASCAL、PHP、JAVA、PYTHON、R等,还有脚本语言如:JavaScript/jQuery、HTML、XML、JSON、Shell、EL、SQL等。还有一些未曾使用但稍稍了解的语言,如ADA、COBOL、EPL、Erlang、F#、Go、LISP...等等,不一而足。
只要有配套的解释器或编译器,就可以有一种计算机语言。实际上,通过语法分析、词法分析,结合编译原理,就可以自己设计语言。
选择何种计算机语言,在总体设计时需要考虑,与软件依赖的软硬件环境有关,也与需要实现的需求有关,再结合计算机语言对开发实现带来的便利性。
在C++时代,不同的编译器有自己的类库,如Turbo C++、Borland C++、C++ Builder、Visual C++、GCC等,一旦选择,更换的成本非常高。
C++作为OOP的主力语言,高性能是优点,但内存管理给开发人员带来很大挑战,因此GC机制的引入,使得很多应用放弃了C++,而使用C#或Java。
Python近年来,持续火热,一方面因其支持函数式编程,另一方面与其支持大量机器学习算法包有很大关系。但由于其GIL,很难做到真正的多线程,并发能力是瓶颈。
在Windows平台,VC++和C#.Net是主流的选择;在Linux平台,主流选择是Java。其它如C、Python、PHP、Node.js等视需求选择。
Java作为跨平台语言,是如今B/S架构的主流语言,框架从早期的SSM到如今的SpringBoot,插件也非常丰富。因此,如有机会,就应尽量了解、熟悉和使用Java语言。
5.7.2关于编程规范
程序代码不仅输入给编译器或解析器,同时也是呈现给开发人员的。计算机语言,是表达思想的一种方式,这就需要开发人员有良好的表达能力。这个表达能力,不仅是符合计算机语言的语法和业务的逻辑结构,还应遵循约定的编程规范,从而使得开发团队成员阅读代码变得轻松,提高团队成员流动的便利性,降低代码的维护成本。
编程规范一般涉及如下部分:
- 代码注释规范(我倾向于使用母语注释,这样更容易准确表达和被理解,除非是跨国团队协作);
- 命名规范;
- 代码书写规范;
- UI规范(视需要)。
编程规范的执行情况,可以结合工具检查和人工代码审查来实行。工具如CodeStyle,Pylint等。
5.7.3关于接口先行
在代码开发之前,先确定接口,包括入参和出参,接口代码可以先不实现,用固定的值返回(即所谓的假接口)。
如Java开发,可以使用Swagger或YApi来开发接口,结合Mock构造数据,然后就可以部署,调试接口。
接口先行,好处多多。可以很容易发现参数是否缺失,数据类型是否合理等等,甚至可以检测出接口是否需要增加等情况。
由于代码尚未实际开发,所有调整的代价都是很低的;一旦代码已经编程实现,调整起来容易伤筋动骨。
5.7.4关于单元测试
Java开发,使用JUnit,实现单元测试,是提高代码质量的有效手段。
当然,单元测试的有效性,更重要的是测试用例的有效性;但使用单元测试框架,可以大大提高回归测试的效率。且单元测试可以单独部署,也便于测试验证。
因此,应尽量使用单元测试框架。
5.7.5关于持续构建
Jenkins使得代码的持续构建成为现实。
代码持续构建,方便获取可验证程序软件,便于及早发现问题,对于提高团队开发效率,帮助很大。当然,还需要与配置管理结合起来。
5.7.6编程实现阶段的关键信息
责任人:开发项目组长。
执行人:开发人员(软件工程师)。
关键行为:编码实现和自测。
输入:
- 软件需求规格书(SRS);
- 数据字典(DD);
- UI&UE交互设计原型(如果有);
- 用户故事;
- 总体设计文档(视需要);
- 概要设计文档;
- 详细设计文档(如果有);
- 接口设计文档;
- Checklist;
- 开发约定。
输出:
- 程序代码,使用代码配置管理,一般用dev分支或相应的开发分支;
- 单元测试及checklist,各check项都自测通过。
职责要求:
- 分析软件需求;
- 理解设计思想;
- 必要的详细设计;
- 编写程序代码;
- 实现软件需求;
- 单元测试;
- 代码review;
- 提交代码至配置库。