热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【软件构造】第二章第一节软件生命周期和版本控制(配置管理)

软件构造第二章第一节软件生命周期和版本控制(配置管理)Outline软件周期经典软件过程模型敏捷开发协同软件开发配置管理(SCM)
软件构造第二章 第一节 软件生命周期和版本控制(配置管理)

 Outline

  • 软件周期
  • 经典软件过程模型
  • 敏捷开发
  • 协同软件开发
  • 配置管理(SCM)
  • 版本控制(Git)
 

 Notes

## 软件生命周期

【生命周期】
  • 两种形态
    • 从0到1:SDLC
      • 策划阶段:获取需求、制定计划
      • 架构师:系统分析(业务领域,what)、软件设计(语言、架构,how)
      • 编码实现、测试
      • 维护直至消失
    • 从1到n:运用版本控制技术实现迭代更新
  • 软件还活着的标志:Age and vitality(活力)
  • 我们期待生命周期长而且具有较高活性的软件,但开发失败、软件老化、需求不及需求是软件死亡的主要原因
 

## 经典软件过程模型(侧重于计划)

  • 大体上分为两类,线性和迭代(迭代大体上就是线性上增加反馈)
  • 关键考虑指标:用户参与度、复杂度、软件质量
 
【瀑布模型】
  • 瀑布模型将软件生存周期的各项活动规定为依固定顺序而连接的若干阶段工作;
  • 瀑布模型规定了每一个阶段的输入,以及本阶段的工作成果,作为输出传入下一阶段;
  • 早期主流开发过程,适用于需求稳定的项目;
  • 优点:有设计前的规约和编码前的设计,易于管理;
  • 缺点:应对变化时,成本十分高。
 

 

【增量模型】
  • 运用分治的思想,将需求分段,成为一系列增量产品,每个增量内部仍使用瀑布模型;
  • 增量模型是瀑布模型的变形,拥有后者的全部优点,此外可以很快的迭代出第一版本;
  • 选择最核心需求首先实现显得十分重要。
【V模型】
  • 对瀑布模型的改进
  • 强调测试与继承,对代码、分析文档进行质量保证
 
 
【原型法】
  • 迭代法, 原型法是指在获取一组基本的需求定义后,利用高级软件工具可视化的开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新的版本开发。反复进行这个过程,直到得出系统的“精确解”,即用户满意为止。
  • 其核心是用交互的,快速建立起来的原型取代了形式的、僵硬的(不允许更改的)大部分的规格说明,用户通过在计算机上实际运行和试用原型系统而向开发者提供真实的、具体的反馈意见。
  • 优势:
    • 软件设计者和实施者可以在项目早期从用户那里获得有价值的反馈。
    • 客户可以比较软件制作的软件是否符合软件规范。
    • 它还使软件工程师能够深入了解初始项目估算的准确性以及提出的最后期限和里程碑是否可以成功实现
 
【螺旋模型】
  • 采用一种周期性的方法来进行系统开发。
  • 优点:
    • 设计上的灵活性,可以在项目的各个阶段进行变更。
    • 以小的分段来构建大型系统,使成本计算变得简单容易。
 

 

## 敏捷软件开发

【宣言】
  • 人的作用 胜于 过程管理和工具的使用(结对编程)
  • 可运行的软件 胜于 面面俱到的文档
  • 客户合作 胜于 合同谈判
  • 响应变化 胜于 遵循计划
【12个原则】
  1. 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意
  2. 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
  3. 经常性的交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好。
  4. 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
  5. 围绕被激励起来的人个来构建项目。给他们提供所需要的环境和支持,并且信任他们能够完成工作。
  6. 在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。
  7. 工作的软件是首要进度度量标准。
  8. 敏捷过程提可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
  9. 不断地关注优秀的技能和好的设计会增强敏捷能力。
  10. 简单----使未完成的工作最大化的艺术----是根本的。
  11. 最好的构架、需求和设计出自与自组织的团队。
  12. 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
【核心特点】
     从需求与过程驱动 变为 由成果驱动

【极限编程】
  • 描述需求(利用story,情景对话表达用户需求)
  • 设计阶段:做原型
  • Coding:(TDD)测试驱动开发、结对编程、自动构建
  • 测试阶段:持续集成、持续发布
  • 冲刺模型
    • 项目管理方式:任务墙、目标图
 

## 协同软件开发

有关协同软件开发请参考 冬刻忆的博客
 
 

 

## 配置管理和版本控制

