欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-10 14:53:08
...

[软件构造] 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实验中进行自动构建,打包,测试等等一系列过程,真正的实现各阶段活动的自动化。
本章概念繁多,但大多数只需了解即可,就考试而言,本章大概只能出简单的选择题,因而可以在后续的课程中对这些概念进行熟悉和学习。

相关标签: 软件构造