软件构造第二章(考点总结)

2.1

软件生成周期与配置管理

 

一.Software Development Lifecycle(软件生命周期SDLC

 

From 0 to 1  从无到有:

计划——分析——设计——实现——测试——运维

 

From 1 to n  从有到好:

不断地更新升级版本

 

预期目标:

能够很长时间都保有生命力。

 

二.传统的软件开发模型

 

选择合适的过程模型的依据:

1. 用户参与程度有多大?--适应变化的能力

2. 开发效率/管理复杂度

3. 开发出的软件的质量

 

(1)线性过程:

①瀑布过程:从无到有的开发过程如瀑布一样。

特点:线性推进。阶段划分清楚。整体推进。无迭代。管理简单。无法适应需求,增加/变化。

②增量过程:设计实现与预测都是逐步完成的(每次只需完成一点),直到全部完成。

特点:线性推进。增量式(多个瀑布的串行)。无迭代。比较容易适应需求的增加。

 

(2)迭代过程:

③原型过程:开发软件应用的原型

过程:确认基本需求——开发应用的原型——交给用户审查——改进原型


迭代:开发出来之后由用户试用/评审,发现问题反馈给开发者,开发者修改原有的实现,继续交给用户评审。

 

优点:循环往复这个过程,直到用户满意为止。

时间代价高,但开发质量也高。

 

④旋涡模型:

特点:多轮迭代基本遵循瀑布模式。

每轮迭代有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一轮迭代。

 

三.敏捷开发

通过快速迭代和小规模的持续改进,以快速适应变化。

 

需要:

1. 极限的用户参与

2. 极限的小步骤迭代

3. 极限的确认/ 验证

采用eXtreme Programming (XP,极限编程)的方式:


四.软件配置管理(SCM)和版本控制系统(VCS

 

SCM:追踪和控制软件的变化

包括版本控制和基线的建立。

① Software Configuration Item(软件配置项SCI)软件中发生变化的基本单元。

 

基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)。

 

③ CMDB :配置管理数据库存储软件的各配置项随时间发生变化的信息+基线。俗称:仓库。

版本控制:为软件的任一特定时刻(Moment)的形态指派一个唯一的编号,作为“身份标识”。

 

古老的版本控制方法:通过复制文件并修改文件名。

SCM比之强在哪里:

 

个人方面:

1. 能够回滚到上一个版本

2. 比较两个版本的差异

3. 备份软件版本历史

4. 获取备份

5. 合并

 

团队方面:

1. 在多个开发者之间共享和协作

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

 

名词:

1. Repository仓库:即于SCM中的CMDB

2. Working copy工作拷贝:在开发者本地机器上的一份项目拷贝

3. Change or diff变化:即code churn,两个版本之间的差异

4. HEAD:程序员正在其上工作的版本

 

SCM的特点:

·可靠性

·支持多文件

·版本变化的声明

·返回旧版本

·能够比较版本之间的不同

·检阅开发的历史

·不仅仅针对代码有效

 

不同的版本控制系统:

1. 本地版本控制系统:仓库存储于开发者本地机器无法共享和协作。

 

2. 集中式版本控制系统:仓库存储于独立的服务器,支持多开发者之间的协作。

 

3. 分布式版本控制系统:仓库存储于独立的服务器+每个开发者的本地机器。


五.Git——SCM tool

Git工作过程:

Git repository包括:

1. 本地的CMDB

2. 工作目录:本地文件系统

3. 暂存区:隔离工作目录和Git仓库

 

Object Graph :版本之间的演化关系图,一条边B->A 表征了“在版本A的基础上

作出变化,形成了在版本A的基础上作出变化,形成了版本B

2.2

软件构造的过程体系与工具

 

一.软件构造的传统过程

(1) 编码

语言的划分:

从用途上划分:

1. 编程语言(e.g., C, C++, Java, Python)

2. 建模语言(e.g., UML)

3. 配置语言(e.g., XML)

4. 构建语言(e.g., XML)

 

从形态上划分:

1. 基于语言学的构造语言

2. 基于数学的形式化构造语言

3. 基于图形的可视化构造语言

 

①Programming Languages 编程语言

Integrated development environment (IDE集成开发环境) 包括如下:

1. 源代码编辑器、智能代码补全工具、代码重构工具

2. 文件管理

3. 库管理

4. 软件逻辑实体可视化

5. 图形化用户界面构造器

6. 编译器、解释器

7. 自动化build工具

8. 版本控制系统

9. 外部的第三方工具

Eclipse就是典型的集成开发环境

 

②Modeling languages 建模语言

建模语言:以可视化,能反应关系,准确,表现设计思想为目标建立一种结构。

UML:一种典型的建模语言。


③Configuration languages 配置语言

配置文件能够配置参数,为程序初始化设置。

比如:配置环境参数。在运行时改变软件的行为。将稳定的部分与不稳定的分离。

配置语言有:Key-Value texts (.ini, .properties, .rc)XML, YAML, JSON

 

(2)代码评审和静态代码分析

代码评审由不同的部分组成:

1. 结对编程

2. 走查

3. 正式评审会议

4. 自动化评审

Formal code review 正式的代码评审会议:(比如 Fagan inspection

Lightweight code review 轻量级的代码评审:

特点:

·Over-the-shoulder

·Email pass-around

·Pair programming

·Tool-assisted code review

静态代码分析:

对软件进行分析,而不需要它运行。

能够提供易于理解的代码结构,并且确保它符合开发的标准。

Java的自动化工具:CheckStyle, FindBugs, PMD

 

(3)动态分析

执行程序并观察现象、收集数据、分析不足。

对代码的运行时状态和性能进行度量,发现代码中的潜在问题。


(4) 调试与测试

测试:发现程序是否有错误。

调试:定位错误、发现错误根源

改正错误,得到正确的test结果。

两者都不是为了提高软件质量,而是诊断错误的方法。

Eclipse中的调试:

 


(5) 重构

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

代码的重构是小的,保留含义的转换。

目的是为了让代码更容易维护和应对变化。

集成环境Eclipse支持重构


二.狭义的软件构造(build

buildbuild-time——run-time借助于工具,将软件构造各阶段的活动“自动化”

(1)构建系统

1. 编译传统编译语言写的软件

源文件被编译到目标文件,目标文件可以被连接到别的代码库或可执行的程序。

2. 打包并测试解释性语言写的软件

3. 编译并打包基于网络的应用

4. 能够执行JUNIT测试代码的一小部分,也可以进行静态测试

 

(2)构建系统的构成元素

1. Version-Control Tools版本控制工具

2. Source Tree: 程序源代码的组织结构

3. Object Trees:包含目标文件和可执行的程序

4. Compilation Tools:编译工具

编译器连接器基于UML的源代码生成器 ④文件生成器

5. Build Tools:构建工具

6. Build Machines: 允许构建的机器

7. Release Packaging and Target Machines:发行的包与目标机器

8. Types of packaging:打包的种类

 

(3) 构建的过程和构建语言

构建的过程:


每一种构建工具都需要自己的构建语言。

 

(4)java的编译工具

Java的标准字节码在Java Virtual Machine (JVM)上被解释

java的编译工具:

1.The Java Development Kit (JDK)

2.GNU Java Compiler

3.Eclipse Java Compiler (ECJ)

 

Java的源文件的标志“.java”

Java的目标文件的标志“.class”

Java的程序执行需要main方法和类路径

Java的库可以调用命令行生成或使用

 

(5)不同的构建方式

1. 构建子目标

2. 构建不同的版本

3. 构建不同的目标体系结构

 

(6)构建工具

我使用的是ant,下面是简单程序的构建

命令行运行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值