敏捷软件架构、开发方法...

67
Copyright© 2005 Peter Cheng 1 敏捷软件架构、开发方法 开放源码最佳实践 Open Source Developer Peter Cheng (程勇) [email protected] www.huihoo.org

Upload: others

Post on 31-May-2020

82 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2005 Peter Cheng1

敏捷软件架构、开发方法

与开放源码最佳实践

Open Source DeveloperPeter Cheng (程勇)

[email protected]

Page 2: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng22

BEA User Group …

上海,杭州,北京 Now 长沙长沙长沙长沙 !!!!

Page 3: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng33

议程

� 敏捷敏捷敏捷敏捷软件开发软件开发软件开发软件开发�测试驱动开发

�敏捷J2EE软件架构

�使用开发源码软件实现敏捷开发�持续集成

�实战演示

Page 4: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng44

敏捷宣言

� 个体和交互个体和交互个体和交互个体和交互 胜过过程和工具

� 可以工作的可以工作的可以工作的可以工作的软件软件软件软件 胜过面面俱到的文档

� 客客客客户合作户合作户合作户合作 胜过合同谈判

� 响响响响应变化应变化应变化应变化 胜过遵循计划

Page 5: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng55

敏捷开发生命周期

Page 6: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng66

极限编程实践

Page 7: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng77

XP 最佳实践

� 完整团队(Whole Team)� XP项目的所有参与者(开发人员、业务分析师、测试人员等等)一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。

� 计划游戏(Planning Game)� 计划是持续的、循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则根据成本和商务价值来选择要实现的特性。

Page 8: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng88

XP 最佳实践

� 小版本小版本小版本小版本发布发布发布发布(Small Release)(Small Release)(Small Release)(Small Release)� 在项目开发的过程中选择合适的周期进行发布。让客户能够尽早的得到可运行的版本。

Eclipse ReleasePlan

Page 9: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng99

XP 最佳实践

� 结对编程 (Pair Programming)� 所有的产品软件都是由两个程序员、并排坐在一起在同一台机器上构建的。

Page 10: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1010

XP 最佳实践

� 测试驱动开发测试驱动开发测试驱动开发测试驱动开发 (Test-Driven Development)� 程序员以非常短的循环周期工作,他们先增加一个失败的测试,然后使之通过。

� 重重重重构构构构(Refactoring)� 随时改进糟糕的代码。保持代码尽可能的干净、具有表达力。

� 持持持持续集成续集成续集成续集成 (Continue Integration)� 团队总是使系统完整地被集成。

� 集体代集体代集体代集体代码所有权码所有权码所有权码所有权((((Collective Ownership))))� 任何结对的程序员都可以在任何时候改进任何代码。

Page 11: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1111

议程

� 敏捷敏捷敏捷敏捷软件开发软件开发软件开发软件开发�测试驱动开发测试驱动开发测试驱动开发测试驱动开发

�敏捷J2EE软件架构实践

�使用开发源码软件实现敏捷开发�持续集成

�实战演示

Page 12: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1212

提问 ?

� 客户关注什么?� 尽早获得成果

� 牢牢控制项目的周期和预算

� 在资金发生变化时客户想要终止项目

� 项目开发关注什么?� 预算, 时间, 质量, 健壮性� 成功成功成功成功

Page 13: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1313

测试驱动开发

�对比与探讨

� TDD Demo�什么是TDD?�为什么TDD?�测试驱动开发支持工具

Page 14: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1414

瀑布开发 Vs 迭代开发

Page 15: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1515

TDD Demo

Page 16: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1616

TDD生命周期

编写一个测试编写一个测试编写一个测试编写一个测试

编译

修订编译错误

运行测试发现它失败

编写代码

运行测试

发现它成功

重构代码再测试

Page 17: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1717

什么是TDD

�一种开发软件的迭代技术

�一种软件设计的方法

