软件构造过程与项目配置 {ignore=true}
1. 软件构造过程
两个基本类型的构造过程:线性过程与迭代过程。
存在的模型:瀑布过程、增量过程、V字模型、原型过程、螺旋过程等。
各个过程有各自的优缺点,但是都有一个共同的特点:软件构造过程是一个复杂的过程。
2. 敏捷开发
敏捷开发是当下最流行的软件开发方法,它的核心是迭代开发。
快速迭代,快速反馈,快速响应。
敏捷编程有极限的用户参与、极限的小步骤迭代、极限的确认/验证,故也叫极限编程(XP)。
3. 软件配置管理与版本控制系统
软件配置管理(SCM)是一种管理软件构造过程的方法,它的核心是版本控制系统(VCS)。
版本控制系统是一种记录文件内容变化的系统,它可以在文件内容发生变化后,将文件的新版本保存起来,可以在将来将文件恢复到旧的版本。
比较典型的版本控制系统有:SVN、Git等。
而我们主要使用的是Git,并且可以使用GitHub来托管我们的代码。
在开发时,会有版本号的概念,比如:v1.0.1、v2.0.3等,这些版本号是由版本控制系统来管理的。
而这些版号也是有对应意义的。
在API中,这个版本号遵循语义版本规范。
版本号递增规则如下:
- 主版本号:当你做了不兼容的 API 修改,
- 次版本号:当你做了向下兼容的功能性新增,
- 修订号:当你做了向下兼容的问题修正。
先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
4. Git
Git 将顶级目录中的文件和文件夹作为集合,并通过一系列快照来管理其历史记录。在Git的术语里,文件被称作Blob对象(数据对象),也就是一组数据。目录则被称之为“树”,它将名字与 Blob 对象或树对象进行映射(使得目录中可以包含其他目录)。快照则是被追踪的最顶层的树。例如,一个树看起来可能是这样的:
<root> (tree)
|
+- foo (tree)
| |
| + bar.txt (blob, contents = "hello world")
|
+- baz.txt (blob, contents = "git is wonderful")
在 Git 中,历史记录是一个由快照组成的有向无环图。有向无环图,听上去似乎是什么高大上的数学名词。不过不要怕,您只需要知道这代表 Git 中的每个快照都有一系列的“父辈”,也就是其之前的一系列快照。注意,快照具有多个“父辈”而非一个,因为某个快照可能由多个父辈而来。例如,经过合并后的两条分支。
在 Git 中,这些快照被称为“提交”。通过可视化的方式来表示这些历史提交记录时,看起来差不多是这样的:
o <-- o <-- o <-- o
^
\
--- o <-- o
上面是一个 ASCII 码构成的简图,其中的 o 表示一次提交(快照)。
箭头指向了当前提交的父辈(这是一种“在…之前”,而不是“在…之后”的关系)。在第三次提交之后,历史记录分岔成了两条独立的分支。这可能因为此时需要同时开发两个不同的特性,它们之间是相互独立的。开发完成后,这些分支可能会被合并并创建一个新的提交,这个新的提交会同时包含这些特性。新的提交会创建一个新的历史记录,看上去像这样:
o <-- o <-- o <-- o <---- o
^ /
\ v
--- o <-- o
5. 编程
编程语言有很多种,众人熟知的有:C、C++、Java、Python、JavaScript、PHP等第三代编程语言,还有一些第四代编程语言,比如:SQL、HTML、CSS等。
而机器语言是第一代编程语言,汇编语言则是第二代编程语言。
而人工智能的大火将诞生自然语言作为第五代编程语言。(这都是后话了)
这些语言有些可以帮助我们进行程序的编写如:C等,还有些可以用于配置的管理,比如TOML
、XML
等。还有UML
等建模语言帮助我们进行建模,以便更好的开发。
而TIOBE是一个排行榜反映了当前最流行的编程语言,它的排名是根据搜索引擎的结果来进行排名的,所以其排名并不科学。
2023年5月的排名如下:
6. 代码审查
代码审查一般借助于静态分析工具,会检测出语法错误和和常见的一些空指针等问题。
与之相对的是动态分析,动态分析是在运行时进行的,比如:单元测试、集成测试、系统测试等。
7. 重构
重构是指在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。
8. 持续集成
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。