软件构造复习2
一、软件生命周期与配置管理
1.软件生命周期
- SDLC:从无到有(0到1),从有到好(1到n)
2.Traditional Software Process Models
(1) 两种类型:线性过程,迭代过程
(2)模型:
- 瀑布模型:线性推进,阶段划分清楚,整体推进,无迭代,管理简单,无法适应变化
- 增量模型:线性推进,增量式(多个瀑布的串行),无迭代,比较容易适应变化
- V字模型:论证开发生命周期的每个阶段与其相关测试阶段之间的关系。
- 原型过程:在原型上持续不断的迭代发现用户变化的需求。
- 螺旋模型:多伦迭代基本遵循瀑布模型;每轮迭代有明确目标,遵循“原型”过程
3.敏捷开发
通过快速和小规模的持续改进以快速适应变化
Agile=增量+迭代,每次迭代处理一个小规模增量
4.软件配置管理和版本控制管理
(1)软件配置管理SCM:追踪和控制软件的编号
- 软件配置项:软件中发生变化的基本单元(eg:文件)
- 基线:软件持续变化过程中的“稳定时刻”(eg:对外发布的版本)
- CMDB配置管理数据库:存储软件各配置项岁时间变化的信息+基线
(2)版本控制VCS:
- 古老方法:复制文件并修改文件名
- 仓库:于SCM中的CMDB
- 变化:两个版本之间的差异
- Head:正在其上工作的版本
- 本地版本控制系统:仓库存储于开发者本地机器
- 集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
- 分布式版本控制系统:仓库存储于独立的服务器+ 每个开发者的本地机器
(3)git使用
- 工作目录:本地文件系统
- 暂存区:隔离工作目录和git仓库
- Object graph:版本之间的演化关系图,A->B表示在B的基础上形成版本A,由孩子指向父亲
- commit箭头形式:
每个commit指向一个父亲,
多个commit指向同一个父亲(分支)
一个commit指向两个父亲:合并 - Head:指向当前正在工作的分支
- tree node:指向具体文件存储的指针,与之前commit中未发生变化的文件
- git存储发生变化的文件而不是代码行,文件未发生变化,则后序多个版本始终指向同一文件;文件发生变化,两个版本指向不同文件
- 创建、合并分支操作:
git checkout -b name :创建分支
git checkout name:切换分支
git merge name:合并当前分支和分支name
git brach -d name:删除指向分支的指针,而不是删除分支本身
git fetch:将远程主机的最新内容拉到本地(当多个人对同一个远程仓库中的代码进行修改时)
二、软件构造的过程,系统和工具
1.软件构造语言
- 编程语言
- 建模语言:UML
- 配置语言:XML
- 构建语言:XML
2.静态代码分析
- 代码评审code review
- 工具:SpotBugs,CheckStyles,PMD
【注】Spotbugs是静态代码分析工具,profiling是动态代码分析
3.动态代码分析
- profiling性能分析:对代码运行时状态和性能进行度量,如内存占用率,cpu占用率
4.refactoring重构
在不改变功能的前提下优化代码
eclispe 中有重构工具