软件开发
软件
能够完成预定功能和性能的可执行的计算机程序, 支持程序正常运行的数据, 以及描述程序的操作和使用的文档
软件工程
将系统的, 严格约束的, 可量化的方法应用于软件的开发, 运行和维护
将工程化应用于软件
软件开发生命周期
确定问题
可行性分析
系统分析
编码
测试
安装, 维护
软件开发模式
瀑布模式
螺旋模式
快速原型模式
喷泉模式
混合模式
敏捷开发模式
瀑布模式
重视各个阶段的顺序性
当一个阶段的文档获得认可才进入下一阶段
image.png
螺旋模式
设计, 执行并测试原型
再设计, 执行并测试新特征
将原型逐步扩展为最终程序
体育竞技分析
本质: 模拟一场比赛 simOneGame()
原型
假设每个球员都有机会在 50 对 50 的概率下赢得有一分
打了 30 会合
谁会得分或改变球权
原型的例子
- import random
- def simOneGame():
- scoreA = 0
- scoreB = 0
- serving = 'A'
- for i in range(30):
- if serving == 'A':
- if random.random() < 0.5:
- scoreA = scoreA + 1
- else:
- serving = 'B'
- else:
- if random.random() < 0.5:
- scoreB = scoreB + 1
- else:
- serving = 'A'
- print(scoreA)
- print(scoreB)
- simOneGame()
阶段一: 构建最初的原型
阶段二: 添加两个参数代表两个球员赢球的概率
阶段三: 进行比赛, 直到一个球员达到 15 分
阶段四: 将比赛扩展为多场比赛
阶段五: 建立完整的程序
敏捷开发
以人为核心, 迭代循环渐进
针对传统的瀑布开发模式的弊端
分为多个相互联系, 独立运行的小项目
软件一直处于可使用状态
敏捷开发更符合软件开发的规律
软件 --- 植物
自底向下
逐步有序
遵循软件客观规律
迭代增量开发
开发效率更高
在传统方式中
管理者控制团队
团队成员被动的等待指令, 独立工作, 协作少
在敏捷开发方式中
管理者激发团队
团队成员共同参与
轻量级软件开发方法
Scrum
极限编程 (XP)
精益开发 (Lean Development)
动态系统开发方法 (DSDM)
特征驱动开发 (Feature Driver develpment)
水晶开发 (Cristal Clear)
Scrum
一个开发过程
几种角色
产品负责人
流程管理员
开发团队
一套规范的实施方法
敏捷开发典型过程
1. 对成品形成共识
2. 建立和维护产品需求列表, 并进行优先级排序
3. 筛选高优先级需求进入本轮迭代开发
4. 细节本轮迭代需求, 一次在本轮迭代完成
5. 每日召开站立会议
任务看板
任务未完成
任务正在做
任务已完成
image.png
6. 对每轮迭代交付的可工作软件, 进行现验场收和反馈
7. 从第 3 步开始, 开始下一轮迭代
来源: http://www.jianshu.com/p/1b2bcfa8a43b