Bootstrap

软件工程(三)-统一过程与敏捷方法

1、统一过程

统一过程也叫UP或者RUP。这种开发方法是在基于构建的方法发展而来,也是基于构建化的思想发展而来。

 

统一过程的三大特点

  • 用例驱动

    • 在进行软件开发过程中,是用什么驱动力去推动整个过程

    • 用例驱动就是一开始会构建用例,然后一步一步将用例实现出来,测试时也依据用例设计一些测试用例。

    • 测试驱动会在开发的一开始,就引入测试相关的东西,整个流程中的每一步衔接都都利用测试去推动流程。

  • 以架构为中心

    • 比如建房子时需要先把框架建立起来,这就是架构的思想。

  • 迭代和增量

    • 整个开发过程不是一次性完成的,而是走多轮迭代,一轮一轮完成的,每次迭代都有新的东西加进来。

统一过程的四个阶段

  • 初始

    • 确定项目的范围和边界:该做什么,不该做什么,要做鉴定

    • 识别系统的关键用例:系统跑起来之后,用例被使用的频率,频率最高的用例就是关键用例,二八原则,百分之二十的用例占用了百分之八十的使用。

    • 展示系统的候选架构

    • 估计项目费用和时间

    • 评估项目风险

  • 细化

    • 分析系统问题领域

    • 建立软件架构基础, 就是完成架构设计

    • 淘汰最高风险元素

  • 构建

    • 开发剩余的构建,能用以前的构建就用以前的,没有就新开发

    • 构建组装与测试,正因为只是构建的组装,所以快

  • 交付

    • 进行β测试

    • 制作发布版本

    • 用户文档定稿

    • 确认新系统

    • 培训、调整产品

2、敏捷方法

相比于以前的的方法而言,敏捷方法是一个相对比较新的方法,在2000年左右才出来的,以前的哪些方法是在七几年,八几年出现的产物,可以说不在同一个时代。在以前的方法很成熟的前提下,来进行的调整。

敏捷方法是一种小步快跑的方式,适合于小型项目开发。

敏捷方法使用了哪些模型

  • 自适应开发

  • 水晶方法

  • 特性驱动开发

  • 极限编程

敏捷方法的基本原则

  • 短平快的回忆

  • 小型版本发布

  • 较少的文档

  • 合作为重

  • 客户直接参与

  • 自动化测试

  • 结对编程

  • 测试驱动开发

  • 持续集成

  • 重构

敏捷方法四大价值观

  • 沟通

    • 敏捷开发砍掉了很多文档,而文档是用来传递信息的,减少了文档,就要强调沟通,比如结对编成,面对面沟通。

  • 简单

    • 简单设计,不过度设计。比如系统考虑长远,要把一些东西做得标准化,但是很多得文档和设计其实没有用上,这就是过度设计。

    • 以简单的思路,让系统下跑起来,后面可以局部重构优化.

  • 反馈

    • 及时跟客户沟通相关的问题

  • 勇气

    • 主要是应对变更的勇气, 因为开发一般排斥变更, 因为一变更就意味着变更, 但是不变更又不可能. 变更在前面爆发出来, 越到后面变更就越小.

敏捷方法就一定正确吗

不一定,因为这些方法都是人提出来的,带有一定的主观性, 所以不一定是最优的一种方法.

敏捷方法五大原则

  • 快速反馈

  • 简单性假设

  • 逐步修改

  • 提倡更改

  • 优质工作

敏捷方法12大最佳实践

  • 计划游戏、结对编成、小型发布、集体代码所有制、隐喻、持续集成

  • 简单设计、每周工作40小时、测试先行、现场客户、重构、编码标准

如果论文考到了敏捷方法的应用,不仅要对价值观进行思想的阐述, 还要讲一讲项目中到底用了一些什么手段,去完成我们的工作.

比如:测试驱动/测试先行等, 比如结对编成(两个程序员结成一对, 一个人写代码, 一个人看着, 隔段时间替换), 国内一般不会这样.

结对编成的好处

  • 两个人会先碰一下思路, 解决方案, , 可以提前发现问题

  • 调试的时候两个人看, 比一个人看更容易发现问题

  • 团队核心人员流动, 新手接替核心业务需要一个过程, 但结对编成可以无缝衔接, 从而减小风险

集体代码所有制度: 所有人都能看到全部代码

持续集成: 一到两周发布一个版本, 持续的集成

每周四十小时: 不加班, 但一般不可能

测试先行: 测试用例的提前设计, 先把测试框架搭建等, 先把测试逻辑写了

敏捷方法特点

  • 极限编程(XP): 费用严格控制

  • 水晶方法(Cockburn): 用最少纪律约束而仍能成功的方法

  • 开放式源码: 程序开发人员在地域上分布很广

  • SCRUM: 明确定义了可重复的方法过程, 是用得最多得方法论

  • FDD(驱动开发方法): 有首席程序员和类程序员得概念

  • ASD方法: 核心是猜测 合作与学习

Scrum开发模型

Scrum是目前相对来水用得最广泛的模型方法, 会强调基本2-4周一个冲刺, 所谓的冲刺,就是发布一个可用的版本. 因为人都是有惰性的, 一个时间比较长的项目, 前面一般都会按照任务慢慢来, 但是后面又发现来不及了.所以为了避免这种情况, 让需求更加可用, 所以提出了敏捷方法.

Scrum会先把药开发的功能放在Product Backlog(备忘录). 会从里面取出一小块来, 按照一个项目, 以2-4周为时间限制, 来进行开发, 这样一轮一轮的完成. 从而让每个过程可控.

 

3、逆向工程

就是从最终的成品一步一步的反推它的设计和分析. 比如山寨手机, 先买一台手机, 拆了之后看它模仿它的零件. 再比如仿制军事设备.

 

  • 实现级: 包括程序的抽象语法树, 符号表, 过程的设计表示. 拿到代码,通过代码构造语法树, 去做一些初步分析.

  • 结构级: 包括反映程序分量之间相互依赖关系的信息, 例如: 调用图, 结构图, 程序和数据结构

  • 功能级: 包括反映程序段功能及程序段之间关系的信息, 例如数据和控制流模型

  • 领域级: 包括反映程序分量或程序诸实体和应用领域概念之间的对应关系的信息, 例如实体关系模型

4、净室软件工程

  • 净室就是无尘室, 洁净室. 也就是一个受控污染级别的环境. 比如芯片制造药串防尘服.

  • 使用盒结构规约(或形式化方法) 进行分析和设计建模, 并且强调将正确性验证, 而不是测试, 作为发现和消除错误的主要机制.

    • 比如使用代码生成器生成代码, 而不用自己写, 从而减小错误产生的概率. 使用类似的约束, 从源头减小出错的概率, 而不是测试出问题, 再去改

  • 使用统计的测试来获取认证被交付的软件的可靠性所必须的出错率信息.

;