软件构造课程随笔——2-1 2-2【软件构造的生命周期与配置管理】

本章概述

1、软件开发的生命周期
2、传统软件开发模型(瀑布模型、增量模型、V模型、原型法、螺旋模型)
3、敏捷开发和极限编程
4、软件配置管理
5、Git

1、软件开发的生命周期

1)软件开发的生命周期(SDLC):从零到一
计划→分析→设计→实施→测试和整合→维护
在这里插入图片描述
2)软件生命周期中的多版本:从一到多
示例一: Microsoft Windows (1985-2016)

2、传统软件处理模型

两个基本类型:线性、迭代
现有模型:瀑布模型、增量模型、V模型、原型法、螺旋模型
关键质量考虑:
用户参与(适应变化),开发效率,功能管理复杂度,软件质量

a.瀑布模型

利用使用,应对变化代价高。
开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。
瀑布过程:线性推进 阶段划分清楚 整体推进 无迭代 管理简单 无法适应需求增加/变化

b.增量模型

将整个产品分成不同的增量,逐一完成。
以增量的方式实施瀑布模型。系统被分解成很多小的开发工程,部分系统被构建来产生最后的系统,通常首先实现优先级最高的需求。一旦开始开发某增量,则该增量对应需求被冻结。

增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。、

c.V模型

可以认为是瀑布模型的扩展。
在编码阶段之后,将处理步骤向上弯曲,而不是以线性方式向下移动,以形成典型的V形。
演示开发生命周期的每个阶段与其测试的相关阶段之间的关系。
水平轴和垂直轴分别表示时间或项目的完整性(从左到右)和抽象级别(最粗的谷物抽象最上方)。

d.原型法

软件设计师和实施者可以从用户那里获得有价值的反馈在项目的早期。
客户端可以比较软件是否符合软件规格,根据哪个软件程序已构建。
它还允许软件工程师一些洞悉初始项目的准确性估计以及截止日期和里程碑可以成功实现。
迭代:开发出来之后由用户试用 评审,发现问题反馈给开发者,开发者修改原有的实现,继续交给用户评审。
循环往复这个过程,直到用户满意为止。时间代价高,但开发质量也高。
在这里插入图片描述

e.螺旋模型

一种风险驱动的过程模型非常复杂的过程:
多轮迭代基本遵循瀑布模式
每轮迭代有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一
轮迭代

3、敏捷开发

敏捷开发:通过快速迭代和小规模的持续改进,以快速适应变化。
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
Agile = 增量 + 迭代每次迭代处理一个小规模增量
极致用户参与、极致小规模迭代、极致V&V(指verification and validation)
在这里插入图片描述
敏捷开发方法:
1.eXtreme Programming (XP)
在这里插入图片描述
2.结对编程
3.任务板和进度监控
4.敏捷开发方法:Scrum
Scrum是迭代式增量软件开发过程,通常用于敏捷软件开发。Scrum包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员。虽然Scrum是为管理软件开发项目而开发的,它同样可以用于运行软件维护团队,或者作为计划管理方法:Scrum of Scrums.

4、软件配置管理

SCM的任务是跟踪和控制软件。
SCM实践包括版本控制和建立基线。
软件的任何组成部分(源代码,数据,文档,硬件,各种环境)可能会与软件生命周期中的时间。
软件配置项(SCI):基本结构单片机的单位。
基线:基线是在某时间点上,通过评审和认可后的版本,作为后续变化的基点。
在这里插入图片描述
版本控制是分配唯一版本的过程名称或唯一版本号以表示其的唯一状态软件。
在给定的版本号类别(主要,次要)中,这些数字通常按升序分配并对应软件的新发展。
在细粒度的级别上,经常使用修订控制来保持跟踪不同版本的电子信息,此信息是否为计算机软件。

软件配置管理(Software Configuration Management,SCM)是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。在软件建立时变更是不可避免的,而变更加剧了项目中软件开发者之间的混乱。SCM活动的目标就是为了标识变更、控制变更、确保变更正确实现并向其他有关人员报告变更。从某种角度讲,SCM是一种标识、组织和控制修改的技术,目的是使错误降为最小并最有效地提高生产效率。
软件配置项(SCI):软件生存周期各个阶段活动的产物经审批后即可称之为软件配置项。

古老的版本控制方法:通过复制文件并修改文件名
在这里插入图片描述

版本: 给软件某个状态唯一的表示
对于个人:通过版本版本控制可以实现回滚、版本比较、版本历史转移、融合版本等功能。
对于团队:在程序员间交流以及分享/融合作品。记录不同开发人员的工作,以便于审计。
在这里插入图片描述
分支: 在分支上进行并行开发,如测试新功能;其他人员不想在新功能完成之前涉及新功能;分支对单个开发人员也很有用;通过正确的设置,任何程序员都可以从任何位置拉出或推送到任何位置,从而在合作模式中创造出极大的灵活性。
版本控制系统(VCS)

