软件构造过程与配置管理
软件开发生命周期(SDLC)
传统软件流程
基础类型:线性过程,迭代过程
现有模型:瀑布过程,增量过程,V字模型,原型过程,螺旋模型
选择依据:用户参与程度(适应变化能力)、开发效率(管理复杂度)、开发出软件质量
瀑布过程:线性推进,阶段划分清楚,整体推进 ,无迭代 ,管理简单, 无法适应需求 ,增加/变化
增量过程:线性推进,增量式(多个瀑布的串行),无迭代,比较容易适应需求的增加
敏捷开发
通过快速迭代和小规模的持续改进,以快速适应变化。
Agile=增量+迭代:每次迭代处理一个小规模增量。
极限的用户参与,极限的小步骤迭代,极限的确认/验证
软件配置管理(SCM)和版本控制系统
软件配置管理是追踪和控制软件的变化工具,核心在于版本控制和基线的确立
软件配置项是指软件中发生变化的基本单元(例如文件)
基线是指软件持续变化过程中的“稳定时刻”(例如对外发布的版本)
CMDB是配置管理数据库,用于存储软件的各配置项随时间发生变化的信息 + 基线.
版本:为软件的任一特定时刻( 派一个唯一的编号,作为“身份标识”)
版本控制系统分为三类
本地版本控制系统:仓库存储于开发者本地机器无法共享和协作
集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
分布式版本控制系统:仓库存储于独立的服务器 + 每个开发者的本地机器
git:经典的版本管理工具
存储库三个部分:本地CMDB,工作目录(本地文件系统),暂存区(隔离工作目录和git仓库)
项目文件三个状态:已修改,已暂存,已提交
Git的所有操作都是在一个图数据结构(对象图)上进行,从另一台机器/服务器复制git项目意味着复制整个对象图
在工作目录对某些文件作了修改之后,Git将这些文件标为“已修改”, 可提交本次更新到仓库。 逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复
基本git命令如下:
-
初始化仓库:
git init
-
克隆远程仓库:
git clone <repository-url>
-
添加文件到暂存区:
git add <file1> <file2> ...
-
提交更改:
git commit -m "Commit message"
-
查看提交历史:
git log
-
查看当前状态:
git status
-
拉取远程分支的更改:
git pull <remote-name> <branch-name>
-
推送本地更改到远程仓库:
git push <remote-name> <branch-name>
-
查看分支列表:
git branch
-
切换分支:
git checkout <branch-name>
-
创建新分支:
git branch <new-branch-name>
-
删除分支:
git branch -d <branch-name>
-
合并分支:
git merge <branch-name>
-
解决合并冲突:
- 手动编辑冲突文件,然后使用
git add
将解决后的文件添加到暂存区。 - 提交更改以完成合并。
- 手动编辑冲突文件,然后使用
-
查看远程仓库信息:
git remote -v
-
添加远程仓库:
git remote add <remote-name> <repository-url>
-
重命名分支:
git branch -m <old-branch-name> <new-branch-name>
-
查看文件更改差异:
git diff
-
撤销工作目录中的更改:
git checkout -- <file-name>
-
重置暂存区和工作目录:
git reset git clean
-
查看配置信息:
git config --list
-
设置全局用户名:
git config --global user.name "Your Name"
-
设置全局邮箱:
git config --global user.email "you@example.com"
-
拉取远程分支并自动创建本地分支:
git fetch <remote-name> <branch-name>
-
比较当前分支与远程分支的差异:
git diff <remote-name>/<branch-name>
GitHub:一个基于网络的Git服务器和互联网托管服务。
它提供了Git的所有分布式版本控制和SCM功能,并添加了自己的功能。
它为每个项目提供访问控制和几个协作功能,如错误跟踪、功能请求、任务管理和Wiki。
私有和免费存储库(用于开源项目)
软件的一般建设流程
编程:
用途上划分:编程语言,建模语言,配置语言,构建语言
形态上划分:基于语言学的构造语言,基于数学的形式化构造语言,基于图形的可视化
编程语言工具:集成IDE
下面是IDE所包含的组件
建模语言:建模语言是任何人工语言,可以用来表达由一组一致的规则定义的结构中的信息、知识或系统的语言,目的是可视化、推理、验证和交流系统的设计。
典型建模语言:UML。
配置语言:
配置语言用于形成配置文件,程序配置参数和初始设置。应用程序应提供工具来创建、修改和验证其配置文件的语法;某些计算机程序仅在启动时读取其配置文件。其他人则会定期检查配置文件是否有更改。
审核和静态代码分析:
代码评审:代码评审是对源代码的系统检查(同行评审)。
旨在发现在初始开发阶段被忽视的错误,提高整体质量。
评审以各种形式进行,如结对编程、非正式演练和正式检查。
正式代码评审会议:结构化检查代码和文档缺陷
轻量级代码评审:通常比正式的代码检查需要更少的开销。
利用工具进行静态代码分析:是对在没有实际执行程序的情况下执行的计算机软件的分析。
动态代码分析:
执行程序并观察现象、收集数据、分析不足
调试和测试:
测试:发现错误
调试:定位错误、发现错误根源
重构:
不改变功能前提下优化代码。
重构是改变软件系统的过程,即它不改变代码的外部行为,但又改进其内部结构。重构会带来短期的时间/工作成本,以获得长期的利益,并对您的系统的整体质量进行长期的投资。