SlideShare une entreprise Scribd logo
1  sur  115
Télécharger pour lire hors ligne
软件开发工程化

刘鑫 <march.liu@gmail.com>

    软件开发过程的个人体验


      March 1, 2011




                      .    .   .   .   .   .
软件项目 (?) 开发




         .   .   .   .   .   .
工程化?




       .   .   .   .   .   .
规范性




      .   .   .   .   .   .
计划性




      .   .   .   .   .   .
可重复




      .   .   .   .   .   .
然而




     时至今日




            .   .   .   .   .   .
软件开发仍是一个缺少控制的生产领域




             .   .   .   .   .   .
WHY?




       .   .   .   .   .   .
软件开发的特性




  ▶   高度依赖于个人才能




                  .   .   .   .   .   .
软件开发的特性




  ▶   高度依赖于个人才能
  ▶   风险预知有一定难度




                  .   .   .   .   .   .
软件开发的特性




  ▶   高度依赖于个人才能
  ▶   风险预知有一定难度
  ▶   创造力的价值远高于规范性




                     .   .   .   .   .   .
软件开发的特性




  ▶   高度依赖于个人才能
  ▶   风险预知有一定难度
  ▶   创造力的价值远高于规范性
  ▶   充满变化,产出服务而非实物




                      .   .   .   .   .   .
外部风险难以跟踪




           需求随时变化




                    .   .   .   .   .   .
规范要为生产让步




       创造力是最有价值的资源




                .    .   .   .   .   .
周期延长




       产业服务化




               .   .   .   .   .   .
强调个人能力




         个人能力的发挥可能决定项目




                   .   .   .   .   .   .
那么




     拒绝工程化?




          .   .   .   .   .   .
当然不是!




        .   .   .   .   .   .
软件工程化的好处




      .   .   .   .   .   .
减少重复,专注于创造




         .   .   .   .   .   .
减少风险,提升劳动价值




         .    .   .   .   .   .
提高沟通效率,降低协作成本




          .   .   .   .   .   .
允许计划变更




         明确计划和目标




                   .   .   .   .   .   .
提高协作效率




         建立沟通渠道




                  .   .   .   .   .   .
可跟踪,可回溯




          辅助生产管理




                   .   .   .   .   .   .
减少重复劳动




         流程平台化,工具化




                 .   .   .   .   .   .
升华知识价值




         文档管理




                .   .   .   .   .   .
稳定质量




       建立测试过程




                .   .   .   .   .   .
消灭天才神话




         建立可预期过程




                   .   .   .   .   .   .
工程无魔法




        .   .   .   .   .   .
常见工程化管理方法




  ▶   版本控制




             .   .   .   .   .   .
常见工程化管理方法




  ▶   版本控制
  ▶   bug 跟踪




               .   .   .   .   .   .
常见工程化管理方法




  ▶   版本控制
  ▶   bug 跟踪
  ▶   文档管理




               .   .   .   .   .   .
常见工程化管理方法




  ▶   版本控制
  ▶   bug 跟踪
  ▶   文档管理
  ▶   在线协作




               .   .   .   .   .   .
常见工程化管理方法




  ▶   版本控制
  ▶   bug 跟踪
  ▶   文档管理
  ▶   在线协作
  ▶   测试驱动




               .   .   .   .   .   .
常见工程化管理方法




  ▶   版本控制
  ▶   bug 跟踪
  ▶   文档管理
  ▶   在线协作
  ▶   测试驱动
  ▶   ……




               .   .   .   .   .   .
工程化管理的一些策略和工具




         .   .   .   .   .   .
版本管理工具




     .   .   .   .   .   .
跟踪管理变更




         .   .   .   .   .   .
团队协作




       .   .   .   .   .   .
集成、测试、发布……




       为其他工程过程提供支持




                .    .   .   .   .   .
版本管理工具的发展




            从集中趋向分布




                      .   .   .   .   .   .
版本管理工具的发展




            从强制趋向松散




                      .   .   .   .   .   .
版本管理工具的发展




            更开放,更灵活




                      .   .   .   .   .   .
锁定式




      VSS




            .   .   .   .   .   .
中心式




      SVN




            .   .   .   .   .   .
分布式




      GIT、Mercurial、Bazzar……




                        .      .   .   .   .   .
回家也可以加班 XD




 分布式版本管理工具允许用户管理自己的个人版本历史,可以更
 灵活的支持团队协作,正在受到更多的欢迎。




                   .   .   .   .   .   .
测试策略




       .   .   .   .   .   .
测试是个无底洞




          .   .   .   .   .   .
测试永远不嫌多




          .   .   .   .   .   .
全程测试




       .   .   .   .   .   .
测试方法




       .   .   .   .   .   .
文档化测试




        .   .   .   .   .   .
单元测试




       .   .   .   .   .   .