本地版本控制系统
仓库:即于 SCM 中的 CMDB
工作拷贝:在开发者本地机器上的一份项目拷贝
文件:一个独立的配置项
版本:在某个特定时间点的所有文件的共同状态
变化:即 codechurn ,两个版本之间的差异
HEAD :程序员正在其上工作的版本

版本控制系统的特点
可靠:保留版本所需的时间; 允许备份
多个文件:跟踪项目的版本,而不是单个文件
有意义的版本:发生了什么变化,为什么会有变化
还原:全部或部分还原旧版本
比较版本 审核历史记录:整个项目或单个文件
不只是代码:散文,图片。

它应该允许多个人一起工作
合并:合并与常见先前版本不同的版本
追踪责任:谁做出了改变,谁触及了码?
并行工作:允许一个程序员自己工作一段时间(不放弃版本控制)
工作进行中:允许多个程序员共享未完成的工作(在不中断其他版本的情况下,不会放弃版本)
在这里插入图片描述
集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作
在这里插入图片描述
分布式版本控制系统:仓库存储于独立的服务器 每个开发者的本地机器
在这里插入图片描述

5.Git版本控制工具

在这里插入图片描述

Git仓库

Git仓库的三个部分:.git目录、工作目录、Staging区域(在内存中)
每个文件属于以下三个状态之一:Modified、Staged(这个文件被修改了并且加到了staging区域)、Committed(工作目录和git目录下保持一致)
Git中的对象图
Git的所有操作都是在一个图数据库上进行的,从另一台机器/服务器复制git项目意味着复制整个对象图。
对象图长什么样?
对象图是一个有向无环图(DAG)
在这里插入图片描述

Object Graph

版本之间的演化关系图,一条边A -->B 表征了“在版本 B 的基础上作出变化,形成了版本 A

历史记录图中的每个节点都是提交。该项目的又名版本:完整当时所有文件的快照。
除了初始提交外,每个提交都有一个指向父提交的指针。
某些提交具有相同的父级:它们是版本与常见的先前版本不同。 多个承诺
一些提交有两个父母:他们是版本将不同的历史联系在一起。分支只是指向提交的名称。
HEAD指向当前提交。我们需要记住我们正在处理的分支。 所以头指向当前分支,该分支指向当前提交。

Git表示具有树节点的提交。
对于任何大小合适的项目,大多数文件都不会更改给定修订。 存储文件的冗余副本会很浪费,因此Git不会那样做。
相反,Git对象图一次存储单个文件的每个版本,并且允许多个提交共享一个副本。
每个提交还具有日志数据,谁,何时,短日志消息等。
在这里插入图片描述

Git的基本命令

在工作目录中初始化新仓库
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行 git
init 命令, 用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:
git add *.c
git add readme.txt
git commit m ‘initial project version’
从现有仓库克隆:复制服务器上项目的所有历史信息到本地
git clone [ url ]

在工作目录对某些文件作了修改之后, Git 将这些文件标为“已修改”,可提交本次更新到仓库。逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复。使用 git add 开始跟踪一个新文件(使某个文件纳入到 git 中管理)。一个修改过的且被跟踪的文件,处于暂存状态。git add 后面可以指明要跟踪的文件或目录路径。如果是目录的话,就说明要递归跟踪该目录下的所有文件。git add 的潜台词:把目标文件快照放入暂存区域,也就是 add fileinto staged area ,同时之前未曾跟踪过的文件标记为需要跟踪。若对已跟踪的文件进行了修改,使用 git add 命令将其放入暂存区;运行了 git add 之后又对相应文件做了修改,要重新 git add 。
git status 回答:当前做的哪些更新还没有暂存?有哪些更新已经暂存起来准备好了下次提交?如果要查看具体修改了什么地方,可以用 git diff 命令,使用文件补丁的格式显示具体添加和删除的行。要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
若要查看已暂存起来的文件和上次提交时的快照之间的差异,可以用 git diff cached 命令。

git remote :获取当前配置的所有远程仓库
git remote add [ shortname ] url ]]:添加一个远程仓库
git fetch :从远程仓库抓取数据到本地
git pull 从一个仓库或者本地的分支拉取并且整合代码;
git push [remote-name] [branch-name]:将本地仓库中的数据推送到远程
仓库;
git remote show [remote name]name]:查看某个远程仓库的详细信息
git remote rm :从本地移除远程仓库

这些命令只是一些最为基本的命令,git的用法远不止这些,经常练习和实用gitbash可以在以后软件的开发过程中起到很好的作用。而且git的功能十分强大其功能也不仅仅限于上面所述,因此需要学习的地方还很多,善于利用软件版本控制工具可以有效提高开发效率。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值