软件构造第三章知识总结

3 软件构建过程与配置管理
3.1 软件开发生命周期
3.2 传统软件开发过程模型
软件开发过程模型分为两大类:线性过程与迭代过程。常见的模型包括瀑布模型、增量模型、V字模型、原型模型和螺旋模型。选择合适的过程模型需要考虑用户参与程度(适应变化能力)、开发效率(复杂度)以及软件质量等因素。
瀑布模型的特点是线性推进,阶段划分清晰,整体推进,无迭代,管理简单,但难以适应需求变更。适用于需求稳定的项目。
增量模型是在瀑布模型基础上引入增量式开发,可较好地适应需求增加,但仍无迭代。
V字模型在瀑布模型基础上增加了测试和评估,展现了开发各阶段之间的关系及相应的测试阶段。
原型模型通过在原型上不断迭代以发现用户变化的需求,时间成本较高,但开发质量也较高。其中,迭代是指开发后交由用户使用/评审,发现问题反馈给开发者,开发者修改原有实现后再交给用户评审,如此循环直到用户满意为止。
螺旋模型是一种风险驱动的过程模型,将开发分为四个步骤,并反复迭代。
3.3 敏捷开发
敏捷开发的核心思想是通过快速迭代和小规模持续改进来快速适应变化。其强调极限的用户参与、小步骤迭代以及确认/验证。常见的敏捷开发方法有极限编程(XP)和Scrum。
3.4 软件配置项管理(SCM)与版本控制系统(VCS)
3.4.1 软件配置管理
软件配置管理是追踪和控制软件变化的过程,其核心是版本控制和基线控制。软件配置项指软件中发生变化的基本单元。基线是软件持续变化过程中的"稳定版本",如对外发布的版本。配置管理数据库(CMDB)用于存储软件各配置项随时间变化的信息和基线。
3.4.2 版本控制系统
版本控制系统的常见功能包括:
个人:回滚版本、比较版本差异、备份软件版本历史、换取备份、合并等。
团队:多人协作、记录每个人的操作。
版本控制术语:
仓库:SCM中的CMDB。
工作拷贝:开发者本地机器上的项目副本。 
文件:独立的配置项。
版本:特定时间点所有文件的共同状态。
变化:两个版本之间的差异。
HEAD:当前工作版本。
版本控制系统的特征:
记录有意义的修改信息(变化及其原因)
可靠(保留旧版本) 
可回退到旧版本
可比较不同版本差异
可查看修改历史
支持多人协作与合并
允许独立和共同工作
3.5 以Git为例讲解SCM工具
Git仓库由本地CMDB、工作目录和暂存区三部分组成。文件在Git中有已修改、已暂存和已提交三种状态。Git的所有操作都基于一个对象图,对象图是一个有向无环图,存储在.git目录中。
Git与传统版本控制系统的区别在于,传统VCS记录版本之间的变化,根据原信息修改,速度较慢;而Git直接保存每个版本的完整信息,未修改的文件不重复存储,修改过的文件使用新指针指向,速度快。
常见的Git命令有:
git init:初始化仓库 
git add:将文件添加到暂存区并开始跟踪
git commit:将暂存区文件提交到本地仓库
git push:将本地仓库文件提交到远程仓库
git status:查看文件状态
git diff:比较文件与暂存区快照的差异
git rm:从Git中移除文件,不再跟踪
git fetch:从远程仓库抓取文件到本地,不合并
git pull:与fetch类似,但会与本地合并
git checkout:切换分支或创建新分支
git merge:合并分支,需在主分支上操作
GitHub是全球最大的开源平台,可通过fork项目到自己的仓库,修改后发起pull request来参与开源项目。
3.6 软件构建的一般过程 
3.6.1 编程
软件构造语言可根据用途分为编程语言、建模语言、配置语言和构建语言;根据形态分为基于语言学、数学和图形的构造语言。
3.6.2 审查和代码评审
代码审查是对源代码进行系统检查,常见方法有结对编程、走查、正式评审会议、自动化评审等。正式的代码评审会议是一种结构化检查,而轻量级代码评审开销小但效果可能相当。利用工具进行静态代码分析可在程序执行前发现问题。 
代码评审可发现bug、结构混乱、方法使用不当、错误使用设计概念等问题。
3.6.3 动态代码分析/评测(Profile)
动态程序分析通过执行程序来分析软件,需要充分测试,并使用测试工具确保代码功能被全面覆盖。评测是一种动态分析形式,用于测量程序的空间/时间复杂度、特定指令使用情况或函数调用频率与持续时间。
3.6.4 调试和测试
测试用于发现程序错误,调试则在发现问题后找到并修正bug,之后还需回归测试。调试和测试是发现和解决缺陷的主要手段,但并不能提高软件质量,软件质量应通过需求分析、良好设计和编码来实现。
3.6.5 重构
重构是在不改变软件功能、内部结构和外部行为的前提下优化代码。重构后需进行单元测试以确保代码正常工作。
3.7 狭义的软件构建过程(Build)
Build可简单理解为从Build Time到Run Time的过程,其本质是利用工具将软件构建各阶段(编译、打包、静态分析、测试、生成文档、部署等)自动化,从而提高效率。
3.7.1 典型应用场景
使用C/C++/Java/C#等传统编译语言编写的软件的编译
使用Perl/Python等解释语言编写的软件的打包与测试
基于Web的应用程序的编译与打包
执行单元测试以隔离验证软件的一小部分
使用静态分析工具识别源代码中的错误
生成PDF或HTML等格式的人类可读文档
3.7.2 编译系统的构成
编译系统通常包括版本控制工具、源代码树、对象树、编译工具以及用于生成可安装软件包的打包工具。常见的打包类型有压缩/解压缩格式、包管理工具和GUI安装工具。
3.7.3 Build过程
在Build过程中,构建工具调用各编译工具来完成编译、链接等任务。
3.7.4 构建语言(构建描述)
构建描述通常以基于文本的格式编写。
3.7.5 如何使用构建系统
开发者从版本控制系统获取源代码并进行开发,为测试组提供完整的软件包进行验证。构建过程确保当前源代码无错误并通过基本的健全性测试。
3.7.6 构建工具
常见的Java构建工具有Make、Ant、Maven和Gradle等。以Maven为例,它是一个软件项目管理和理解工具,主要目标是让开发人员快速了解开发工作的完整状态。通过在pom.xml中简单声明,Maven可自动从远程服务器下载所需依赖并加入项目,省去了繁琐的手工配置。这些JAR包由Maven在本地统一管理,可在各个本地项目间共享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值