第六章 敏捷开发与配置管理

课程来源: 学堂在线 -- 清华大学 -- 软件工程

6.1敏捷开发之Scrum

Scrum方法是1995年由Ken Schwaber和Jeff Sutherland博士共同提出,已被众多软件企业广泛使用,如Yahoo, Microsoft, Google, Motorola, SAP, IBM 等。

Scrum框架

整个开发过程是由若干个很短的迭代周期组成,一个短的迭代周期称为一个Sprint。

  • 一个Sprint是一个1-4周的迭代,它是一个时间盒。
  • Sprint的长度 一旦确定,将保持不变
  • Sprint的产出是"完成 "的、可用 的、潜在可发布的产品增量。

Scrum团队角色

自组织团队是敏捷软件开发的基本观念,即团队被授权自己管理他们的工作过程和进度,并且团队决定如何完成工作(任务的分配、技术决策、制定团队内部行为准则、保持过程透明度、监督和管理团队工作过程和进度)。

Scrum制品

产品订单:包含开发和交付成功产品所需要的所有条件和因素。产品订单的条目可以是功能性需求也可以是非功能性需求,还可以是主要的技术改进目标(如用Java代替C++重写系统以及已知的缺陷)。

迭代订单:团队承诺的在当前迭代要完成的任务列表,是通过选取产品订单项,来进一步细化和分解形成的。目的是将产品订单项转化为潜在的、可交付的产品增量。

可工作软件: 迭代开发的产出结果,是可以交付的产品增量,可交付的标准是在迭代初期设定的,每一次迭代都应该是一个可运行的版本。

产品订单

在迭代计划时,产品负责人告诉开发团队需要完成产品订单中的哪些订单项,开发团队决定在下一次迭代中他们能够承诺完成多少订单项。在迭代的过程中,没有人能够变更迭代订单,这意味着在一次迭代中需求是被冻结的。

用户故事

用于描述产品订单条目,是从用户的角度来描述他所期望得到的功能。

可视化管理

任务白板是团队开发的晴雨表,它将团队的任务和进度可视化地展现出来。而引入电子白板可能会削减团队之间的沟通,降低团队的透明度,违背了敏捷重视人和团队的原则。

燃尽图:以图形化方式展现了剩余工作量(Y轴)与时间(X轴)的关系。

Scrum规划

迭代计划会议

在每次迭代(或冲刺)开始时召开,一般是2~4小时,目的是选择估算本次迭代的工作项

  • 第一部分:以需求分析为主,选择和排序本次迭代需要实现的订单条目
  • 第二部分:以设计为主,确定系统设计方案和工作内容

整个团队全员参与,产品负责人逐条讲解最重要的产品功能,开发团队共同估算所需工作量 ,直到本次迭代的工作量达到饱和为止。

产品负责人回答与需求相关的问题但不干涉估算的结果

每日站立会议

会议目的

  • 团队在会议中做计划,协调其每日活动,还可以报告和讨论遇到的障碍。
  • 任务板帮助团队聚焦于每日活动上,应在这个时候更新任务板和燃尽图。

每个团队成员需要回答

  1. 上次例会后完成了什么?
  2. 遇到了什么困难(或障碍)?
  3. 下次例会前计划做什么?

有简要的问题澄清和回答,但不应该有任何话题的讨论,是开发团队内部沟通会议,<=15min

迭代评审会议

会议目的

Scrum团队在会议中向最终用户展示迭代的工作成果,团队成员希望得到反馈,并以之创建或变更 Backlog 条目。

基本要求

  1. 由团队展示有可能发布的产品增量,听取用户对产品功能的反馈
  2. 允许所有参与者尝试由团队展示的新功能
  3. 用户对团队演示的产品功能进行反馈

在迭代结束时候召开,由开发团队和相关人员一同评审迭代产出

迭代回顾会议

每一次迭代完成后,都会举行一次迭代总结会,会上所有团队成员都要反思这个迭代。举行迭代总结会议是为了进行持续过程改进,时间限制在1小时左右。

关键要点

  • 会议气氛:团队全员参加,气氛宽松自由,畅所欲言,发现问题和分析原因;
  • 关注重点:每次仅就1-3个关键问题做出可行的(方法简单、影响范围小、见效快,目标现实可行、积少成多)解决方案;
  • 跟踪闭环:可以放入下一次迭代订单中执行改进。

6.2 用户故事与估算

用户故事

用户故事(User Story)是从用户角度对功能的简要描述。

  • 独立性::尽可能避免故事之间存在依赖关系,否则会产生优先级和规划问题。
  • 可协商:故事是可协商的,不是必须实现的书面合同或者需求。
  • 有价值:确保每个故事对客户或者用户有价值的,最好是让用户编写故事。
  • 可估算:开发者应该能够预测故事的规模,以及编码实现所需要的时间。
  • 短小的:故事尽量短小,最好不超过10个理想人天,至少在一个迭代中完成。
  • 可测试:所编写的故事必须是可测试的。

