Revision Chapter2

    技术2023-09-18  68

    本章主要讲软件的生命周期和配置管理。 包括了开发过程和配置管理两部分。

    Chapter 2

    1 SDLC——software development life cycle生命周期2 软件开发过程2.1 传统开发过程2.1.1 waterfall2.1.2 incremental2.1.3 V-model2.1.4 prototype2.1.5 spiral 2.2 敏捷开发过程 3 配置管理SCM——software configuration management3.1 版本控制3.1.1 版本号3.1.2 原始方法3.1.3 版本控制工具功能3.1.4 一些名词3.1.5 VCS版本控制工具3.1.5.1 分类3.1.5.2 Git 4 软件构造的过程、系统和工具4.1 广义的软件构造4.2 狭义的软件构造

    1 SDLC——software development life cycle生命周期

    主要过程包括: PlanningAnalysisDesignImplementationTesting a IntegrationMaintenance 应当呈现出一种波浪形。

    2 软件开发过程

    2.1 传统开发过程

    强调文档。

    包括线性过程和迭代过程

    线性过程

    迭代过程

    2.1.1 waterfall

    从头到尾都是线性过程

    前提:需求精细明确。 否则当更改需求时需要将前置条件全部重做一遍。

    2.1.2 incremental

    将一个大的工程分为若干个模块,一个模块对应一个waterfall。(串行)。线性的前提:模型架构开放,且接口需要精细化设计。 因为必须要求后形成的增量可以很容易地加到前面的增量中。

    2.1.3 V-model

    每个阶段形成的产品都应通过测试,且应当可以被测试。本质上就是waterfall+测试

    2.1.4 prototype

    迭代在需求不稳定时使用,为了让用户尽快明确需求。把界面给用户获得反馈,不断修改直到用户满意为止。然后在根据界面进行开发。

    2.1.5 spiral

    迭代

    本质上是prototype的改进,引入风险分析

    条件:长周期开发软件适用,并对专业的风险分析专业人员有要求。

    2.2 敏捷开发过程

    尽快完成开发

    不重视文档(和传统开发的区别)

    快速迭代:

    快速迭代&小规模持续改进,以快速适应变化软件远比文档重要用户作为开发协作的一部分,以跟进需求强调需求的变换,要求能够灵活地响应变换

    增量+迭代

    每次处理一个小规模增量

    3个Extreme:

    用户参与小步骤迭代确认/验证

    Model:极限编程(XP:extreme programming)

    强调迭代的waterfall

    每个阶段可迭代阶段内无需产生特定文档强调实时的review——2 people结对编程测试驱动的开发:要求写代码前先根据需求写test用例

    这要求编程人员有充足的编程经验

    3 配置管理SCM——software configuration management

    包括代码+数据+文档。 !不只有代码!

    3.1 版本控制

    3.1.1 版本号

    3.1.2 原始方法

    复制文件并更改文件名以体现版本之间的区别。

    无法直观反映现今版本较之前版本的变化。

    3.1.3 版本控制工具功能

    individuals

    回到上一个版本比较两个version的差异备份软件版本历史获取备份合并

    teamwork

    多个开发者合作记录每个开发者的动作,便于“审计”

    创建分支对某些功能进行扩充——便于多个开发者的合作

    3.1.4 一些名词

    repository 仓库:储存各个版本working copy:工作拷贝,在开发者本地机器上file:文件,一个独立的配置项version/revision:版本change/diff:变化,版本之间的差异head:当前程序员工作的版本

    3.1.5 VCS版本控制工具

    3.1.5.1 分类

    本地VCS:版本库和更新都在本地端,他人不可见。 无法协作。

    集中VCS:所有version集中在一个版本库服务器

    分布VCS:仓库存于server&每个本地computer

    git就是分布式的避免了server停止服务带来的巨大不便

    3.1.5.2 Git

    其中黑色实线左侧为本地端,右侧为server端。

    staging在机器上并没有实际存在的文件夹,而其余三个目录有真正的文件夹。

    每个version都是一个对象,每次commit都会形成一个新的对象

    Object graph:version之间的关系演化(是一个有向无环图)

    A→B:在B的基础上修改后形成A

    合并也会生成一个commit对象

    用到 当前需要合并的两个commit对象 以及 这两个commit的祖先 ,因为当前这些祖先中包含了当前合并对象中未更改的文件部分内容

    commit

    和之前commit中没有改变的文件,不需要重复存储

    !不是直接复制老版本的全部内容

    Git理论上可以创建无穷多个分支,且 创建所需的时间和已经有的分支数量没有关系

    4 软件构造的过程、系统和工具

    4.1 广义的软件构造

    Created with Raphaël 2.2.0 开始 design programming/refactoring debugging testing build release 结束

    programming languages编程语言

    IDE集成开发环境:如eclipse

    modeling languages建模语言

    比如UML

    解决了代码不易理解的问题,便于中间建模评估软件架构

    configuration languages配置语言

    比如XML、JSON控制程序执行时的各项行为

    Review

    静态代码分析工具

    不需要执行程序比如spotbugs、checkstyle

    动态代码分析工具

    执行程序并观察现象、收集数据、分析不足如test、时间和空间效率性能

    debugging&testing

    程序开发的任何阶段的成果都必须可test。 不通过test→debug,定位发现错误根源

    refactoring重构

    不改变功能的前提下优化软件代码结构

    4.2 狭义的软件构造

    Build过程: 即编译、打包成可执行程序的过程。

    Processed: 0.011, SQL: 10