热门标签 | 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:将某一分支复制下来并合并在当前分支上
 
 
 
 
 

推荐阅读
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
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社区 版权所有