用户故事类型

功能性需求,具体的是什么类型的用户,有什么样的需求,最终为了呈现什么样的效果

非功能性需求,如需要使用什么样的浏览器类型、技术增强以及缺陷修复等

产品订单

一系列用户故事的列表

敏捷估算

测算时,统计每个迭代所有已经完成的故事,对于没有完成的故事不计算在内

原则:开发团队一起估算,产品负责人和Scrum主管不参与实际估算(产品负责人负责阐述的澄清,Scrum主管负责指导和引导)

估算不是承诺,不应因其他因素而人工放大,成为团队与管理层之间的抛球游戏

准确与精确:估算应该准确但不必过分精确,过于精确的估算是浪费。

应该使用相对大小而非绝对大小进行估算

度量单位

故事点:一个相对度量单位。使用时,可以给每个故事分配一个点值;点值本身并不重要,重要的是点值的相对大小。

理想时间:一个绝对度量单位。理想时间是某件事在剔除所有外围活动以后所需的时间;一般为一天有效工作时间的 60-80%比较合理,但绝不会是全部。

理想时间

估算方法:团队查看每个故事,针对前面介绍的复杂性要素讨论故事,然后估计要用多少理想时间可以完成该故事。

  • 这种方式是人们平时习惯使用的,容易理解和使用
  • 人天生不擅长做绝对估计,很难达成共识
  • 不同人的理想时间估算是不同的,因每个人的能力和认识的不同而不同
  • 每个人的理想时间是不一样的,这种估算不能相加,由此产生的计划肯定是不准确的

故事点

基本做法

  • 给一些简单的"标准故事"设定一个"标准点数",形成比较基线;
  • 其他故事与标准故事进行比较,给出一个相对的比例,得到该故事的一个估计值。

使用难点

  1. 故事点的项目或产品特征很明显,几乎无法进行跨团队比较;
  2. 如果没有历史数据,很难设定标准故事。

敏捷估算扑克

本质上是扑克牌,它基于Delphi估算原理,可以快速地估算出需要的数字。

分牌:每名参与估算的成员分得相同花色的一组牌,两张Joker不参与估算。

讲解订单故事:产品负责人从Backlog中选择一个条目,为大家详细讲解该条目;团队成员进行讨论并提问,产品负责人逐一解答大家的问题。

估算:当团队成员确认已经对该条目完全了解且无任何重大问题后,大家开始进行估算,同时选出代表自己估算值的纸牌,在所有成员选牌完毕后大家同时亮牌。

争论与讨论:若每张牌估算值差距明显,代表大家对该条目没有获得共识,需要对评估结果进行讨论。

共识:对该条目重新进行估算,直到团队的评估数值达成一致。

  • 一般情况下,最多三轮就可以得出一个比较统一的意见;如果三轮之后依然没有得到统一的意见,那么Scrum主管应立即中断估算,取平均值或其他大家接受的值作为估算结果。

6.3 团队协作工具Tower

6.4 配置管理

软件配置管理

一种标识、组织和控制修改 的技术,它作用于整个软件生命周期,其目的是使错误达到最小并最有效地提高生产率。

软件配置项

软件配置项(Software Configuration Item,简称SCI)是为了配置管理而作为单独实体处理的一个工作产品或软件。

版本

版本是在明确定义的时间点上某个配置项的状态;版本管理是对系统不同的版本进行标识跟踪 的过程,从而保证软件技术状态的一致性,是软件配置管理的核心内容

一个配置项,例如一个源程序文件,可以有一个主干版本,也可以由某个版本的状态产生若干分支,分支版本也可以合并到主干上面

基线

基线(Baseline)是软件配置项的一个稳定版本,它是进一步开发的基础,只有通过正式的变更控制过程才能改变。

版本控制

独占工作模式

并行工作模式

支持多个人共同修改同一个文件

分支管理

分支包含了一个项目的文件树及其发展的历史,记录了一个配置项的发展过程。分支包含了一个项目的文件树及其发展的历史,记录了一个配置项的发展过程。

  • 代码库应该有一个且只有一个主分支,所有提供给用户使用的正式版本都在主分支上发布
  • 主分支只是用来发布重大的版本,日常的开发应该在另外的分支上完成
  • 如果开发分支上的文件需要正式对外发布,就在主分支上对开发的分支进行合并
  • 除了主干和日常开发分支之外,还有一些临时性的分支,用以应对一些特定目的的版本开发,例如功能分支或者缺陷修复分支等

