热门标签 | 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 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 深入探讨:Actor模型如何解决并发与分布式计算难题
    在现代软件开发中,高并发和分布式系统的设计面临着诸多挑战。本文基于Akka最新文档,详细探讨了Actor模型如何有效地解决这些挑战,并提供了对并发和分布式计算的新视角。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 深入探讨前端代码优化策略
    本文深入讨论了前端开发中代码优化的关键技术,包括JavaScript、HTML和CSS的优化方法,旨在提升网页加载速度和用户体验。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • Android 属性 allowBackup 的安全风险分析
    在 Android API Level 8 及以上版本中,系统提供了一种机制来备份和恢复应用程序数据。通过设置 allowBackup 属性,开发者可以控制是否允许这种备份和恢复功能。然而,这一功能也带来了潜在的安全风险。 ... [详细]
  • 在开发板的启动选项中看到如下两行:7:LoadBootLoadercodethenwritetoFlashviaSerial.9:LoadBootLoadercodethenwri ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
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社区 版权所有