软件开发工程化的个人体验
DESCRIPTION
软件开发工程化过程的一些个人体验总结。太平洋网络(PCOnline)入职讲座TRANSCRIPT
. . . . . .
软件项目 (?) 开发
. . . . . .
工程化?
. . . . . .
规范性
. . . . . .
计划性
. . . . . .
可重复
. . . . . .
然而
时至今日
. . . . . .
软件开发仍是一个缺少控制的生产领域
. . . . . .
WHY?
. . . . . .
软件开发的特性
▶ 高度依赖于个人才能
▶ 风险预知有一定难度▶ 创造力的价值远高于规范性▶ 充满变化,产出服务而非实物
. . . . . .
软件开发的特性
▶ 高度依赖于个人才能▶ 风险预知有一定难度
▶ 创造力的价值远高于规范性▶ 充满变化,产出服务而非实物
. . . . . .
软件开发的特性
▶ 高度依赖于个人才能▶ 风险预知有一定难度▶ 创造力的价值远高于规范性
▶ 充满变化,产出服务而非实物
. . . . . .
软件开发的特性
▶ 高度依赖于个人才能▶ 风险预知有一定难度▶ 创造力的价值远高于规范性▶ 充满变化,产出服务而非实物
. . . . . .
外部风险难以跟踪
需求随时变化
. . . . . .
规范要为生产让步
创造力是最有价值的资源
. . . . . .
周期延长
产业服务化
. . . . . .
强调个人能力
个人能力的发挥可能决定项目
. . . . . .
那么
拒绝工程化?
. . . . . .
当然不是!
. . . . . .
软件工程化的好处
. . . . . .
减少重复,专注于创造
. . . . . .
减少风险,提升劳动价值
. . . . . .
提高沟通效率,降低协作成本
. . . . . .
允许计划变更
明确计划和目标
. . . . . .
提高协作效率
建立沟通渠道
. . . . . .
可跟踪,可回溯
辅助生产管理
. . . . . .
减少重复劳动
流程平台化,工具化
. . . . . .
升华知识价值
文档管理
. . . . . .
稳定质量
建立测试过程
. . . . . .
消灭天才神话
建立可预期过程
. . . . . .
工程无魔法
. . . . . .
常见工程化管理方法
▶ 版本控制
▶ bug 跟踪▶ 文档管理▶ 在线协作▶ 测试驱动▶ ……
. . . . . .
常见工程化管理方法
▶ 版本控制▶ bug 跟踪
▶ 文档管理▶ 在线协作▶ 测试驱动▶ ……
. . . . . .
常见工程化管理方法
▶ 版本控制▶ bug 跟踪▶ 文档管理
▶ 在线协作▶ 测试驱动▶ ……
. . . . . .
常见工程化管理方法
▶ 版本控制▶ bug 跟踪▶ 文档管理▶ 在线协作
▶ 测试驱动▶ ……
. . . . . .
常见工程化管理方法
▶ 版本控制▶ bug 跟踪▶ 文档管理▶ 在线协作▶ 测试驱动
▶ ……
. . . . . .
常见工程化管理方法
▶ 版本控制▶ bug 跟踪▶ 文档管理▶ 在线协作▶ 测试驱动▶ ……
. . . . . .
工程化管理的一些策略和工具
. . . . . .
版本管理工具
. . . . . .
跟踪管理变更
. . . . . .
团队协作
. . . . . .
集成、测试、发布……
为其他工程过程提供支持
. . . . . .
版本管理工具的发展
从集中趋向分布
. . . . . .
版本管理工具的发展
从强制趋向松散
. . . . . .
版本管理工具的发展
更开放,更灵活
. . . . . .
锁定式
VSS
. . . . . .
中心式
SVN
. . . . . .
分布式
GIT、Mercurial、Bazzar……
. . . . . .
回家也可以加班 XD
分布式版本管理工具允许用户管理自己的个人版本历史,可以更灵活的支持团队协作,正在受到更多的欢迎。
. . . . . .
测试策略
. . . . . .
测试是个无底洞
. . . . . .
测试永远不嫌多
. . . . . .
全程测试
. . . . . .
测试方法
. . . . . .
文档化测试
. . . . . .
单元测试
. . . . . .
运营环境镜像
集成测试
. . . . . .
终端测试
. . . . . .
理想的项目结构
▶ 在开发伊始,先建立测试框架
▶ 框架是其上层的模块▶ 模块是其组件的框架
. . . . . .
理想的项目结构
▶ 在开发伊始,先建立测试框架▶ 框架是其上层的模块
▶ 模块是其组件的框架
. . . . . .
理想的项目结构
▶ 在开发伊始,先建立测试框架▶ 框架是其上层的模块▶ 模块是其组件的框架
. . . . . .
理想的开发过程
▶ 自顶向下建立测试环境
▶ 自底向上用生产模块代替测试模块
. . . . . .
理想的开发过程
▶ 自顶向下建立测试环境▶ 自底向上用生产模块代替测试模块
. . . . . .
常见的阻碍
. . . . . .
量力而为,重视测试
时间压力
. . . . . .
合理分层、积极使用工具
UI 难以测试
. . . . . .
尽量选择测试友好的平台
平台和框架对测试不友好
. . . . . .
鼓励测试
团队没有达成共识
. . . . . .
文档
. . . . . .
文档应早于编码开始
. . . . . .
文档工作贯穿全程
. . . . . .
文档库
文档集中管理
. . . . . .
文档自然产出
. . . . . .
文档从哪里来?
. . . . . .
工程文档
. . . . . .
故事卡片
. . . . . .
bug 跟踪
. . . . . .
统计图表
. . . . . .
会议纪要
. . . . . .
电子邮件
. . . . . .
聊天记录
. . . . . .
代码注释
. . . . . .
文档管理要点
. . . . . .
AKA 原则
集中管理,所有人可见
. . . . . .
AKA 原则
全文搜索支持
. . . . . .
鼓励文档化编程
. . . . . .
文档 WIKI 化
. . . . . .
电子邮件重于即时聊天
. . . . . .
代码生成重于预定文档
. . . . . .
接口注释重于逻辑注释
. . . . . .
协作平台
. . . . . .
bug 跟踪
. . . . . .
跟踪项目代码
. . . . . .
搜索友好
. . . . . .
在线沟通
. . . . . .
灵活定制
. . . . . .
常见协作平台
. . . . . .
TRAC
. . . . . .
Bugzilla
. . . . . .
未涉及的问题
. . . . . .
团队文化建设
. . . . . .
” 单人团队” 的管理
个人软件开发过程
. . . . . .
开发工具的选择
. . . . . .
技术平台的选择
. . . . . .
设计与编码风格
. . . . . .
编码知识与技巧
. . . . . .
工程化的意义
. . . . . .
拥抱变化
. . . . . .
催生创造
. . . . . .
减少风险
. . . . . .
促进沟通
. . . . . .
提升劳动价值
. . . . . .
提高工作效率
. . . . . .
促进团队成长
. . . . . .
再见!