软件构建的过程,系统和工具
上一章讲了软件开发(0->1->…->n)遵循什么过程,本章讲述软件构造遵循什么“子过程。
目录
- 广义的软件构造过程
- 狭义的软件构造:build
广义的软件构造过程
广义的软件构造过程大致分为以下几个过程:
Design=>Programming /refactoring=>Debugging=>Testing=>Build=>Release
编码(Programming)
Construction languages
从用途上划分
- 编程语言 (e.g., C, C++, Java, Python)
- 建模语言(e.g., UML)
- 配置语言(e.g., XML)
- 构建语言(e.g., XML)
从 形态上划分
- 基于语言学的构造语言
- 基于数学的形式化构造语言
- 基于图形的可视化构造语言
Programming tools
Programming tools主要是IDE,即集成开发环境,一个IDE由以下几方面构成
- 源代码编辑器、智能代码补全工具、代码重构工具
- 文件管理
- 库管理
- 软件逻辑实体可视化
- 图形化用户界面构造器
- 编译器、解释器
- 自动化build工具
- 版本控制系统
- 外部的第三方工具
代码评审和静态代码分析
可通过结对编程,走查,正式评审会议和自动化评审的方式进行。
静态代码分析:
静态代码分析是在没有实际执行程序的情况下执行的计算机软件分析(对执行程序执行的分析称为动态分析)。可以利用工具进行静态代码分析,例如CheckStyle, FindBugs, PMD for Java。
动态代码分析
动态分析要执行程序并观察现象、收集数据、分析不足,对代码的运行时状态和性能进行度量,发现代码中的潜在问题。
调试与测试
测试是为了发现程序是否有错误。
调试是为了定位错误、发现错误根源。
重构
重构是指在不改变功能的前提下优化代码
狭义的软件构造:build
粗略理解build:build-time ->run-time 借助于工具,将软件构造各阶段的活动“自动化” (编译、打包、静态分析、测试、生成文档、部署、…) 尽可能脱离“手工作业”,提高构造效率。
Build System
Build System有以下部分构成:
- Version-Control Tools
- Source Tree:程序的源代码存储为多个磁盘文件。 将这些文件安排到不同的地方称为source tree。 source tree的结构通常反映了软件的体系结构。
- Object Trees:一个单独的树层次结构,用于存储构建过程构建的任何目标文件或可执行程序。
- Compilation Tools: 将人可读的源文件翻译成机器可读可执行程序文件的程序。
- Build Tools:一个在编译工具之上的层次上运行的程序。 它必须对源文件和目标文件之间的关系有足够的了解,以便它可以编排整个构建过程。 构建工具调用必要的编译工具来产生最终的构建输出。
- Build Machines:执行编译和构建工具的机器。
- Release Packaging and Target Machines:产生的东西可以实际安装在用户的机器上。
Build process
构建工具调用每个编译工具来完成工作,这是一个端到端的事件序列。
持续集成(CI)
Build tools
For Java:
- Make
- Ant
- Maven
- Gradle
- Eclipse IDE
Build工具 + 相应的build script (类似于编程语言,告诉工具具体如何一步一步的build)
Make
使用Make and makefile来 build Java projects
Apache Ant
Ant是Apache Software Foundation开发的构建工具。Ant遵循的是将构建系统中的每个活动都封装成一个高级任务。Buildfile: build.xml
Apache Maven
Apache Maven是一款软件项目管理和理解工具。Maven的主要目标是让开发人员在最短的时间内了解开发工作的完整状态。只需在项目的pom.xml简单声明,Maven可自动将所需依赖项从远程服务器下载到本地并加入项目,省去了繁琐的手工配置过程。这些下载的JAR在本地由Maven统一管理, 在各个本地项目之间共享。
一般情况下,在命令行执行maven指令 (clean, compile, test, package, install, deploy, …)。 在Eclipse中可以以plugin 的形式加入maven支持, 直接创建符合Maven标准的project,并加以build。
Gradle
可以直接在Eclipse中使用Gradle build system。
使用方法
Build Java project in Eclipse
以可视化的方法build。Eclipse IDE为代码编辑,编译,版本控制,测试和任务跟踪提供了一套完整的开发工具。Eclipse中的构建功能只是更广泛的工具集的一部分,编译发生在幕后,而您甚至不知道发生了这种情况,Eclipse GUI使构建工作无缝地进行。你不写一个构建描述文件(比如makefile):Eclipse已经对这个软件的结构有足够的了解。