您的位置:首页 > 其它

软件构造第二章——软件构造的过程与工具(考点总结)

2018-03-31 12:50 639 查看
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中的CMDB2. Working copy工作拷贝:在开发者本地机器上的一份项目拷贝3. Change or diff变化:即code churn,两个版本之间的差异4. HEAD:程序员正在其上工作的版本 SCM的特点:·可靠性·支持多文件·版本变化的声明·返回旧版本·能够比较版本之间的不同·检阅开发的历史·不仅仅针对代码有效 不同的版本控制系统:1. 本地版本控制系统:仓库存储于开发者本地机器无法共享和协作。 

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

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



五.Git——SCM toolGit工作过程:


Git repository包括:1. 本地的CMDB2. 工作目录:本地文件系统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)build:build-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 Compiler3.Eclipse Java Compiler (ECJ) Java的源文件的标志“.java”Java的目标文件的标志“.class”Java的程序执行需要main方法和类路径Java的库可以调用命令行生成或使用 (5)不同的构建方式1. 构建子目标2. 构建不同的版本3. 构建不同的目标体系结构 (6)构建工具我使用的是ant,下面是简单程序的构建


命令行运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: