文章目录
一.广义软件构造过程
总的分为以下的5个过程
1.编码过程
其实就是我们通俗来说的写代码的过程。
我们这里主要考虑构建代码时所用的语言。
按照用途划分为:编程语言,建模语言,配置语言,构建语言。
按照形态划分为:基于语言学的构建语言(我们平时用到的绝大部分),基于图形的可视化构建语言(UML等用图来展示效果的语言),以及基于数学的可视化构建语言。
语言仅仅是工具!不过还是java用着舒服
下面主要按照用途的划分来逐一介绍。
(1).编程语言
我们平时用的C++,java,python.matlab等都是编程语言,总的来说,编程语言的体系就是我们编写代码,通过编译器,编译成计算机能直接执行的代码。
一般而言,我们都用IDE进行辅助开发。
IDE:集成开发环境,核心理念就是提供一个运行时的框架,可以用插件的形式以实现很多强大的辅助功能,不展开介绍了。
(2).建模语言
主要是用于人与人之间的交流,如UML语言。
由于现在软件的开发,尤其是大型软件的开发,都很难一步到位,分为很多个流程。如果流程与流程之间没有很好的交流沟通的形式,只是用编程语言作为一个传递品,则后面产生的误差就可能越来越大;因此每步之间就需要可以很好的实现模型概念传递的建模语言。
当然,建模语言的使用会使软件开发的周期变长,不过可以提升软件开发的效果。
下图为UML图的一个例子。
(3).配置语言
总的而言,我们写的程序很多时候要有很多要和计算机底层进行交互的各种参数,例如最简单的内存大小,采用32位还是64位等等一系列的内容。如果我们把这些也加入到编程语言的语句中,一是更改就要重新编译,二是让那些编程语言变得冗余复杂。因此,我们就需要配置文件,来对相应的内容进行配置。然而配置文件总要有对应的格式,将其进行结构化后的产物其实就是所谓的配置语言。
早期的配置文件一般是.ini格式,如下图所示(其实现在也很多),目前比较流行的是json等。
2.代码评审
特点:并不运行程序,只是分析代码。
目的:修改bug和潜在的bug,发现风格问题,帮助理解代码结构和理解,加强团队交流以提升大家水平等。
方式:(1).结对编程,也就是两个人一起写代码,一个主要负责写,另一个人主要负责评审等。(2).走查,也就是所谓的代码抽查(3).正式的评审会议,在企业中很正式且很常见,可以大大提升找到错误的概率。(4).自动化评审,主要是利用各种工具,比如CheckStyle等等,当然这些都是静态分析。
3.动态代码分析
特点:真正的运行程序,通过运行结果的不同来进行分析。
目的:主要是检测出bug和漏洞,以及分析出程序的时空复杂度等等(当然很多内容都是需要各种软件或者插件来实现)。
总的来说,由于测试样例需要软件开发者自己来编写,因此编写出所谓的好的覆盖度全的测试样例很重要,这部分会在6.5中讲解。
4.调试与测试
具体内容见6.5节。
其中测试主要是用于发现程序是否有错误。
而调试用于定位错误,发现错误根源并对其进行纠正,为成功测试的后续环节。
5.重构
特点:不改变功能,也不改变接口和对应的用途等,主要是重组代码。
目的:用比较短的时间提高性能(即代码优化)。
二.狭义的软件构造过程(构建)
总的来说,指的是借助于各种工具,将软件构造各阶段活动"自动化"
1.使用构建的场景
编译的过程;打包(比如打成jar包)和测试的过程;对web文件的编译和打包(有的需要编译,有的是解释型的,不用编译但是需要打包);单元测试与静态分析以及生成报告与文档。
2.编译系统的组成
主要包括版本控制器,源文件树,编译工具(包括编译器,汇编器,连接器,文档生成器等等,详情可参考CSAPP),编排工具(将各种文件很好的组织在一起)
由于有原生编译和跨平台编译之分,从而有时需要多台机器。
3.编译的步骤
总的来说,编译的步骤如下图所示;不过由于面向客户的种类不同等等,步骤也略有差异。
4.JAVA语言的一些构建工具
构建工具都要搭配对应的语言来使用。JAVA中目前比较流行的是Maven,Ant和Gradle,还有比较冷门的make等。下面我们分别进行介绍。
make:通过一系列以"make"开头的命令来构建java项目。
Ant:把每个任务封装成高级task的形式,在xml文件中进行编写,功能上与make相似,只是语法更简洁,更易组织管理和书写。
Maven:目前国内最流行的工具,是Ant的扩展,也基于XML,目前eclipse已经内置了Maven的插件。开发Web上的大型软件用的居多。
Gradle:有自己的一套脚本语言,命令更简洁。手机开发用的很多。