软件构造 第二章复习与总结
[软件构造] 04 第二章复习与总结
Chapter 2: Process and Tools of Software Construction
第二章 软件构造的过程与工具
2.1 Software Lifecycle and Configuration Management
这一节最重要的是怎样以Git工具为基础进行软件配置管理(SCM),大致了解传统的与现代的软件开发过程模型有哪些,以及它们之间的区别。
1. 软件开发的生命周期
- From 0 to 1 从无到有:
计划需求分析设计实现测试与集成运维 - From 1 to n 从有到好:
不同版本之间不断地进行的更新迭代
2.传统的软件过程模型
-
Waterfall 瀑布模型:
- 线性的,非迭代的
- 将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
- 瀑布模型的最大优点是简单
- 瀑布模型的突出缺点是不适应用户需求的变化
-
Incremental 增量模型:
- 线性的,非迭代的
- 相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。
-
V-Model V字模型
- 是瀑布模型的变种,反映了软件测试活动与软件开发过程(从分析到设计)的关系
-
Prototyping 原型模型
- 迭代的
- 在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作,通过逐步调整原型使其满足客户的要求
-
Spiral 螺旋模型
- 迭代的
- 它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统
这一部分不必拘泥于死记硬背的概念,应着重理解基本的过程,对其有一个大体的了解,在今后的学习过程中进行进一步的学习和应用。
3.敏捷开发
把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。
- 快速交付
- XP 极限编程
- 结对编程
- 任务表与进度检查
4. 软件配置管理
一系列的概念:
软件配置项SCI:软件中发生变化和需要管理变化的基本单元。包括源代码,数据,文档等等。
基线baseline:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
配置管理数据库CMDB:存储软件的各配置项随时间发生变化的信息+基线
版本控制Versioning:为软件的任一特定时刻(Moment)的形态指 派一个唯一的编号,作为“身份标识”
- 为什么需要版本控制?对个人,团队的作用。
- Repository:仓库,即SCM中的CMDB。
- VCS的发展:本地的版本控制系统集中式的版本控制系统分布式的版本控制系统
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:
构造语言:
- 编程语言:C,Java,C++,…
编程工具:IDE集成开发环境 - 建模语言:UML(也可以看作是一种工具)
分为 UML类图,序列图,组件图,… - 配置语言:XML,YAML,JSON配置程序的参数和设置
(2)代码评审和静态代码分析
结对编程,正式的代码评审会议,…
(3)动态代码分析和调优
执行程序并观察现象、收集数据、分析不足
(4)调试与测试
测试:发现程序是否有错误。
调试:定位错误、发现错误、并对其进行修正的过程
(5)重构
在不改变代码功能的前提下优化代码。
本课程主要集中在上面的 1,4即编码,测试和调试两方面,剩余的三方面由于今年的课程改革会很少地涉及到。
2 可见往年的第四章:面向可理解性的软件构造
3 可见往年的第八章:面向性能的软件构造
5 可见往年的第九章:重构
2.狭义的软件构造过程
狭义的软件构造关注在build阶段,也就是借助于工具,将软件构造各阶段的活动“自动化”。
常见的使用build的场景:
- 传统的编译型语言编写的软件的编译过程,eg:C,C++,…
- 解释型语言编写的软件的打包和测试过程,eg:Perl,Python
- 基于网络应用的编译与打包
- 单元测试过程
- 代码静态分析工具的执行过程
- 各种各样的文档化的过程
构建系统的组成:
版本控制工具,编译工具,源代码树,目标文件树,构建工具,构建机器,发行包,目标机器。
构建工具:
对于Java:Make,Ant,Maven,Gradle,Eclipse IDE
我认为,这一节最重要的是教会了我构造工具有什么,如何在开发中进行使用,以及它能够帮我们做些什么。学习到了如何将构建工具应用到lab实验中进行自动构建,打包,测试等等一系列过程,真正的实现各阶段活动的自动化。
本章概念繁多,但大多数只需了解即可,就考试而言,本章大概只能出简单的选择题,因而可以在后续的课程中对这些概念进行熟悉和学习。
上一篇: 软件构造学习记录——测试异常的两种方法
下一篇: hit软件构造lab2