现代软件工程杂谈 Larry Cai
现代软件工程杂谈
Larry Cai
工作:探索 件 的最好最适合的方法和软 开发工具。
一个 源, 作和敏捷的布道者。开 协
› 微博: @larrycaiyu› 博客: http://larrycaiyu.com › Email : larry.caiyu(at)gmail.com› Github: http://github.com/larrycai
件工程的 状要点软 现
公司 施 状和特点( 去和 在实 现 过 现
)
流程:敏捷 / 精益、 Scrum
持 集成续 : Jenkins
版本控制: git , artifactory
代 量:代 、码质 码审阅 Gerrit
基 施:云础设 openstack 、 docker
需求: ATDD
总结
提纲
敏捷已死,现在不讲敏捷了? 代码审查是为了保证质量,再多时间也是
应该的? 需求都是产品经理的事,程序员都是螺丝
钉? 只有源代码才需要版本控制? 持续集成是啥? Docker 看起来不错,和软件工程有关系吗
?
探讨的问题
件工程非常不枯燥,越来越有味道软
敏捷是 件工程的支 ,保 件 的改 的方向软 撑 证软 开发 进和重点
持 集成续 和持 交付是整个端到端的 潮流,它不续 开发断提供各 反 来提高 量和效率,它涵盖了级 馈 开发质 软件工程的大部分 域领
完 的备 基 施础设 支 自 化和管理撑 动 技 不断的 步会不断的推 各 的 步术 进 动 级 进
软件工程现状要点
技 的 展使得各 件 践加速 展,使得 件工术 发 项软 实 发 软程所需要的交付 量可控,自 化。质 动
ISO 、 CMM 2001 : XP 、 量轻 级 敏捷: 、 到整个公司团队 组织 精益:浪 ,端到端费 Scrum :框架,快速
帮助 有秩序有 律前组织 纪 进 理解和 :贯彻 难
流程:敏捷、精益
Image Source: http://www.123greetings.com/events/doctors_day/surgery_for_dummies.html
企业中的敏捷框架
Source : http://ScaledAgileFramework.com
“How long would it take your organization to deploy a change [to the production] that involved just one single line of code?
Do you do this on a repeatable, reliable basis? ”
Mary and Tom Poppendieck, Implementing Lean Software Development
精益
站立会 (议 daily standup meeting ) 白板( 子白板)电 自 (任 ,估 )组织 务 时间 文档要不要 Scrum 就是敏捷吗 CSM ( ScrumMaster )认证 敏捷到 敏捷团队 组织
状:敏捷暴露 ,没有很懂的人, 施是不断现 问题 实 沟通和循序 的 程, 。渐进 过 难
误区
持 集成续 和持 交付是整个端到端的 潮流,它不续 开发断提供各 反 来提高 量和效率,它涵盖了级 馈 开发质 软件工程的大部分 域领
企 件 的核心业软 开发 使用 Jenkins
持续集成、持续交互
持续集成co
de p
ush
代码审阅
Fast BuildFast Build• Compile• Unit test
Git/Gerrit
notif
icat
ion
Compile/Build• Compile• Unit test
•Quality check~ 10 min
Packaging•jar
• rpm•iso
~ 20 min
Function Test•Smoke test
•Fast test•Complete test
~ 4 hours
Function Test•Smoke test
•Fast test•Complete test
~ 4 hours
System Testing- weekend• characters
• stability~ 1-2 days
System Testing- weekend• characters
• stability~ 1-2 days
Installation• iso
•Upgrade•Uninstall first
~ 30 min
持续集成
Production•DemoLab
•Design Env•Cloud
Production•DemoLab
•Design Env•Cloud
源代码
Git/Gerrit
源代测试 码
二 制 件进 构
3pp Repository
Package Repository
ToolRepository
发布
SonarSonar
Testing reportTesting reportBuilding reportBuilding report
DashboardDashboard
反馈系统反馈系统
什么 么多古怪的界面?为 这
及时的反馈系统
Source:https://github.com/edgeware/dashboard
互联网云中的持续集成 Travis-CI: 基于 Virtualbox
虚 机启动 拟 下 代载 码库 行配置, 行 建执 运 构 虚 机销毁 拟
Drone.io: 基于 docker
的配置文件 简单 .travis.yml
企 有 和安全的需要业 审计 CM :配置管理工程师 早期:
RCS , CVS 、 Subversion ( SVN )、 ClearCase 在:分布式 现 Git ( Mercurial 很少) 源代 和二 制 件(码 进 构 artifacts )版本控制
= 》 Infrastructure as Code
不是限制,是帮助。
版本控制
更多的 作方式(分布式)协
更加友好(本地 史)历
Git workflow
Jenkins 服 器务
文件服 器、务 WEB 界面
用的二 制 件(专 进 构 Artifactory 、 Nexus )
( npm/pypi/jar…)
二进制构件版本控制
二 制 件的提升(进 构 Promotion ):可以在不同的仓
中被 、拷 而保留原始信息库 挪动 贝
重要的生命周期的管理
二进制构件的提升
元 :单 测试 xUnit/TDD 静 代 :态 码检测 lint 、 Klockwork 、 Clover 代 :码审阅 Gerrit/Github 量反 :质 馈 Sonar 功能 :测试 ATDD 、 Selenium 、 Sikuli
是帮助,不是目 、标 KPI
代码质量控制
Image Source http://www.sikuli.org/
代码质量
代码审阅的策略
代码变化
自动化测试 审阅
少浪 ,只做有意 的事减 费 义
Gerrit 基本流程
Local working space
commit
Local
Repository
Working
Directory
Gerrit
Code review system
Remote repository
gitgit
Gerrit 服务器
提交代码
2
Review Team
3
1pull
11
Sync
5Merge to master
4
Code Review: +2
CI System
3333
Verify: +1
4
源 件在开 软 Github 怎么工作 提交 Issues fork 代码库 修改 通测试 过 Pull request 合并(作者)
Github pull request
完 的备 基 施础设 支 自 化和管理撑 动
化:物理机变 -> 虚 机拟 -> 云服务 ->Docker 容器
更快更 活 来更多的策略灵 带
基础设施 Infrastructure
Image source : http://www.itrus.com/infrastructure_design.html
OpenStackOpenStack
Package repo
二 制 件进 构 库
Installation toolsrepo
Test Caserepo
Git
源代码库
Git
Source code
Installation code
Git
Test case code
Git
vm A
IaaS (OpenStack)
IaaS (OpenStack)
VM Images
Node List (A,B,C)
Node VM conf (image name, flavor)
Cloud Conf (API) 1. 启动 VMs(OS/Base 3pp)
VM informationVM A: 192.0.1.1VM B: 192.0.1.2VM C: 192.0.1.3….
2. 安装最新 APP(DB, Apache/Tomcat)
vmB
..
OpenStackOpenStack
vm A
vmB
..
OpenStackOpenStack
vm A
vmB
..
3. 功能测试
OpenStackOpenStack
4. 生 告产 报除删 VM
云Openstack
不同 品特性不同用法产
Docker 介绍 Docker 是一种 Linux 容器工具集,它是 “ 建为 构
( build )、交付( ship )和 行(运 run )”分布式应用而 的。设计
http://www.slideshare.net/dotCloud/solomon-hykes-dockercon-keynote
› 持 集成自 生续 动产 docker 像镜› 开发团队 Pull 安装好的 docker 像,直接 和镜 验证 测试› 将来: docker 像直接交付 客镜 给 户
Docker 带来的变化
Docker
Registry
Server
Docker
Registry
Server
Source Code
(Gerrit)
Source Code
(Gerrit)
compile/verifyinstall/build
push
pull
APP:15aAPP:15a
APP:20140928APP:20140928
APP:telstra10APP:telstra10
注 关 http://www.infoq.com/cn/dockers
需求
需求是 件 中最重要的事,但 是做软 开发 总 错
验收驱动测试( ATDD )
需求是最容易瀑
布式的!!
收验 驱动测试环
路
Image source http://www.slideshare.net/hujak/javacro14-test-automation-using-robotframework-libraries-stojan-peshov 第 8 页
例化需求(实 specification by example)是 收验 驱动测的一试 种
有 、可 行的需求还 业务驱动开发 执 特点:
用例子(自然 言)来描述需求,在 成特性语 归纳 需求是用来 通的沟
可以用 Cucumber 言来语 实现
实例化需求
Cucumber 工具实现
云使得 源利用更有效, 更充分,持 集成效率更高资 测试 续
Docker容器化技 使得 更易本地化, 用交付更方便术 测试 应
分布式版本控制使得 作更 便,代 化协 简 码审阅简单
例化需求使得 更加 近 ,使得交流更通 , 量更好实 测试 贴 业务 畅 质
总结
技 的 展使得各 件 践加速 展,使得 件工术 发 项软 实 发 软程所需要的交付 量可控,自 化。质 动
推荐书目
微博:@larrycaiyu 博客: http://larrycaiyu.com Email: larry.caiyu(at)gmail.com Github: http://github.com/larrycai
建议 & 问题多写代 ,参加 源 件的 !码 开 软 开发