�必须学习和时间�如果你开始的时候感觉它很自然,或许你已经做错了

Page 18: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1818

来自敏捷专家的声音

� 测试驱动开发是用于产生更好的较少缺陷的设计代码的一种强大工具”

- Martin Fowler

� “ 在我的编程实践中意味着更少的缺陷,更少的调试, 更好的设计和更高效的开发”

- Kent Beck

Page 19: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng1919

TDD的误解

� “TDD 仅仅是先编写测试”

� 测试工具自动生成测试代码,TDD变得好像没有什么意义

� 我们有QA团队!

Page 20: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2020

TDD(测试驱动) vs. TFD(测试优先)

� 测试驱动开发� 更加直接获取设计和实现中的问题

� 当项目发生错误时能快速的预警

� 测试优先开发� 在任何代码编写前编写测试代码

� 从一个错误的测试开始,你编写的最小部分代码都是为了让测试通过

� TFD 是 TDD的一个子集� TFD 有时候非常有帮助; TDD 更适合与其他的情况

Page 21: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2121

为什么TDD?

� 增增增增强信心强信心强信心强信心�通过实践TDD, 开发人员将努力的改善他们的代码,

而无需担心相关的代码变

化所带来的影响

�绿色的条文是否让人角色

更舒服呢?

�减少对调试器的依赖

Page 22: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2222

TDD带来的好处

�单元测试不是一种验证而更趋于一种设计

�当代码发生变化时,它将有助于及时的获得反馈

�当进行代码重构时更加安全

Page 23: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2323

TDD 支持工具

