软件构造 第二章复习与总结

[软件构造] 04 第二章复习与总结

Chapter 2: Process and Tools of Software Construction

第二章 软件构造的过程与工具


2.1 Software Lifecycle and Configuration Management

这一节最重要的是怎样以Git工具为基础进行软件配置管理(SCM),大致了解传统的与现代的软件开发过程模型有哪些,以及它们之间的区别。
1. 软件开发的生命周期

  • From 0 to 1 从无到有:
    计划 \Rightarrow 需求分析 \Rightarrow 设计 \Rightarrow 实现 \Rightarrow 测试与集成 \Rightarrow 运维
  • From 1 to n 从有到好:
    不同版本之间不断地进行的更新迭代

2.传统的软件过程模型

  • Waterfall 瀑布模型
    • 线性的,非迭代的
    • 将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
    • 瀑布模型的最大优点是简单
    • 瀑布模型的突出缺点是不适应用户需求的变化
  • Incremental 增量模型
    • 线性的,非迭代的
    • 相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。
  • V-Model V字模型
    • 是瀑布模型的变种,反映了软件测试活动与软件开发过程(从分析到设计)的关系
  • Prototyping 原型模型
    • 迭代的
    • 在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作,通过逐步调整原型使其满足客户的要求
  • Spiral 螺旋模型
    • 迭代的
    • 它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统

这一部分不必拘泥于死记硬背的概念,应着重理解基本的过程,对其有一个大体的了解,在今后的学习过程中进行进一步的学习和应用。

3.敏捷开发
把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。

  • 快速交付
  • XP 极限编程
  • 结对编程
  • 任务表与进度检查

4. 软件配置管理
一系列的概念:
软件配置项SCI:软件中发生变化和需要管理变化的基本单元。包括源代码,数据,文档等等。
基线baseline:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
配置管理数据库CMDB:存储软件的各配置项随时间发生变化的信息+基线
版本控制Versioning:为软件的任一特定时刻(Moment)的形态指 派一个唯一的编号,作为“身份标识”

  • 为什么需要版本控制?对个人,团队的作用。
  • Repository:仓库,即SCM中的CMDB。
  • VCS的发展:本地的版本控制系统 \Rightarrow 集中式的版本控制系统 \Rightarrow 分布式的版本控制系统

5. Git的使用

该部分强烈建议阅读Git使用手册(https://www.git-scm.com/book/en/v2)。

  • Git仓库三部分:
    • .git目录,本地的CMDB
    • 工作目录:本地文件系统
    • 暂存区:下次要提交到.git仓库的内容
  • 一个文件的三种状态:Modified,Staged,Committed
    已修改,已暂存,已提交
  • Git的所有操作都是在一个图数据结构(对象图)上进行的。
  • Git每次提交存储一个快照图,而传统的VCS存储配置项的增量变化。
  • 本门课程需要掌握的Git命令:
  git init
  git add
  git push
  git commit
  git status
  git clone
  git checkout
  git merge
  ...

2.2 Process, Systems, and Tools of Software Construction

本节主要从广义和狭义的角度讲述了软件构造的过程,以及在各个子过程中所使用的系统和工具。
1.广义的软件构造过程
(1)编码Programming:
构造语言:

  1. 编程语言:C,Java,C++,…
    编程工具:IDE集成开发环境
  2. 建模语言:UML(也可以看作是一种工具)
    分为 UML类图,序列图,组件图,…
  3. 配置语言:XML,YAML,JSON配置程序的参数和设置

(2)代码评审和静态代码分析
结对编程,正式的代码评审会议,…

(3)动态代码分析和调优
执行程序并观察现象、收集数据、分析不足

(4)调试与测试
测试:发现程序是否有错误。
调试:定位错误、发现错误、并对其进行修正的过程

(5)重构
在不改变代码功能的前提下优化代码。

本课程主要集中在上面的 1,4即编码,测试和调试两方面,剩余的三方面由于今年的课程改革会很少地涉及到。
2 可见往年的第四章:面向可理解性的软件构造
3 可见往年的第八章:面向性能的软件构造
5 可见往年的第九章:重构

2.狭义的软件构造过程
狭义的软件构造关注在build阶段,也就是借助于工具,将软件构造各阶段的活动“自动化”。

常见的使用build的场景:

  1. 传统的编译型语言编写的软件的编译过程,eg:C,C++,…
  2. 解释型语言编写的软件的打包和测试过程,eg:Perl,Python
  3. 基于网络应用的编译与打包
  4. 单元测试过程
  5. 代码静态分析工具的执行过程
  6. 各种各样的文档化的过程

构建系统的组成:
版本控制工具,编译工具,源代码树,目标文件树,构建工具,构建机器,发行包,目标机器。

构建工具:
对于Java:Make,Ant,Maven,Gradle,Eclipse IDE

我认为,这一节最重要的是教会了我构造工具有什么,如何在开发中进行使用,以及它能够帮我们做些什么。学习到了如何将构建工具应用到lab实验中进行自动构建,打包,测试等等一系列过程,真正的实现各阶段活动的自动化。
本章概念繁多,但大多数只需了解即可,就考试而言,本章大概只能出简单的选择题,因而可以在后续的课程中对这些概念进行熟悉和学习。

原创文章 8 获赞 0 访问量 286

猜你喜欢

转载自blog.csdn.net/qq_30627849/article/details/105646820