软件构造复习2

软件生命周期和配置管理

(软件开发,从0到n,遵循什么过程?)

设计软件的两个基本模型模型

线性过程:从底层/需求开始,下一步是上一步的基础
迭代过程:回头解决不合理之处

其他模型

(选取标准:用户参与程度,开发效率/管理复杂度,软件质量)

瀑布过程(理论价值)

线性推进,分阶段,整体推进,无迭代,管理简单,无法适应需求变化
软件构造复习2

增量过程(实用价值)

线性推进,增量式,无迭代,容易适应需求变化
(一个一个功能地实现,独立地进行,最后合成一个软件)

软件构造复习2

V字模型

(包含测试功能,经过测试的软件代码质量更高,测试依据相时而动)
软件构造复习2

原型过程(沟通交流+解决问题)

(有迭代,根据用户使用反馈问题给开发者,开发者再进行修改原有的实现,如此反复;时间代价高;开发质量高)
软件构造复习2

螺旋模型(融合)

多轮迭代遵循瀑布模式,每轮迭代经历原型过程
软件构造复习2

Agile Development

敏捷开发:快速迭代+小规模持续改进 => 快速适应变化

1.设定发布周期
2.根据开发计划,完成周期内产品
3.不延期,按时完成

  • 极限的用户参与
  • 极限的小步骤迭代
  • 极限的确认/验证

(用户的作用在该模型中极大~)

eXtreme Programming(XP,极限编程)

软件构造复习2

软件配置管理 (建构管理)

追踪和控制软件的变化

1.软件配置项:软件中发生变化的基本单元(例如文件)
2.基线:软件持续变化中的稳定时刻(即对外发布的版本,需要保证时间合理,功能齐全)
3.CMDB:配置管理数据库(存储软件各配置项随时间发生变化的信息+基线)
4.版本控制VCS(复制修改文件名 => 现版本:回溯,比较差异备份软件版本历史,获取备份,合并版本,多个开发者共享,记录动作便于审计)

  • 仓库:相当于SCM中的CMDB
  • 工作拷贝:在开发者本地机器上的一份项目拷贝
  • 文件:一个独立的配置项
  • 版本
  • 变化:版本差异
  • HEAD:程序员工作的现版本

三种VCS
1)本地VCS:无法共享
2)集中式VCS:多开发者协作
3)分布式VCS:仓库存储于独立服务器+开发者各个本地机器

GIT

workspace 工作目录:本地文件系统
staging 暂存区:隔离工作目录和Git仓库
local repository 本地仓库
remote repository 提交仓库

  • 有关代码
    git init //生成.git目录
    git add * //该目录下所有文件纳入git管理【文件->暂存区】
    git clone URL local_repository //把远程仓库内容克隆到本地仓库
    git status //具体信息
    git commit -m “v0.1 All code in main()” //创建待提交的数据结构【暂存区->本地仓库】
    git log //查看提交信息
    git remote add origin URL
    git push -u -f origin master【本地仓库->线上仓库】

  • VCS和Git的区别
    软件构造复习2

  • 分支/合并
    软件构造复习2

(广义)软件构造的过程、系统和工具

编码开始
软件构造复习2

编程 Programming

从用途上划分:编程语言,建模语言,配置语言,构建语言
从形态上划分:基于语言学的构造语言,基于数学,基于图形,etc…

  • 编程语言

集成开发环境 IDE(例如,Eclipse)
源代码编辑器,智能代码补全工具,代码重构工具
可视化
图形化文件管理
库管理
软件逻辑实体可视化
图形化用户界面构造器
编译器,解释器
自动化Build工具
版本控制系统
第三方工具

  • 建模语言(一种人工语言,用于表达)

例如,UML(Unified Modeling Language)

  • 配置语言(配置文件配置程序的参数和初始设置)

开始只读取一次/周期性检查读取 以获得参数

代码评审 Review and static analysis

结对编程(实时评审,一人看一人写)
走查(提交后查看,改作业?)
正式评审会议
自动化评审(分析语法结构,C语言程设的模式吧)

代码评审的目的:改进代码,提升编程水平;在开源软件开发中应用较多

性能分析 Dynamic code analysis / Profiling

动态分析:要执行程序并观察现象,收集数据,分析不足
工具:例如,visualVM

调试与测试 Debugging and Testing

测试:发现程序是否有错误
调试:定位错误,发现错误根源
(调试是最后手段)

重构 Refactoring

在不改变功能的前提下优化代码

(狭义)软件构造的过程

build-time => run-time,借助工具将软件构造各阶段(编译,打包,静态分析,测试,生成文档,部署,etc…)的活动“自动化”,提高构造效率 => 最终生成可安装在用户机器上的软件,zip or unzip

  • 编译语言
    软件构造复习2
  • 解释型语言
    软件构造复习2
  • 基于网页的Web类型应用
    软件构造复习2
  • 单元测试,静态分析,etc…
    软件构造复习2

构建系统

私人/开发者构建(目的:自用)
发布型构建(目的:发布/测试)
完善型构建(不断更新。目的:可用性测试)

持续集成,每日更新

  • 构建工具
    Make、Ant、Maven、Gradle、Eclipse IDE