Top Banner
现代软件工程杂谈 Larry Cai
34

Software Engineer Talk

Jul 12, 2015

Download

Engineering

Larry Cai
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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

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