有关配置管理和版本控制的内容请参考 能量启示录的博客
  • 版本控制是实现软件配置管理的最主要工具之一,此外,建立基线也是十分重要的工具
  • 软件配置项: 软件生存周期各个阶段活动的产物经审批后即可称之为软件配置项,其包括文档、源代码、可重用软件等。
  • 基线: 
    • 定义:软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础
    • 建立基线的原因: 重现性、可追踪性和报告。
  • 配置管理数据库:
  • 对库进行检入、检出:权限封印和权限解锁
 
【版本控制系统的优点】
  • 回到历史版本作参考、作比较
  • 项目迁移
  • 方便版本合并(最好有相同的基线)
  • 具有日止功能,便于开发团队的沟通交流
【分支】
  • 部分人员并行开发有意义的活动
  • 其他人员不想在新功能完成之前插入新功能
 

 

【版本操作系统】
  • 本地的VCS
  • 集中式VCS(CVS、SVN):通过服务器进行共享,客户端可以是全集或子集(Git只能是全集)
  • 分布式VCS(Git):用户之间可以直接进行推送,也可以通过云
 
 

## 版本控制工具—— Git

关于Git的使用请参考
1. Git使用教程
2. 追着太阳晒的博客
 
  • Git的整体架构——四个仓库(本地有三个)
    • 工作目录
    • 缓存区域(在menmory中,对用户不可见)
    • 本地库:源代码
    • 云端软件服务器(远程仓库)
  • 利用对象图结构,
    • 每个结点保存:父结点、如提交时间的信息
    • VCS还原差异,Git保存完整文件
    • Git对于重复文件,不复制文件,只修改指针
    • 减少冗余
    • 访问速度快
  • 分支代码
    • git(创建) branch(切换) -b(branch) iss53
    • git meige hitfix(合并)
        关于Git的分支代码的详细解析请参考 https://www.2cto.com/kf/201607/529363.html
  • 本地库和远程库
    • clone:将整个库完整的复制
    • fetch:将某一分支复制下来
    • push:将分支推送到服务器上
    • pull:将某一分支复制下来并合并在当前分支上
 
 
 
 
 

推荐阅读
  • 双十一在家学用 Git
    对于所有的开发者来说,掌握一门代码版本控制系统都是必须的,无论是自己做项目,团队合作,工作中的合作,都离不开版 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 初始化初始化本地空版本库,仓库,英文名repositorymkdirtest&&cdtestgitinit克隆项目到本地gitclone远程同 ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
  • Git GitHub多人协作
    在学校做一个小项目需要多人协作,就用到了gitHub,百度了一下多数写得乱七八糟或者支离破碎,于是总结了一下自己的步骤如下,第一次使用GitHUb,哪里不对望大神指出一.前期准备: ... [详细]
  • 如何在vscode中使用GitLab我同广大码友们一样,好不容易赶上了个节假日,回到家一顿安排,可屁股还没坐热就接到线上紧急BUG需要修复 ... [详细]
  • 修正我的GitHub commit 数据
    早晨上班,滴滴搭车里,我在掘金这个帖子看到大家晒自己的Github活跃记录,我也晒了下自己的记录。不过太少了。有遗漏的commits状况这也让我知道,自己觉得自己很忙的,实际上提交 ... [详细]
  • 1.码云上根据需求创建项目;2.进入项目——克隆下载 选择复制SSH3.clone码云上的项目到本地:在相关目录(如A)下运行终端,执行指令:gitclone复制的SSH地址;  ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
  • 前言本篇为大家总结社区多人合作常见的场景和对应的git操作命令。本篇非新手教程,阅读本篇前需具备Git基础知识。Git入门教程请参考https://www ... [详细]
  • SVN自动化正文共:5007 字预计阅读时间: 13 分钟平时自己多用Git来做版本控制,但很多公司内部依旧使用SVN,核心原因其实就是SVN够用了,懒得换,虽然自己用git,但对 ... [详细]
  • 记一次git的版本回退
    背景本地有个项目已经修改了很久(是自己的小项目不是公司的),文件挺多的,还有大量的log文件。一些资源文件是中文名,工作区修改后使用了命令gitadd.本来在.gitignore文 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 使用gitolite搭建一个私有的git服务器,来管理git仓库。有了它,就可以跟小伙伴们愉快地进行远程协作啦。今天又折腾了一遍,在这里把几个关键的步骤记下来,方便以后查阅。准备工 ... [详细]
  • ARMLinux内核知识点
    ARM-Linux内核知识点文章目录ARM-Linux内核知识点前言一、概述二、ARM-Linux内核的主要架构及功能三、Linux内核源码目录结构四、ARM-Linux进程管理五 ... [详细]
author-avatar
驺虞是白虎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有