software engineer talk

34
现代软件工程杂谈 Larry Cai

Upload: larry-cai

Post on 12-Jul-2015

248 views

Category:

Engineering


10 download

TRANSCRIPT

Page 1: Software Engineer Talk

现代软件工程杂谈

Larry Cai

Page 2: Software Engineer Talk

工作:探索 件 的最好最适合的方法和软 开发工具。

一个 源, 作和敏捷的布道者。开 协

› 微博: @larrycaiyu› 博客: http://larrycaiyu.com › Email : larry.caiyu(at)gmail.com› Github: http://github.com/larrycai

Page 3: Software Engineer Talk

件工程的 状要点软 现

公司 施 状和特点( 去和 在实 现 过 现

流程:敏捷 / 精益、 Scrum

持 集成续 : Jenkins

版本控制: git , artifactory

代 量:代 、码质 码审阅 Gerrit

基 施:云础设 openstack 、 docker

需求: ATDD

总结

提纲

Page 4: Software Engineer Talk

敏捷已死,现在不讲敏捷了? 代码审查是为了保证质量,再多时间也是

应该的? 需求都是产品经理的事,程序员都是螺丝

钉? 只有源代码才需要版本控制? 持续集成是啥? Docker 看起来不错,和软件工程有关系吗

探讨的问题

件工程非常不枯燥,越来越有味道软

Page 5: Software Engineer Talk

敏捷是 件工程的支 ,保 件 的改 的方向软 撑 证软 开发 进和重点

持 集成续 和持 交付是整个端到端的 潮流,它不续 开发断提供各 反 来提高 量和效率,它涵盖了级 馈 开发质 软件工程的大部分 域领

完 的备 基 施础设 支 自 化和管理撑 动 技 不断的 步会不断的推 各 的 步术 进 动 级 进

软件工程现状要点

技 的 展使得各 件 践加速 展,使得 件工术 发 项软 实 发 软程所需要的交付 量可控,自 化。质 动

Page 6: Software Engineer Talk

ISO 、 CMM 2001 : XP 、 量轻 级 敏捷: 、 到整个公司团队 组织 精益:浪 ,端到端费 Scrum :框架,快速

帮助 有秩序有 律前组织 纪 进 理解和 :贯彻 难

流程:敏捷、精益

Image Source: http://www.123greetings.com/events/doctors_day/surgery_for_dummies.html

Page 7: Software Engineer Talk

企业中的敏捷框架

Source : http://ScaledAgileFramework.com

Page 8: Software Engineer Talk

“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

精益

Page 9: Software Engineer Talk

Scrum

Image source: www.mountaingoatsoftware.com/scrum

Page 10: Software Engineer Talk

站立会 (议 daily standup meeting ) 白板( 子白板)电 自 (任 ,估 )组织 务 时间 文档要不要 Scrum 就是敏捷吗 CSM ( ScrumMaster )认证 敏捷到 敏捷团队 组织

状:敏捷暴露 ,没有很懂的人, 施是不断现 问题 实 沟通和循序 的 程, 。渐进 过 难

误区

Page 11: Software Engineer Talk

持 集成续 和持 交付是整个端到端的 潮流,它不续 开发断提供各 反 来提高 量和效率,它涵盖了级 馈 开发质 软件工程的大部分 域领

企 件 的核心业软 开发 使用 Jenkins

持续集成、持续交互

Page 12: Software Engineer Talk

持续集成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

反馈系统反馈系统

Page 13: Software Engineer Talk

什么 么多古怪的界面?为 这

及时的反馈系统

Source:https://github.com/edgeware/dashboard

Page 14: Software Engineer Talk

互联网云中的持续集成 Travis-CI: 基于 Virtualbox

虚 机启动 拟 下 代载 码库 行配置, 行 建执 运 构 虚 机销毁 拟

Drone.io: 基于 docker

的配置文件 简单 .travis.yml

Page 15: Software Engineer Talk

企 有 和安全的需要业 审计 CM :配置管理工程师 早期:

RCS , CVS 、 Subversion ( SVN )、 ClearCase 在:分布式 现 Git ( Mercurial 很少) 源代 和二 制 件(码 进 构 artifacts )版本控制

= 》 Infrastructure as Code

不是限制,是帮助。

版本控制

Page 16: Software Engineer Talk

更多的 作方式(分布式)协

更加友好(本地 史)历

Git workflow

Page 17: Software Engineer Talk

Jenkins 服 器务

文件服 器、务 WEB 界面

用的二 制 件(专 进 构 Artifactory 、 Nexus )

( npm/pypi/jar…)

二进制构件版本控制

Page 18: Software Engineer Talk

二 制 件的提升(进 构 Promotion ):可以在不同的仓

中被 、拷 而保留原始信息库 挪动 贝

重要的生命周期的管理

二进制构件的提升

Page 19: Software Engineer Talk

元 :单 测试 xUnit/TDD 静 代 :态 码检测 lint 、 Klockwork 、 Clover 代 :码审阅 Gerrit/Github 量反 :质 馈 Sonar 功能 :测试 ATDD 、 Selenium 、 Sikuli

是帮助,不是目 、标 KPI

代码质量控制

Image Source http://www.sikuli.org/

Page 20: Software Engineer Talk

代码质量

Page 21: Software Engineer Talk

代码审阅的策略

代码变化

自动化测试 审阅

少浪 ,只做有意 的事减 费 义

Page 22: Software Engineer Talk

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

Page 23: Software Engineer Talk

源 件在开 软 Github 怎么工作 提交 Issues fork 代码库 修改 通测试 过 Pull request 合并(作者)

Github pull request

Page 24: Software Engineer Talk

完 的备 基 施础设 支 自 化和管理撑 动

化:物理机变 -> 虚 机拟 -> 云服务 ->Docker 容器

更快更 活 来更多的策略灵 带

基础设施 Infrastructure

Image source : http://www.itrus.com/infrastructure_design.html

Page 25: Software Engineer Talk

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

不同 品特性不同用法产

Page 26: Software Engineer Talk

Docker 介绍 Docker 是一种 Linux 容器工具集,它是 “ 建为 构

( build )、交付( ship )和 行(运 run )”分布式应用而 的。设计

http://www.slideshare.net/dotCloud/solomon-hykes-dockercon-keynote

Page 27: Software Engineer Talk

› 持 集成自 生续 动产 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

Page 28: Software Engineer Talk

需求

需求是 件 中最重要的事,但 是做软 开发 总 错

Page 29: Software Engineer Talk

验收驱动测试( ATDD )

需求是最容易瀑

布式的!!

收验 驱动测试环

Image source http://www.slideshare.net/hujak/javacro14-test-automation-using-robotframework-libraries-stojan-peshov 第 8 页

Page 30: Software Engineer Talk

例化需求(实 specification by example)是 收验 驱动测的一试 种

有 、可 行的需求还 业务驱动开发 执 特点:

用例子(自然 言)来描述需求,在 成特性语 归纳 需求是用来 通的沟

可以用 Cucumber 言来语 实现

实例化需求

Page 31: Software Engineer Talk

Cucumber 工具实现

Page 32: Software Engineer Talk

云使得 源利用更有效, 更充分,持 集成效率更高资 测试 续

Docker容器化技 使得 更易本地化, 用交付更方便术 测试 应

分布式版本控制使得 作更 便,代 化协 简 码审阅简单

例化需求使得 更加 近 ,使得交流更通 , 量更好实 测试 贴 业务 畅 质

总结

技 的 展使得各 件 践加速 展,使得 件工术 发 项软 实 发 软程所需要的交付 量可控,自 化。质 动

Page 33: Software Engineer Talk

推荐书目

Page 34: Software Engineer Talk

微博:@larrycaiyu 博客: http://larrycaiyu.com Email: larry.caiyu(at)gmail.com Github: http://github.com/larrycai

建议 & 问题多写代 ,参加 源 件的 !码 开 软 开发