� Unit Test� JUnit (http://www.junit.org)� TestNG (http://www.testng.org)� JTiger (http://www.jtiger.org)� DBUnit http://dbunit.sourceforge.net

� Acceptance Test� Struts Unit http://strutstestcase.sourceforge.net� JWebUnit http://jwebunit.sourceforge.net� Cactus http://jakarta.apache.org/cactus/

� Stress Test� JMeter http://jakarta.apache.org/jmeterjmeterjmeterjmeter� Grinder http://grinder.sourceforge.net/

Page 24: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2424

议程

�敏捷软件开发�测试驱动开发

�敏捷J2EE软件架构

�使用开发源码软件实现敏捷开发�持续集成

�实战演示

Page 25: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2525

标准J2EE体系架构

Client

Client

Client

Client

Client Enterprise Information

Systems (EIS):

Relational-Database,Legacy Applications,

ERP Systems

EJBEJB

EJBEJB

Other Services:JNDI, JMS,Java Mail

Other Services:JNDI, JMS,Java Mail

ApplicationServer

ApplicationServer

JSP/Servlet

Firewall

Page 26: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2626

我们能做些什么?

Unix, Linux, Windows, etc

J2EE 应用服务器应用服务器应用服务器应用服务器

J2EE APIJ2EE 基础设施基础设施基础设施基础设施

电信电信电信电信、、、、银行银行银行银行、、、、教育教育教育教育、、、、

电子商务电子商务电子商务电子商务等等等等

操作系统操作系统操作系统操作系统

J2EE 应用框架应用框架应用框架应用框架

应用应用应用应用

Page 27: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2727

我们要解决什么问题?

复杂度复杂度复杂度复杂度: N * (N-1)

您的应用系统您的应用系统您的应用系统您的应用系统?

用户管理

绩效管理

机构管理

安全管理

薪资管理

系统管理

HR管理系统管理系统管理系统管理系统

复杂度复杂度复杂度复杂度: 30

复杂软件依赖管理

Page 28: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2828

反转控制 ( Inversion of Control )

�对象由容器来创建、而不是它们自己

�对象本身并不知道它们是如何被配置的

类 类 类

对象 对象 对象

Martin Fowler http://www.martinfowler.com/articles/injection.html

Page 29: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng2929

Non IoC Vs IoC

Page 30: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3030

创建对象

public class UserAction {

private UserService usi;

public UserAction() {

}

public ActionForward execute() throws Exception {

rsi.getAllUsers();

}

public void setUserService(UserService userService) {

this.userService = userService;

}

}

public class UserAction {

private UserServiceImpl usi;

public UserAction() {

}

public ActionForward execute() throws Exception {

usi = new UserServiceImpl();

usi.getAllUsers();

}

}

实现

接口

创建对象

Page 31: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3131

依赖注入 "Dependency Injection"

�Type 1 接口注入 (interface injection)

示例代示例代示例代示例代码码码码

public interface UserServiceHomeextends javax.ejb.EJBHome {

public UserService create() throws javax.ejb.CreateException,java.rmi.RemoteException;

}

Page 32: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3232

依赖注入 "Dependency Injection"

� Type 2 setter 注入(setter injection, JavaBean properties)

public class UserServiceImpl implements UserService {

private UserDao userDao;

public void setUserDao(UserDao userDao) {this.userDao = userDao;

}

}

<bean id=“userService" class="UserServiceImpl"><property name="userDAO">

<ref bean=“userDAO"/></property>

</bean>

Page 33: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3333

依赖注入 "Dependency Injection"

�构造器注入(Constructor Injection)

public class UserServiceImpl implements UserService {

private UserDao userDao;

public UserServiceImpl(UserDao userDao) {this.userDao = userDao;

}

}

<bean id=“userService" class="UserServiceImpl"><constructor-arg><ref bean=“userDao"/></constructor-arg>

</bean>

Page 34: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3434

IoC

复杂度复杂度复杂度复杂度: N * (N-1) 复杂复杂复杂复杂: N

应用系统应用系统应用系统应用系统? 使用使用使用使用 IoC

软件依赖管理

Page 35: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3535

最佳应用案例 --- Eclipse 架构

OSGi Framework

Page 36: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3636

构建自己的敏捷J2EE应用框架

HibernateHibernate

MicroKernel

J2EE Application Framework

DBCPDBCP Log4JLog4J

App AComponent

App AComponent

App BComponent

App BComponent

Struts FrameworkStruts FrameworkJSF FrameworkJSF Framework

Page 37: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3737

将所有组件、框架都集成到一起

Business ServicesBusiness Services

EJB ProxyEJB Proxy

OrganizationOrganization

Application ServicesApplication Services

User Access ServicesUser Access Services

Business Process ServicesBusiness Process Services

Service ContainerService Container

System ServicesSystem Services

LoggingLogging

ConfigurationConfiguration

PersistencePersistence

DAODAO

CacheCache

PoolPool

MessagingMessaging

Business ServicesBusiness Services

NotificationNotification

Man

agem

ent

Man

agem

ent

Plug-InPlug-In

Plug-InPlug-InPlug-InPlug-In

Plug-InPlug-In

SecuritySecurity

ScheduleSchedule

MailMail

JDBCJDBC AOP

AOP

System

Business

ApplicationJSF

JSF

StrutsStruts

Business RuleBusiness Rule

Business IntegrationBusiness Integration

Page 38: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3838

一致的软件体系架构

Client Presentation Business Logic Integration

Enterprise ApplicationEnterprise Application

Service APIService API

Service ImplementationService Implementation

JVMJVM

Upper

Platform Layer

Application Layer

Page 39: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng3939

一致的编程模型

Client Service ServiceImpl

Page 40: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4040

可替换的组件与服务

Enterprise ApplicationEnterprise Application

Service APIService API

Service ManagerService Manager

Service SPIService SPI

Service Component

ServiceComponent

ServiceComponent

ServiceComponent

Page 41: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4141

面向服务的体系架构 (非分布式)

service

service

service

BusinessObject

BusinessObject

BusinessObject

服务层服务层服务层服务层 领域层领域层领域层领域层 持久层持久层持久层持久层

DAO

DAO

DAO

数据数据数据数据

DB

表现层表现层表现层表现层

V

C

普通普通普通普通Java对象对象对象对象((((POJO))))

Page 42: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4242

面向服务的体系架构 (分布式)

Service

service

service

BusinessObject

BusinessObject

BusinessObject

服务层服务层服务层服务层 领域层领域层领域层领域层 持久层持久层持久层持久层

DAO

DAO

DAO

数据数据数据数据

DBVV

CC

远程外观远程外观远程外观远程外观

SessionFacade

SessionFacade

SessionFacade

普通普通普通普通Java对象对象对象对象((((POJO))))

Network

表现层表现层表现层表现层

Page 43: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4343

议程

�敏捷软件开发�测试驱动开发

�敏捷J2EE软件架构

� 使用使用使用使用开发源码软件实现敏捷开发开发源码软件实现敏捷开发开发源码软件实现敏捷开发开发源码软件实现敏捷开发�持持持持续集成续集成续集成续集成

�实战演示

Page 44: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4444

复杂的开发集成环境

Page 45: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4545

构建目标

Page 46: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4646

什么是集成?

定义: “组成完整整体的行动”

在软件开发中,集成包括…�组合源代码文件

�组合软件和开发环境

�组合软件和数据

�组合软件和需求(测试)�组合开发人员

Page 47: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4747

什么是持续集成?

� 在每一次将代码提交到源码仓库后集成所有源码并运行测试.

� 迅速的将代码和系统的问题反馈到开发人员

测试测试

编码编码

重构重构

集成集成

Page 48: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4848

持续集成的好处

�最小化集成的风险

�支持更早缺陷诊断. �节省创建发布的时间.�鼓励更好的测试习惯

�有助与形成其他更好的开发实践…

Page 49: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng4949

自动化构建

�自动化构建完成一下工作:� 管理项目依赖

� 构造应用/系统

� 集成项目的所有模块

� 效验应用/系统

� 部署应用/系统

� 持续的运行

开发平台开发平台 预发布平台预发布平台自动化

Page 50: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5050

Maven 解决方案

� Maven目标是让一个开发人员能够在短时间内理解整个开发的完整状态. 同时使构建过程变得容易

�提供一个统一的构建系统

�提供高质量的文档信息

�提供最佳开发实践指南

Page 51: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5151

Maven 101

� Maven 中的3个概念:� POM (Project ObjectModel)

� 插件� Made of Goals = Actions

� 仓库

� Maven 文件� project.xml

� POM� maven.xml

� Custom goals in Jelly� Goal, preGoal, postGoal

� project.properties� 配置

� build.properties� 配置

Page 52: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5252

Maven 仓库

Maven core

远程仓库

Web Server

本地仓库

project.xml (POM)

1

2

3

4

JVM 1 JVM 2

HTTP

获得依赖描述

检查本地是否已经存在

下载远程jar文件

保存到本地仓库

Page 53: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5353

Maven 插件

MavenMaven

project.xml

Project Object Model

project.xml

Project Object Model

maven.xml

Custom Maven Script

maven.xml

Custom Maven Script

project.properties

Project Configuration

project.properties

Project Configuration

build.properties

Build Configuration

build.properties

Build Configuration

Core PluginsCore Plugins

Regression TestRegression Test

JavaDoc CreationJavaDoc Creation Site CreationSite Creation

Project DistributionProject Distribution Coding Style CheckCoding Style Check

Source Cross RefSource Cross Ref

Source MetricsSource Metrics

CVS ReportsCVS Reports

Custom PluginsCustom Plugins

PMDPMD

JBossJBoss EclipseEclipse

CLOVERCLOVER Cruise ControlCruise Control

JDEEJDEE

SimianSimian

JettyJetty

Page 54: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5454

项目开发结构示例

project

src target

conf

test classes test-classes

javadoc

libproject.xml

test-report

version

integration

milestone

release

nightly

in version control

xdoc

requirement

design

test

pm

webapp

maven.xml

Page 55: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5555

进行持续构建

远程仓库

Maven

持续构建

部署快照

本地仓库 同步

A B

C

Project C 构建

Page 56: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5656

敏捷开发生命周期

Pre-ProductionAcceptance &

Stress Test

Development

Platform

代码库代码库代码库代码库

commit Automatic Build

Platform

Local Build

Pre Release

Page 57: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5757

敏捷构建环境

本地参考本地参考本地参考本地参考

远程仓库远程仓库远程仓库远程仓库

Local Build (Maven) Local Build (Maven)

Continuous Build (LuntBuild)

本地仓库本地仓库本地仓库本地仓库

Page 58: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5858

持续集成示例

Page 59: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng5959

开发团队信息共享

SCM 提交变更提交变更提交变更提交变更例如: FishEye

SCM 提交变更提交变更提交变更提交变更例如: FishEye

知识仓库变更知识仓库变更知识仓库变更知识仓库变更例如例如例如例如: Confluence/SnipSnap

知识仓库变更知识仓库变更知识仓库变更知识仓库变更例如例如例如例如: Confluence/SnipSnap

迭代定义变更迭代定义变更迭代定义变更迭代定义变更例如: JIRA

迭代定义变更迭代定义变更迭代定义变更迭代定义变更例如: JIRA

Specific Bug searches例如: JIRA

Specific Bug searches例如: JIRA

项目信息发布项目信息发布项目信息发布项目信息发布例如: Blog (SnipSnap)

项目信息发布项目信息发布项目信息发布项目信息发布例如: Blog (SnipSnap)

构建成功构建成功构建成功构建成功例如: (Maven)

构建成功构建成功构建成功构建成功例如: (Maven)

Bug更新更新更新更新例如: JIRA

Bug更新更新更新更新例如: JIRA

构建失败构建失败构建失败构建失败例如: 持续构建 (CC)

构建失败构建失败构建失败构建失败例如: 持续构建 (CC)

相关信息相关信息相关信息相关信息例如: 定制的 (Maven 插件)

相关信息相关信息相关信息相关信息例如: 定制的 (Maven 插件)信息聚合信息聚合信息聚合信息聚合信息聚合信息聚合信息聚合信息聚合

独立的邮件独立的邮件独立的邮件独立的邮件独立的邮件独立的邮件独立的邮件独立的邮件

邮件列表邮件列表邮件列表邮件列表邮件列表邮件列表邮件列表邮件列表

Page 60: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng6060

真实案例

� NitroPlus E-Commence Platform

�项目背景

�敏捷开发团队

�敏捷开发环境

�敏捷开发平台

Page 61: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng6161

Niroplus 系统概述

Page 62: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng6262

团队成员

开发测试开发测试开发测试开发测试(4)

敏捷教练敏捷教练敏捷教练敏捷教练

项目经理项目经理项目经理项目经理

美工美工美工美工

技术负责人技术负责人技术负责人技术负责人

Page 63: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng6363

团队协作

BugBaseBugBase

Developer TesterAgile Coacher

SubvesionSubvesion

PM Art Designer

MaillistMaillist

Team Leader

WikiWiki

JIRAConfluence Google Groups

Page 64: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng6464

线上沟通

日日日日报报报报

邮件组邮件组邮件组邮件组

Page 65: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng6565

线下沟通

结对编程结对编程结对编程结对编程

自由的自由的自由的自由的讨论讨论讨论讨论

在在在在开发中享受乐趣开发中享受乐趣开发中享受乐趣开发中享受乐趣

Page 66: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng6666

迭代开发

Milestone

Page 67: 敏捷软件架构、开发方法 与开放源码最佳实践read.pudn.com/downloads82/doc/316011/敏捷软件架构与开发方法.pdf · 起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的

Copyright© 2006 Peter Cheng6767

谢谢谢谢谢谢谢谢!!!!