实现多人并行开发一个新系统,同步地更改多个并行版本的错误以及同时集成和发布多个版本

软件配置管理工具

Git

最初由 Linux Torvalds 编写,用作Linux 内核代码的管理,后来在许多其他项目中取得很大的成功。它除了常见的版本控制管理功能之外,具有处理速度快、分支与合并表现出色的特点。

Github是一个基于 Git 的开源项目托管库,目前成为全球最大的开源社交编程及代码托管网站。它可以托管各种 Git 库,并提供一个 Web 界面。

6.5 软件配置管理工具Git

版本库

远端版本库:非本机上,例如放在服务器上或第三方托管主机上

本地版本库

创建与提交

Unix系较新的操作系统一般自带,Linux在apt-get可以安装,OS X可以port安装或在htt p://sourceforge.net/projects/git-osx-installer/下载安装。

Windows没有自带git,msysGit项目提供了安装包,可以在https://git-for-windows.github.io/下载安装。

git init 将创建的空文件夹变成一个空的版本库

git status 列出当前版本库尚未提交的改动(将这些改动称为未跟踪的文件)

git add file.txt 将file.txt文件标记,该文件被git版本库获知了(已经被跟踪了)

git commit -m "msg" msg为提交消息,这样就会把版本库中已经被跟踪的所有文件一同提交到版本库中

克隆到本地

从远端拉取

将远端版本库的内容与本地版本库进行同步

git pull 自动从远端拉取文件commit,这样变动的文件就同步到本地

提交到远端

将本地版本库中的变动同步到远端版本库,实现远端版本库的文件变动

git push 要求本地版本库有远端版本库中所有的commit

一般先git pull 再进行文件变动并提交后再git push

撤销变动

git reset HEAD file4.txt 将fiile4.txt的改动设置成未跟踪的状态,但是改动仍然存在

git checkout --file4.txt 彻底抛弃这个文件改动,恢复到上次commit的样子

修改提交

git commit --amend 将此次的修改增加到上一次的commit中

增加新分支

合并分支

冲突处理

删除本地分支以及远端分支

Sourcetree | Free Git GUI for Mac and Windows

6.6 持续集成与交付

DevOps基本概念

为什么需要DevOps?

快速的集成和交付部署

  • 更快从用户那里得到使用反馈
  • 更可以迅速对产品进行改进
  • 更好地适应用户需求和市场的变化

DevOps和敏捷开发的关系

开发团队和运维团队的协同成为快速交付高质量软件的瓶颈

DevOps是什么

目的:加强开发团队和运维团队的协作 使用自动化工具,尽早发现风险,实现持续、快速、可靠地交付高质量软件产品

DevOps实践

总结+概括如下

配置管理

软件配置管理的核心是版本控制。

持续集成(Continuous Integration CI)

开发者在代码的开发过程中,可以频繁地将代码部署和集成到主干,并进行检查、自动化测试和编译构建。

持续交付(Continuous Delivery CD)

在持续集成的环境基础上,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。

持续部署:在持续交付的基础上,把部署到生产环境的过程自动化。

提交集成:开发人员在开发环境中完成编码和单元测试之后,将代码提交到仓库中并发起集成

提交集成会触发私有构建,其目的是防止具有明显错误的代码进入仓库,从而保证代码的质量

集成构建:构建出产品的部署包,按线序进行编译、单元测试、代码扫描、打包

自动化功能测试、手工验收测试: 新功能是否符合要求

性能测试、安全测试:部署到预发布环境中,并进行印证,确定是否可以部署到生产环境中

DevOps工具链

相关推荐
搏博3 小时前
软件工程之软件项目管理深度解析
软件工程·软件构建·需求分析·软件需求
爱吃java的羊儿7 小时前
信息系统项目管理师-软考高级(软考高项)2025最新(十八)
信息可视化·软件工程·产品经理·可用性测试
我要学土木11 小时前
软件工程期末知识点整理(更新中)
软件工程
meisongqing12 小时前
【软件工程】软件缺陷 基于组合的优化方法
软件工程·软件缺陷·组合优化
搏博1 天前
软件工程之需求分析涉及的图与工具
数据库·软件工程·软件构建·软件需求
workflower1 天前
人协同的自动化需求分析
运维·开发语言·自动化·软件工程·需求分析·软件需求
meisongqing1 天前
【软件工程】基于机器学习的多缺陷定位
软件工程
搏博2 天前
软件工程之形式化说明技术深度解析
分布式·软件工程·软件构建·软件需求
meisongqing2 天前
【软件工程】基于频谱的缺陷定位
软件工程
搏博3 天前
软件工程之面向对象分析深度解析
软件工程·软件构建·需求分析·软件需求