运营环境镜像




         集成测试




                .   .   .   .   .   .
终端测试




       .   .   .   .   .   .
理想的项目结构




  ▶   在开发伊始,先建立测试框架




                      .   .   .   .   .   .
理想的项目结构




  ▶   在开发伊始,先建立测试框架
  ▶   框架是其上层的模块




                      .   .   .   .   .   .
理想的项目结构




  ▶   在开发伊始,先建立测试框架
  ▶   框架是其上层的模块
  ▶   模块是其组件的框架




                      .   .   .   .   .   .
理想的开发过程




  ▶   自顶向下建立测试环境




                   .   .   .   .   .   .
理想的开发过程




  ▶   自顶向下建立测试环境
  ▶   自底向上用生产模块代替测试模块




                        .   .   .   .   .   .
常见的阻碍




        .   .   .   .   .   .
量力而为,重视测试




            时间压力




                   .   .   .   .   .   .
合理分层、积极使用工具




         UI 难以测试




                   .   .   .   .   .   .
尽量选择测试友好的平台




       平台和框架对测试不友好




                .    .   .   .   .   .
鼓励测试




       团队没有达成共识




                  .   .   .   .   .   .
文档




     .   .   .   .   .   .
文档应早于编码开始




        .   .   .   .   .   .
文档工作贯穿全程




           .   .   .   .   .   .
文档库




      文档集中管理




               .   .   .   .   .   .
文档自然产出




         .   .   .   .   .   .
文档从哪里来?




      .   .   .   .   .   .
工程文档




       .   .   .   .   .   .
故事卡片




       .   .   .   .   .   .
bug 跟踪




         .   .   .   .   .   .
统计图表




       .   .   .   .   .   .
会议纪要




       .   .   .   .   .   .
电子邮件




       .   .   .   .   .   .
聊天记录




       .   .   .   .   .   .
代码注释




       .   .   .   .   .   .
文档管理要点




     .   .   .   .   .   .
AKA 原则




         集中管理,所有人可见




                  .   .   .   .   .   .
AKA 原则




         全文搜索支持




                  .   .   .   .   .   .
鼓励文档化编程




          .   .   .   .   .   .
文档 WIKI 化




            .   .   .   .   .   .
电子邮件重于即时聊天




         .   .   .   .   .   .
代码生成重于预定文档




         .   .   .   .   .   .
接口注释重于逻辑注释




         .   .   .   .   .   .
协作平台




       .   .   .   .   .   .
bug 跟踪




         .   .   .   .   .   .
跟踪项目代码




         .   .   .   .   .   .
搜索友好




       .   .   .   .   .   .
在线沟通




       .   .   .   .   .   .
灵活定制




       .   .   .   .   .   .
常见协作平台




     .   .   .   .   .   .
TRAC




       .   .   .   .   .   .
Bugzilla




           .   .   .   .   .   .
未涉及的问题




     .   .   .   .   .   .
团队文化建设




         .   .   .   .   .   .
” 单人团队” 的管理




              个人软件开发过程




                         .   .   .   .   .   .
开发工具的选择




          .   .   .   .   .   .
技术平台的选择




          .   .   .   .   .   .
设计与编码风格




          .   .   .   .   .   .
编码知识与技巧




          .   .   .   .   .   .
工程化的意义




     .   .   .   .   .   .
拥抱变化




       .   .   .   .   .   .
催生创造




       .   .   .   .   .   .
减少风险




       .   .   .   .   .   .
促进沟通




       .   .   .   .   .   .
提升劳动价值




         .   .   .   .   .   .
提高工作效率




         .   .   .   .   .   .
促进团队成长




         .   .   .   .   .   .
再见!




      .   .   .   .   .   .

Contenu connexe

Similaire à 软件开发工程化的个人体验

PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1
March Liu
 
C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述
Xiaozhe Wang
 
GCC_Porting_on_MiniSystem
GCC_Porting_on_MiniSystemGCC_Porting_on_MiniSystem
GCC_Porting_on_MiniSystem
Xiaojing Ma
 
Skan it 6.0 user manual chinese
Skan it 6.0 user manual chineseSkan it 6.0 user manual chinese
Skan it 6.0 user manual chinese
Lenin TaMe
 
Java eye新闻月刊 2011年01月 - 总第35期
Java eye新闻月刊   2011年01月 - 总第35期Java eye新闻月刊   2011年01月 - 总第35期
Java eye新闻月刊 2011年01月 - 总第35期
JianXiong Ma
 
51 cto linuxops_issue3
51 cto linuxops_issue351 cto linuxops_issue3
51 cto linuxops_issue3
Yiwei Ma
 
White paper apc3.0
White paper apc3.0White paper apc3.0
White paper apc3.0
ahnlabchina
 
Progit.zh
Progit.zhProgit.zh
Progit.zh
hhguang
 
