软件构造过程与配置管理
目 录
- 软件开发的生命周期
软件的生命周期(SDLC):交流->总结需求->可行性判断->系统分析->软件设->编程->测试->整合->实现->操作和维护->部署
- 传统的软件流程模型
基本类型:
线性过程:
迭代过程:
模型:
瀑布过程,增量过程,V字模型,原型过程,螺旋模型。
选择依据:不仅要考虑质量,还需考虑是否适用于变化,是否难以管理。
第3节 敏捷开发
敏捷开发:通过快速迭代和小规模的持续改进,以快速适应变化。
第4节 软件配置管理(SCM)和版本控制系统(VCS)
软件配置管理:追踪和控制软件的变化
软件配置项:软件中发生变化的基本单元(例如:文件)
版本控制:为软件的任一特定时刻的形态指派一个唯一的编号,作为“身份标识”
在给定的版本号中,major和minor这些数字通常按递增顺序分配,对应于软件的开发
版本控制术语:
Repository:仓库,在软件配置管理中的软件配置数据库,基于SCM中的CMDB
Working copy:工作拷贝,在开发者本地机器上的一份项目拷贝
File:文件,一个独立的配置项
Version or revision:版本,在某个特定时间点的所有文件的共同状态
Change or diff:变化,即两个版本之间的差异
Head:程序员正在其上工作的版本
版本控制系统:
Local VCS:本地版本控制系统,仓库存储于开发者本地机器,无法共享和协作
Centralized VCS:集中式版本控制系统,仓库存储于独立的服务器,支持多开发者之间的协作
Distributed VCS:分布式版本控制系统,仓库存储于独立的服务器+每个开发者的本地机器
第5节 Git作为软件配置管理工具的一个示例
Git存储库:
本地CMDB
工作目录:本地文件系统
暂存区:隔离工作目录和Git仓库
三种状态:
已修改:工作区的文件与暂存区的文件不同
已暂存:修改了的文件已经加载到了暂存区
已提交:已经跟本地库中的文件相同
(此时扔未push到远程仓库)
Git中的对象图:
Git的操作都是对一个图的操作
对象图记录着Git项目的历史信息,是一个有向无环图(DAG)
图中每个节点都是一个commit节点,HEAD指向当前的提交文件
Git指令:
用git commit指令添加文件到对象图中
用git push和git pull命令,发送和接收对象图(本地仓库与远程仓库)
在Git中创建和合并分支:
- 软件构建的总体流程
6.1 编程(Programming)
构造语言:
- 用途上划分:编程语言(C,java,python)、建模语言(UML)、配置语言(XML)、构建语言(XML)
- 形态上划分:基于语言学的构造语言、基于数学的形式化构造语言、基于图形的可视化构造语言
6.2 审核和静态代码分析
(1)代码评审是对源代码的系统检查,旨在在初始开发阶段发现被忽视的错误,提高整体质量,审查以各种形式进行,如成对编程、走查和正式评审会议、轻量级的代码评审
(2)利用工具进行静态代码分析:静态代码分析是在不实际执行程序的情况下执行的软件分析(程序执行时的分析称为动态分析),该过程提供了对代码结构的理解,并可以帮助确保代码符合行业标准。
- 目的:改进代码:查找错误,预测可能的错误,检查代码的清晰度,以及检查与项目样式标准的一致性;促进程序员学习和传承新语言特性、项目设计、编码标准和新技术的变化等。
6.3 动态代码分析
(1)动态分析是对程序所执行的软件的分析。
(2)目标程序必须执行足够的测试输入,以产生值得注意的行为。
(3)分析(“程序分析”、“软件分析”)是一种动态程序分析形式,它测量程序的空间(内存)或时间复杂度、特定指令的使用或函数调用的频率和持续时间。
6.4 调试和测试
(1)Software testing:软件测试是为向利益相关者提供有关被测产品或服务质量的信息而进行的调查,测试技术包括执行一个程序或应用程序的过程,以查找软件错误(错误或其他缺陷),以及验证该软件产品是否适合使用。
(2)Debugging:调试是识别错误的根本原因并纠正错误的过程。它与测试形成对比,测试是最初检测错误的过程,调试是测试成功的结果。与测试一样,调试并不是一种提高软件质量的方法,而是一种诊断缺陷的方法。软件质量必须从一开始就进行内置。构建高质量产
品的最佳方法是仔细开发需求,设计良好,并使用高质量的编码实践。
6.5 重构
(1)Refactoring:重构是一种改变软件系统的过程,使它不会改变代码的外部行为,而是改进其内部结构。
(2)重构是:重组(重新安排)代码、在一系列小的,保留语义的转换、为了使代码更容易地维护和修改
第7节 软件构建的窄义过程(构建)
(1)build的典型场景:传统编译语言的编译、解释语言编写的包装和测试、基于web的应用程序的编译和打包、执行单元测试以验证软件的一小部分
(2)编译后的语言:编译的语言,如C、C++、Java和C#。在此模型中,源文件被编译成对象文件,然后将其链接到代码库或可执行程序中。
(3)已解释的语言:解释的源代码未编译成对象代码,因此不需要使用对象树。源文件本身将被收集到一个发布包中,准备安装在目标机器上。
(4)build process构建过程:
第8节 总结
软件构建的一般过程:设计,编程/重构,调试,测试,构建,发布
软件构建的狭窄意义过程(构建):验证-编译-链接-测试-封装-安装-部署