一、本章概述
1、软件开发的生命周期
2、传统软件开发模型(瀑布模型、增量模型、V模型、原型法、螺旋模型)
3、敏捷开发和极限编程
4、协同软件开发
5、软件配置管理
6、Git
7、总结
二、本章目标
了解软件开发的一般过程
了解传统软件过程模型的原理,包括线性和迭代模型(瀑布模型、增量模型、原型法、螺旋模型和V模型)
了解并实践敏捷开发
了解软件配置管理(SCM)
学习如何将Git用于日常的SCM任务(用于个人开发的基本命令,用于协作开发的高级命令)。
三、正文
1、软件开发的生命周期
软件开发的生命周期(SDLC):从零到一
计划→分析→设计→实施→测试和整合→维护
软件生命周期中的多版本:从一到多
示例一: Microsoft Windows (1985-2016)
集中软件生命模式
2、传统软件处理模型
两个基本类型:线性、迭代
现有模型:瀑布模型、增量模型、V模型、原型法、螺旋模型
关键质量考虑:
用户参与(适应变化),开发效率,功能管理复杂度,软件质量
瀑布模型:利用使用,应对变化代价高。
开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。
增量模型
将整个产品分成不同的增量,逐一完成。
以增量的方式实施瀑布模型。系统被分解成很多小的开发工程,部分系统被构建来产生最后的系统,通常首先实现优先级最高的需求。一旦开始开发某增量,则该增量对应需求被冻结。
百度百科
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。
V模型(用于验证和确认)
V模型是瀑布模型的扩展,强化测试。
编码阶段结束后,工艺步骤向上弯曲,形成典型的V形,而不是以线性方式向下移动。
论证开发生命周期的每个阶段与其相关测试阶段之间的关系。
水平轴和垂直轴分别表示时间或项目完整性(从左到右)和抽象级别(最粗的纹理抽象最高)。
原型法
原型法是指开发软件的原型,其模拟最终产品的几个方面,甚至完全不同。
过程:
确定基本需求,包括输入输出信息。软件细节可以被忽略。
开发最初的原型,只包括用户接口。
客户测试原型并提供对于增加和改变的反馈。
修订和增强原型:通过反馈来改善原型。
好处:
在项目早起可以获得用户的反馈。
用户判断软件是否符合规格说明。
对软件进行估算。
螺旋模型
一种风险驱动的过程模型。基于给定项目的独特风险模式,螺旋模型指导团队采用一个或多个流程模型的元素,例如增量法、瀑布法或原型法。
3、敏捷开发
提倡适应性规划、演化开发、尽早交付和持续改进,并鼓励对变化作出快速和灵活的响应。
“人”以及“人与人的互动”胜于“过程”和”工具”
可运行的软件胜于面面俱到的文档
客户合作胜于合同谈判
响应变化胜于遵循计划
百度百科
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
极致用户参与、极致小规模迭代、极致V&V(指verification and validation)
敏捷开发方法:eXtreme Programming (XP)
结对编程
任务板和进度监控
敏捷开发方法:Scrum
百度百科
Scrum是迭代式增量软件开发过程,通常用于敏捷软件开发。Scrum包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员。虽然Scrum是为管理软件开发项目而开发的,它同样可以用于运行软件维护团队,或者作为计划管理方法:Scrum of Scrums.
4、协同软件开发
开源
开源开发模型
(图上内容比较简单,就不翻译了
模型细节
5、软件配置管理(SCM)和版本控制系统(VCS)
软件配置管理(SCM)
SCM的任务是追踪与控制软件中的变化,SCM实际任务是版本控制和建立基线。
生命周期和配置项(CI)
软件配置项是软件配置管理的基本单位,任何需要管理的要素都时软件配置项(源代码、数据、文档、软硬件、环境等)
软件配置项(SCI)和基线
基线是在某时间点上,通过评审和认可后的版本,作为后续变化的基点。
CMDB and Check-in/Check-out for Auditing
CMDB (Configuration Management Database) 即配置管理数据库
百度百科
软件配置管理(Software Configuration Management,SCM)是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。在软件建立时变更是不可避免的,而变更加剧了项目中软件开发者之间的混乱。SCM活动的目标就是为了标识变更、控制变更、确保变更正确实现并向其他有关人员报告变更。从某种角度讲,SCM是一种标识、组织和控制修改的技术,目的是使错误降为最小并最有效地提高生产效率。
软件配置项(SCI):软件生存周期各个阶段活动的产物经审批后即可称之为软件配置项。
版本: 给软件某个状态唯一的表示
对于个人:通过版本版本控制可以实现回滚、版本比较、版本历史转移、融合版本等功能。
对于团队:在程序员间交流以及分享/融合作品。记录不同开发人员的工作,以便于审计。
分支和演进图
分支: 在分支上进行并行开发,如测试新功能;其他人员不想在新功能完成之前涉及新功能;分支对单个开发人员也很有用;通过正确的设置,任何程序员都可以从任何位置拉出或推送到任何位置,从而在合作模式中创造出极大的灵活性。
版本控制系统(VCS)
本地版本控制系统
中心式版本控制系统
分布式版本控制系统
版本控制术语
仓库、工作副本、文件、版本、改变(Chage)或不同(diff)、Head(当前版本)
版本控制系统的特性
可靠的、多文件、有意义的版本、回退、比较版本、查看历史等。
融合、责任跟踪、以及允许一个程序员独自工作一段时间,允许多个程序员共享未完成的工作。
6、Git
Git仓库
Git仓库的三个部分:.git目录、工作目录、Staging区域(在内存中)
每个文件属于以下三个状态之一:Modified、Staged(这个文件被修改了并且加到了staging区域)、Committed(工作目录和git目录下保持一致)
Git中的对象图
Git的所有操作都是在一个图数据库上进行的,从另一台机器/服务器复制git项目意味着复制整个对象图。
对象图长什么样?
对象图是一个有向无环图(DAG)
Commits:对象图中的节点
不重复保存各版本中没有发生变化的文件,每个文件的每个版本只保存一次,多个提交可共享副本。
在Git中管理变化
传统的VCS:
Git:
通过git commit向对象图添加
通过git push和git pull发送或接收对象图
Git支持分支和融合
分支是在版本控制下对对象的复制,以便修改可以沿两个分支平行进行。
在Git中创建和融合分支
Git支持协同开发
下图是本地仓库与远程仓库:
GitHub
基于Web的Git服务器和Internet托管服务。
它提供了Git的所有分布式版本控制和SCM功能
以及添加自己的功能。
它为每个项目提供访问控制和几个协作功能,如bug跟踪、功能请求、任务管理和wiki。
私有和免费存储库(用于开源项目)
GitHub工作流程
基本流程:commit,branch,merge
协同流程:fork(将他人的代码复制到自己的仓库)、pull request(修改他人代码后,向其他人发送pull请求,以决定是否接受)
7、总结
软件开发的生命周期(SDLC)
传统软件开发模型(瀑布模型、增量模型、V模型、原型法、螺旋模型)
敏捷开发和极限编程
协同软件开发
软件配置管理(SCM)
Git