最终Chinalotus之Domion7开发大百科简体尝试版
最终Chinalotus之Domion7开发大百科简体尝试版最终Chinalotus之Domion7开发大百科简体尝试版
最终Chinalotus之Domion7开发大百科简体尝试版
dominolamp
 

Similaire à 软件开发工程化的个人体验 (20)

PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1
 
Xcode tutorial
Xcode tutorialXcode tutorial
Xcode tutorial
 
Emacs Introduction
Emacs IntroductionEmacs Introduction
Emacs Introduction
 
Design document
Design documentDesign document
Design document
 
C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述C/C++调试、跟踪及性能分析工具综述
C/C++调试、跟踪及性能分析工具综述
 
GCC_Porting_on_MiniSystem
GCC_Porting_on_MiniSystemGCC_Porting_on_MiniSystem
GCC_Porting_on_MiniSystem
 
Java explore
Java exploreJava explore
Java explore
 
Skan it 6.0 user manual chinese
Skan it 6.0 user manual chineseSkan it 6.0 user manual chinese
Skan it 6.0 user manual chinese
 
Java eye新闻月刊 2011年01月 - 总第35期
Java eye新闻月刊   2011年01月 - 总第35期Java eye新闻月刊   2011年01月 - 总第35期
Java eye新闻月刊 2011年01月 - 总第35期
 
Meet 98-balanced design thinking between product experience and monetization ...
Meet 98-balanced design thinking between product experience and monetization ...Meet 98-balanced design thinking between product experience and monetization ...
Meet 98-balanced design thinking between product experience and monetization ...
 
51 cto linuxops_issue3
51 cto linuxops_issue351 cto linuxops_issue3
51 cto linuxops_issue3
 
《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书
 
8门编程语言的设计思考
8门编程语言的设计思考8门编程语言的设计思考
8门编程语言的设计思考
 
CABRI® 3D V2 - 革命性的數學工具(中文操作手冊)
CABRI® 3D V2 - 革命性的數學工具(中文操作手冊)CABRI® 3D V2 - 革命性的數學工具(中文操作手冊)
CABRI® 3D V2 - 革命性的數學工具(中文操作手冊)
 
漫談 Source Control Management
漫談 Source Control Management漫談 Source Control Management
漫談 Source Control Management
 
聯網數位電錶-概念設計書
聯網數位電錶-概念設計書聯網數位電錶-概念設計書
聯網數位電錶-概念設計書
 
White paper apc3.0
White paper apc3.0White paper apc3.0
White paper apc3.0
 
Progit.zh
Progit.zhProgit.zh
Progit.zh
 
最终Chinalotus之Domion7开发大百科简体尝试版
最终Chinalotus之Domion7开发大百科简体尝试版最终Chinalotus之Domion7开发大百科简体尝试版
最终Chinalotus之Domion7开发大百科简体尝试版
 
營運計畫書內容 詹翔霖教授
營運計畫書內容 詹翔霖教授營運計畫書內容 詹翔霖教授
營運計畫書內容 詹翔霖教授
 

Plus de March Liu

PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性
March Liu
 

Plus de March Liu (20)

Jaskell Core Parsec
Jaskell Core ParsecJaskell Core Parsec
Jaskell Core Parsec
 
轻量级文本工具集
轻量级文本工具集轻量级文本工具集
轻量级文本工具集
 
奇点与未来
奇点与未来奇点与未来
奇点与未来
 
尼尔盖曼的美国众神
尼尔盖曼的美国众神尼尔盖曼的美国众神
尼尔盖曼的美国众神
 
创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务
 
It工程师的职业成长
It工程师的职业成长It工程师的职业成长
It工程师的职业成长
 
Socrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemySocrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemy
 
PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 
Python 数据库技术讲座(二)
Python 数据库技术讲座(二)Python 数据库技术讲座(二)
Python 数据库技术讲座(二)
 
Python 数据库技术讲座(一)
Python 数据库技术讲座(一)Python 数据库技术讲座(一)
Python 数据库技术讲座(一)
 
Python 数据库技术
Python 数据库技术Python 数据库技术
Python 数据库技术
 
PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践
 
PostgreSQL 9 Standby
PostgreSQL 9 StandbyPostgreSQL 9 Standby
PostgreSQL 9 Standby
 
基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案
 
About Me
About MeAbout Me
About Me
 
1 Python简介
1 Python简介1 Python简介
1 Python简介
 
2 Python开发工具链
2 Python开发工具链2 Python开发工具链
2 Python开发工具链
 
3 Python开发风格与建议
3 Python开发风格与建议3 Python开发风格与建议
3 Python开发风格与建议
 
Postgre sql intro 0
Postgre sql intro 0Postgre sql intro 0
Postgre sql intro 0
 

软件开发工程化的个人体验