SlideShare a Scribd company logo
1 of 87
Download to read offline
开源软件定制中的
  软件工程
 Hacking CoSign...


                        2005-2010

   北京群英汇信息技术有限公司                    蒋 鑫
      http://www.ossxp.com


                                          版本号 : 0.1-5
北京群英汇信息技术有限公司                                                                          http://www.ossxp.com




      我们是开源软件的产品和服务提供商
      看出 LOGO 的奥秘?
       奔跑的 角马  — 开源软件生生不息的脚步;
       整体的 邮戳  — 品质的保证,服务快捷、方便;
      “ 汇”字的两层含义:
         “ 汇聚”— 群英汇聚之地;
         “ 汇递”— 开源软件汇递八方;




北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign                          2
开源启示——个人                                                                                 http://www.ossxp.com




     程序员的需求:新技术,技巧,好的习惯,好的工作

     研究开源软件,与技术高手为伍
     参与开源软件,在软件过程的实践中养成习惯
     立即行动
         使用开源软件
         参与开源社区:报告问题 , 参与讨论
         贡献翻译 , 文档和代码
         创立开源项目


                                                                                                            3

北京群英汇信息技术有限公司     Project Management inspired by open source practice —— Hacking CoSign
开源启示——企业 / 组织                                                                            http://www.ossxp.com




     企业的需求:低成本,高效工作流,质量高
     企业的开源经济模式
         嵌入式开发
         非核心业务开源: NVIDIA , IBM eclipse
         开源软件整合: Redhat
         定制和支持:群英汇 @ossxp.com
     其他获益方式
         使用开源软件,采购开源软件服务
         借鉴开源项目的管理模式

                                                                                                            4

北京群英汇信息技术有限公司     Project Management inspired by open source practice —— Hacking CoSign
开源软件打造——群英汇研发协同管理平台                                                                                             http://www.ossxp.com




                                                7                                                           1.知识管理
                                                                                                            2.沟通系统
                                                                                                            3.搜索引擎
                                                                                                            4.版本控制
                                                                                                            5.测试管理
                                                6
           4110101110110101101001                                                     5                     6.持续集成
            100011011110101010111
            001000100011010101010
            110101001010101011011                                                                           7.缺陷跟踪
            101010101001010101010
            101010100101010010101
             00010101010110000000
            101010101100001001011
                                                                                                            8.集中管理




           1                                   2                                        3




                                                                                                                                   5

北京群英汇信息技术有限公司                       Project Management inspired by open source practice —— Hacking CoSign
开源藏宝图                                                                                                     http://www.ossxp.com




                      ProjectMgmt
               _,->   (Redmine) <-._                                            * Redmine             * CoSign
             _/                            _                                     Trac
           _/                           _                                        Mantis
        VCS                 CI             TestMgmt
   (SVN,pySvnMager -> (CruiseControl) -> (Testlink)                             * Subversion          * GOsa
    Git ...)                                                                      pySvnManager
                                                                                  Git (topgit,gitosis)
        o o                o /              o o
       /| /|              |               /| /|                             * Testlink            * CruiseControl
       /  /              /               /  / 
  +----------------------------------------------------+                        * MoinMoin           * Nutch
  |                    Search Engine                   |                          MediaWiki            Lucene
  +----------------------------------------------------+
  | Knowledge Base                     Communication |                          * WordPress
  | (Moin+WordPress)                   (Mailman+IM?) |                            Typo
  +----------------------------------------------------+
  |               UserMgmt + Single Signon             |                        * Mailman
  +----------------------------------------------------+                          phpBB
                                                                                  SMF


                                                                                                                             6

北京群英汇信息技术有限公司                Project Management inspired by open source practice —— Hacking CoSign
开源软件定制的软件工程学                                                                                                    http://www.ossxp.com




                                                        文档

                                 理
                             管
                         试                                                                   on
                     测
                                                                                             ha the
                                                                      管理                        ck s
                                                                需   求                             in po
                                                                                                    g t

                 持
                 续                                                                                           版
                集                                  CoSign                                                    本
                成                                 upstream                                                   控
                                                                                                             制
                     单
                     单
                         元
                         元




                                                                                                 跟踪
                             测
                             测




                                                                                           缺   陷
                                 试
                                 试




                                                          代码评审


北京群英汇信息技术有限公司                        Project Management inspired by open source practice —— Hacking CoSign                              7
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              8
认识一下 CoSign                                                                            http://www.ossxp.com




     单点登录平台




                                                                                                          9

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
认识一下 CoSign                                                                            http://www.ossxp.com




     登录成功,显示服务列表




                                                                                                         10

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
CoSign 的组成                                                                                  http://www.ossxp.com




    APPS --> Filter (IIS)------+
    APPS --> Filter (Java)-----+
    APPS --> Filter (Apache)---+
                            ./ |
                          ./   |
                       ./      V
    login ---+       / +--> Daemon (tcp/6663)
             |--> CGI --|
    logout --+          +--> Factors -> AuthSource(DB, LDAP)




                                                                                                              11

北京群英汇信息技术有限公司        Project Management inspired by open source practice —— Hacking CoSign
CoSign 的原理                                                                                   http://www.ossxp.com




 参见

     CoSign 2.x 协议介绍

         http://blog.ossxp.com/2010/03/824/

     CoSign 3.x 介绍及与 CoSign 2.x 的协议比较

         http://blog.ossxp.com/2010/03/831/




                                                                                                               12

北京群英汇信息技术有限公司         Project Management inspired by open source practice —— Hacking CoSign
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              13
定制的需求                                                                                  http://www.ossxp.com




     不说中国话,以及改说中国话的问题




                                                                                                         14

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
定制的需求 ( 续 )                                                                             http://www.ossxp.com




     需要增加邀请码认证
         需要客户 / 亲朋无须注册即可访问
     增加邮件地址登录
         既可以用 ID 登录,也可以邮件地址登录
     双因子认证
         来自于 OpenSesame 的需求
     请求认证因子的或运算
         来自于邮件列表审核的授权需求
     其它痒痒的小问题
         认证因子的本地化
         登录对话框无关认证方式的隐藏



                                                                                                          15

北京群英汇信息技术有限公司    Project Management inspired by open source practice —— Hacking CoSign
需求管理                                                                                   http://www.ossxp.com




     使用项目管理工具来记录需求




                                                                                                         16

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
需求管理要点                                                                                     http://www.ossxp.com




     需求以功能的方式建立
     设置里程碑,让团队看到目标
     每个功能都归属于某个里程碑
     一个里程碑不要包含太多功能。
      快速迭代:小步快跑
     程序员开发,提交说明要引用
     到需求编号
         See #123: 实现 xxx 的部分功
         能 ...
         Fixes #123: 完成 xxx 功能的
         全部实现 ...
                                                                                                             17

北京群英汇信息技术有限公司       Project Management inspired by open source practice —— Hacking CoSign
需求管理要点 ( 续 )                                                                           http://www.ossxp.com




     甘特图:为功能需求设定预期的开发时间




                                                                                                         18

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
需求的变更历史                                                                                http://www.ossxp.com




北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign                          19
看看 CoSign 最终的实现                                                                              http://www.ossxp.com




     需要增加邀请码认证
         只需知道邀请码,如 test123
     增加邮件地址登录
         如 jiangxin@moon.ossxp.com
     双因子认证
         其它应用自动登录:如 wiki
         访问 : https://weblogin.moon.ossxp.com/opensesame/
     请求认证因子的或运算
         邮件列表审核授权:
         http://list.moon.ossxp.com/mailman/admindb/dev
     实现过程大揭密
         即将拉开大幕 ...


                                                                                                               20

北京群英汇信息技术有限公司         Project Management inspired by open source practice —— Hacking CoSign
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              21
Let's hack...                                                                                http://www.ossxp.com




     在部署路径中,直接修改页面模板
         hacking...
     如何保存部署目录的现场修改?
         使用版本控制系统
         Hg, Git 等最适合用做 on the spot 版本控制
         修改导出为 patch 文件
     现场修改不等于定制开发
         现场修改是不完整的代码修改
         现场修改是临时性修改,会被新的部署覆盖

                                                                                                               22

北京群英汇信息技术有限公司         Project Management inspired by open source practice —— Hacking CoSign
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              23
自有项目开发和二次开发区别                                                                          http://www.ossxp.com




     开发模式的区别,导致版本控制上的区别




                                                                                                         24

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
定制开发中的版本控制                                                                                    http://www.ossxp.com




      使用 Subversion 的卖主分支管理定制开发

      X 合并冲突(所有的 hack 混杂在一起的合并,痛苦有谁知?)
      |
 58   O 导入上游新版本 v3.x AMD /branches/upstream/*
      |
 57   O hack 55:       M /trunk/src/zzz
      |
      ...
      |
  4   O hack 02:       A /trunk/include/bbb
      |
  3   O hack 01:       M /trunk/src/aaa
      |
  2   O 建立卖主分支        cp /trunk /branches/upstream
      |
  1   O 导入上游版本 v2.x   A /trunk/*


                                                                                                                25

北京群英汇信息技术有限公司          Project Management inspired by open source practice —— Hacking CoSign
用 SVN 这么实现可以么?                                                                                 http://www.ossxp.com




        +--------------------O(v3.x)---------                         upstream
      /                        
  ---O(v2.x)...............................                          /trunk
      ````                    
             +--O--------------X-----------                         hack1
           +---O------O-+------O-X----------                         hack2
           +--O------O------------X---------                        hack3
                                   
                             +--O---Y-X-------                        hack4




     你可以一试
     但是 SVN 分支合并的难度,以及分支依赖关系难以解决,补丁导出
     工具的缺乏,会让你放弃这个想法


                                                                                                                 26

北京群英汇信息技术有限公司           Project Management inspired by open source practice —— Hacking CoSign
Subversion 好坏说                                                                          http://www.ossxp.com




     优点:
         基于路径的授权,适合企业应用
            在公司纷纷将代码开源的背景下,严格授权是否具有实际意义
            代码评审,结对编程等实践,实际上源码已在公司内部开源
         适合原生代码的版本控制
     缺点:
         不适合现场 hacking 的版本控制
         受网络限制,分处异地团队的协同,以及移动办公受限
         分支合并的成本高
         不适合用做二次开发的版本控制




                                                                                                          27

北京群英汇信息技术有限公司    Project Management inspired by open source practice —— Hacking CoSign
什么样的版本控制,是定制开发需要的 呢?                                                                       http://www.ossxp.com




     每个 Hack 拥有一个独立的分支
         每个分支的产出是一个补丁文件
     不需要所有 Hack 都合并到一起的分支,因为徒增烦恼!
         分支合并的成本高,不如补丁来得直接
     补丁队列 (patch queue) 的管理
         quilt 是最通用的补丁列表管理工具
         quilt 的输入
            源码目录
            补丁文件:每个补丁即为对源码的一个 hack
            补丁队列: series 文件,即补丁文件安装的先后次序
         quilt 两种最主要的用法
            quilt push
            quilt pop

                                                                                                             28

北京群英汇信息技术有限公司       Project Management inspired by open source practice —— Hacking CoSign
Thank you, OpenSource                                                                  http://www.ossxp.com




     从来就不会只有唯一的包治百病的解决方案
     每个解决方案都会在适于特定环境
     选择开源,很多时候是在选型
     换手机时,幸福的烦恼:太多的选择




                                                                                                         29

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 为定制做版本控制:一人独享式                                                                              http://www.ossxp.com




     实际上是两个 Hg 库完成的版本控制

       版本库 1                            版本库 2



      O'(patch2 cont.)
      |                          series
      O (patch2)                 + patch1
      |                    +--    > patch2
      O (patch1)                  - patch3
      |                           - patch4
      O (v2.x)
     / 
   O     O
   |
   O

                                                                                                                    30

北京群英汇信息技术有限公司              Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                             http://www.ossxp.com




     初始状态




                        series
                        - patch1
                        - patch2
                        - patch3
                        - patch4
      O (v2.x)
     / 
   O     O
   |
   O

                                                                                                          31

北京群英汇信息技术有限公司    Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                               http://www.ossxp.com




 $ hg qpush




                          series
                          > patch1
                          - patch2
      O (patch1)          - patch3
      |                   - patch4
      O (v2.x)
     / 
   O     O
   |
   O

                                                                                                            32

北京群英汇信息技术有限公司      Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                               http://www.ossxp.com




 $ hg qpush




                          series
      O (patch2)          + patch1
      |                   > patch2
      O (patch1)          - patch3
      |                   - patch4
      O (v2.x)
     / 
   O     O
   |
   O

                                                                                                            33

北京群英汇信息技术有限公司      Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                                 http://www.ossxp.com




   modify




      O' modify...          series
      O (patch2)            + patch1
      |                     > patch2
      O (patch1)            - patch3
      |                     - patch4
      O (v2.x)
     / 
   O     O
   |
   O

                                                                                                              34

北京群英汇信息技术有限公司        Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                                     http://www.ossxp.com




 $ hg qref




      O' modify...-__        series
      O (patch2)       __    + patch1
      |                    --> patch2
      O (patch1)              - patch3
      |                       - patch4
      O (v2.x)
     / 
   O     O
   |
   O

                                                                                                                  35

北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                               http://www.ossxp.com




 $ hg qref




                          series
      O'(patch2)          + patch1
      |                   > patch2'
      O (patch1)          - patch3
      |                   - patch4
      O (v2.x)
     / 
   O    O
   |
   O

                                                                                                            36

北京群英汇信息技术有限公司      Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                               http://www.ossxp.com




 $ hg qpush -a


      O (patch4)
      |
      O (patch3)
      |                   series
      O'(patch2)          + patch1
      |                   + patch2'
      O (patch1)          + patch3
      |                   > patch4
      O (v2.x)
     / 
   O     O
   |
   O

                                                                                                            37

北京群英汇信息技术有限公司      Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                             http://www.ossxp.com




 $ hg qpop -a




                        series
                        - patch1
                        - patch2'
                        - patch3
                        - patch4
      O (v2.x)
     / 
   O     O
   |
   O

                                                                                                          38

北京群英汇信息技术有限公司    Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                                 http://www.ossxp.com




 $ hg pull upstream




                            series
                            - patch1
                            - patch2'
         O (v3.x)           - patch3
       /                   - patch4
      O (v2.x)
     /      
   O     O     O
   |           | 
   O           O O

                                                                                                              39

北京群英汇信息技术有限公司        Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                                  http://www.ossxp.com




 $ hg qpush




                             series
         O (patch1)          > patch1
         |                   - patch2'
         O (v3.x)            - patch3
       /                    - patch4
      O (v2.x)
     /      
   O     O     O
   |           | 
   O           O O

                                                                                                               40

北京群英汇信息技术有限公司         Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 的工作过程                                                                                   http://www.ossxp.com




 $ hg qpush -a
         O (patch4)
         |
         O (patch3)
         |
         O'(patch2')
         |                    series
         O (patch1)           + patch1
         |                    + patch2'
         O (v3.x)             + patch3
       /                     > patch4
      O (v2.x)
     /      
   O     O     O
   |           | 
   O           O O

                                                                                                                41

北京群英汇信息技术有限公司          Project Management inspired by open source practice —— Hacking CoSign
Hg/MQ 好坏说                                                                              http://www.ossxp.com




     优点
      简单
      Hg 的使用习惯和 SVN 接近
      MQ 库的工作区实际上就是 Quilt 补丁文件
      与上游新版本的合并是非混杂模式,易实现
     缺点
      补丁之间依赖关系不清,难以独立发布
      不适合团队协同开发
         两个版本库,部署复杂
         补丁的冲突!老天




                                                                                                         42

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
群英汇用 Git + Topgit 对定制进行版本控制                                                                     http://www.ossxp.com




     Topgit 主要为 Git 提供了增强的和更加便捷的分支管理

         +--------------------O(v3.x)---------                           master
       /                         
   ---O(v2.x)                     
       ````                      
              +--O--------------X-----------                           t/hack1
            +---O------O-+------O-X--+-------                           t/hack2
            +--O------O-------------X--------                          t/hack3
                                         
                               +--O--------Y----                         t/hack4




    附加的管理文件 :      .topmsg, .topdeps
    附加的管理分支 :      top-bases/*

                                                                                                                  43

北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign
Git + Topgit 的好坏说                                                                        http://www.ossxp.com




     优点:
         每个 hack 一个分支(功能分支)
         显式的依赖关系:可通过 .topdeps 设置多个依赖
            缺省依赖 master (当前工作分支)
            便于独立的 hack (功能)补丁导出
         适合团队协同开发
     缺点:
         Git 具有独特的使用习惯, SVN 用户需要更多时间的学习




                                                                                                           44

北京群英汇信息技术有限公司     Project Management inspired by open source practice —— Hacking CoSign
Git + Topgit 演示 (1)                                                                                http://www.ossxp.com




       查看 topgit 分支
 $ tg summary
   r     t/auth_log_for_fail2ban                            [PATCH] t/auth_log_for_fail2ban
   r     t/autotools_for_setup                              [PATCH] t/autotools_for_setup
   r     t/bugfix_cosign_httponly_quirk                     [PATCH] t/bugfix_cosign_httponly_quirk
   r     t/bugfix_no_retry_report                           [PATCH] t/bugfix_no_retry_report
   r     t/custom_cosign_path                               [PATCH] t/custom_cosign_path
   r     t/factor_admin                                     [PATCH] t/factor_admin
   r     t/factor_invite                                    [PATCH] t/factor_invite
   r     t/factor_ldap                                      [PATCH] t/factor_ldap
   r     t/include_macro_for_templates                      [PATCH] t/include_macro_for_templates
   r     t/javascript                                       [PATCH] t/javascript
   r     t/message_localize                                 [PATCH] t/message_localize
   r     t/message_translation                              [PATCH] t/message_translation
   r     t/multi_language                                   [PATCH] t/multi_language
   r     t/new_factor_with_flag_3                           [PATCH] t/new_factor_with_flag_3
   r     t/real_remote_user                                 [PATCH] t/real_remote_user
   r     t/services_template                                [PATCH] t/services_template
   r     t/static_htmls_to_templates                        [PATCH] t/static_htmls_to_templates
                                                                                                                     45
 ...
北京群英汇信息技术有限公司               Project Management inspired by open source practice —— Hacking CoSign
Git + Topgit 演示 (2)                                                                             http://www.ossxp.com




     将某个分支所有改动显示为补丁
 $ git co t/unittest
 Switched to branch 't/unittest'
 $ tg patch
 From: Jiang <jiangxin@ossxp.com>
 Subject: [PATCH] t/unittest

 Unit test framework.

 Signed-off-by: Jiang <jiangxin@ossxp.com>

 ---
  Makefile.in           |    6 +-
  cgi/lang.c            |   31 ++++-
  cgi/lang.h            |    2 +
  cgi/subfile.c         |   14 ++-
  tests/Makefile        | 112 +++++++++++++++++++
  tests/check_lang.c    | 296 +++++++++++++++++++++++++++++++++++++++++++++++++
  tests/check_subfile.c | 128 +++++++++++++++++++++
  7 files changed, 578 insertions(+), 11 deletions(-)

 diff --git a/Makefile.in b/Makefile.in
 ...
                                                                                                                  46

北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign
Git + Topgit 演示 (3)                                                                               http://www.ossxp.com




     导出全部功能分支为 Quilt 补丁队列
 $ tg export --all --quilt patches
 Exporting   t/auth_log_for_fail2ban
 Exporting   t/autotools_for_setup
 Exporting   t/bugfix_cosign_httponly_quirk
 Exporting   t/bugfix_no_retry_report
 Exporting   t/custom_cosign_path
 Exporting   t/factor_admin
 Exporting   t/factor_invite
 Exporting   t/factor_ldap
 Exporting   t/multi_language
 Exporting   t/include_macro_for_templates
 Exporting   t/javascript
 Exporting   t/message_localize
 ...
 $ ls -1R patches/
 patches/:
 series
 t

 patches/t:
 auth_log_for_fail2ban.diff
 autotools_for_setup.diff
                                                                                                                    47
 ...
北京群英汇信息技术有限公司              Project Management inspired by open source practice —— Hacking CoSign
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              48
Bug 迟早来相见                                                                               http://www.ossxp.com




     最近发现的一个 Bug (#165) ,记录在缺陷跟踪系统中
     重现方法:
          登录后,更换 IP 地址
          访问单点登录界面
          提示重新认证
          点击切换用户
          显示空白页面
           ( 段错误 )




北京群英汇信息技术有限公司    Project Management inspired by open source practice —— Hacking CoSign                          49
Debug 过程好辛苦                                                                            http://www.ossxp.com




北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign                          50
代码改动却一点点                                                                               http://www.ossxp.com




北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign                          51
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              52
假如之前就实施 代码评审 / 代码复查?                                                                   http://www.ossxp.com




     针对代码提交建立评审任务




北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign                          53
代码评审发现错误                                                                               http://www.ossxp.com




北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign                          54
结对编程是更好的复查?                                                                             http://www.ossxp.com




     结对编程来自敏捷软件方法的 XP
     代码复查是“小鸡”,结对编程是“猪”
         投入不同,产出必然不同
         事不关己,高高挂起:代码复查很容易流于形式
         结对的代码质量是最高的,评审是实时在进行
     如何选择?
         工作在同一个地点,选择结对
         开发者分处异地,选择代码复查
            如:大多数开源项目



北京群英汇信息技术有限公司    Project Management inspired by open source practice —— Hacking CoSign                          55
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              56
没有单元测试的教训                                                                                                     http://www.ossxp.com




     Bug !浏览器语种支持的数量若达到某个值,可能导致异常。
     gdb 调试,发现问题出现在新增的 get_accept_language 函数
         char **
         get_accept_language()


                预分配字串数组                  calloc(sizeof(char*),SIZE+1)

                                         getenv( "HTTP_ACCEPT_LANGUAGE" )
              获取环境变量
          HTTP_ACCEPT_LANGUAGES          eg: zh,zh-cn;q=0.8,en;q=0.5,zh-sg;q=0.3


                 以逗号分割
                                                  字串数组动态扩增                                      realloc(...)


                                                    填充至字串数组


                分割结束?                               字串规范化处理
                                    否
                    是
                返回字串数组                                                                                                          57

北京群英汇信息技术有限公司               Project Management inspired by open source practice —— Hacking CoSign
编写测试代码(非 xUnit 框架) # 1                                                                           http://www.ossxp.com




     代码中使用 _DEBUG 宏,进行条件编译
     getenv 被桩函数 mygetenv 替换
           从数组而非环境变量获取浏览器支持语种

     参见分支 t/multi_language 中 cgi/lang.c 代码
       #ifdef _DEBUG
       #define getenv mygetenv
       char *my_lang_buff[] = {
           "zz",
           "it,en_us,en,zh-sg,zh,zh-sg,zh-cn,zh,zh-tw,ar,it,zr1,zr2,zr3,zr4",
           ...   };


       char *mygetenv( char *ignore) {
           static int              loop = -1;
           int                     num = sizeof(my_lang_buff)/sizeof(*my_lang_buff);
           return ++loop < num ? my_lang_buff[loop] : NULL;
       }
       #endif                                                                                                      58

北京群英汇信息技术有限公司             Project Management inspired by open source practice —— Hacking CoSign
编写测试代码(非 xUnit 框架) # 2                                                                               http://www.ossxp.com




     条件编译的 main 函数,执行测试
       #ifdef _DEBUG
       int main()
       {
           char         **lang, **orig;
           while (lang = get_accept_language())
           {
                if (*lang == NULL)
                    break;
                orig = lang;
                while (*(lang++) != NULL);
                printf ("num: %d. ", lang - orig -1);
                lang = orig;
                while (*lang != NULL) {
                    printf("%s,", *lang);
                    lang++;
                }
                printf("n");
           }
       }
       #endif                                                                                                          59

北京群英汇信息技术有限公司                 Project Management inspired by open source practice —— Hacking CoSign
编写测试代码(非 xUnit 框架) # 3                                                                          http://www.ossxp.com




     Makefile
       lang: lang.c
         gcc -g3 -D_DEBUG 
           -D_LOCALEDIR="${LOCALEDIR}" 
           -D_TEMPLATE_LOCALEDIR="${COSIGNTMPLDIR}-local/locale" 
           -o $@ $^

     在 t/message_localize 分支下运行测试用例
       $   git co t/message_localize
       $   cd cgi
       $   make -f Makefile.in lang
       $   ./lang




                                                                                                                  60

北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign
编写测试代码(非 xUnit 框架) # 4                                                                           http://www.ossxp.com




 $ make -f Makefile.in lang
 gcc -g3 -D_DEBUG 
                  -D_LOCALEDIR="@localedir@" 
                  -D_TEMPLATE_LOCALEDIR="@prefix@/templates-local/locale" 
                  -o lang lang.c
 $ ./lang
 num: 1. zz,
 num: 1. zh,
 ...
 Environment : zz.
       locale : C.
 Environment : zh.
       locale : zh_CN.UTF-8.
 Environment : zh-tw.
       locale : zh_TW.UTF-8.
 Environment : zh-sg.
       locale : zh_CN.UTF-8.
 ...
 Environment : it,zh-sg,en_us,en,zh,zh-sg,zh-cn,zh,zh-tw,ar,it.
       locale : zh_CN.UTF-8.
                                                                                                                   61
 ...
北京群英汇信息技术有限公司             Project Management inspired by open source practice —— Hacking CoSign
为什么不使用 xUnit 单元测试框架呢?                                                                   http://www.ossxp.com




     带有个人风格的单元测试的缺点:
         没有使用断言。测试用例通过与否,不易验证
         不能自动化运行
         不能在敏捷实践中推广,难以实现测试先行
     解决方案:
         采用单元测试框架 xUnit
         对于 C 语言,选择 check 单元测试框架
     check 单元测试用例框架特点
         启动子进程运行测试用例,避免由于段错误导致测试用例运行
         无结果返回
         使用宏定义单元测试用例
         支持 autotools
         参见:
         http://blog.ossxp.com/2010/05/1211/
                                                                                                          62

北京群英汇信息技术有限公司    Project Management inspired by open source practice —— Hacking CoSign
编写测试代码( xUnit 框架) # 1                                                                         http://www.ossxp.com




     代码重构,以便提高代码的可测试性
         要撰写可测试性代码
            测试先行,能够确保代码的可测试性
         可以避免过度使用桩函数
     mygetenv 的替代
         原来的一个函数
            char ** get_accept_language()
         改用两个函数实现
            char ** get_accept_language()
            char ** _get_accept_language( char *env )
         测试针对 _get_accept_language 函数
            直接通过参数赋值
            不使用 getenv 获取环境变量


                                                                                                                63

北京群英汇信息技术有限公司          Project Management inspired by open source practice —— Hacking CoSign
编写测试代码( xUnit 框架) # 2                                                                              http://www.ossxp.com




     单元测试架构 (tests/check_lang.c)
       Suite *
       ossxp_suite (void)    {
           Suite *s = suite_create ("Language");
           TCase *tc_lang = tcase_create ("Lang");
           tcase_add_test (tc_lang, test_lang_one);
           tcase_add_test (tc_lang, test_lang_many);
           suite_add_tcase (s, tc_lang);
           return s;
       }


       int
       main (void) {
           int number_failed;
           Suite *s = ossxp_suite ();
           SRunner *sr = srunner_create (s);
           srunner_run_all (sr, CK_NORMAL);
           number_failed = srunner_ntests_failed (sr);
           srunner_free (sr);
           return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
       }                                                                                                             64

北京群英汇信息技术有限公司               Project Management inspired by open source practice —— Hacking CoSign
编写测试代码( xUnit 框架) # 3                                                                            http://www.ossxp.com




     单元测试用例示例 (tests/check_lang.c)
       START_TEST (test_lang_many)
       {
         char **lang;
         char *env;
         int i = 0;

         lang = _get_accept_language( "zz,zz ;q=3,zz ;q=2, zz     ;q=1," );
         fail_if ( get_lang_size(lang) != 1, "wrong size: %d", get_lang_size(lang));

         lang = _get_accept_language( "l1;q=1,l2;q=2,l2,l3" );
         fail_if ( get_lang_size(lang) != 3, "wrong size: %d", get_lang_size(lang));

         lang = _get_accept_language( "l1;q=1,l2;q=2,l2,l3,l4" );
         fail_if ( get_lang_size(lang) != 4, "wrong size: %d", get_lang_size(lang));

         env = malloc(200*5+10);
         strcpy(env, "l0");
         for (i=1; i< 200; i++)
         {
           sprintf(env, "%s,l%d", env, i);
           lang = _get_accept_language( env );
           fail_if ( get_lang_size(lang) != i+1,
                     "Lang %s.nWrong size: %d != %d", env, get_lang_size(lang), i);
         }
       }                                                                                                           65
       END_TEST
北京群英汇信息技术有限公司             Project Management inspired by open source practice —— Hacking CoSign
运行测试用例                                                                                          http://www.ossxp.com




 $ cd tests
 $ make
 cc     -c -o check_lang.o check_lang.c
 cc -o check_lang check_lang.o ../cgi/lang.o -lcheck
 cc     -c -o check_subfile.o check_subfile.c
 cc -o check_subfile check_subfile.o ../cgi/subfile.o ../cgi/lang.o -lcheck
 $ make check
 Running suite(s): Language
 100%: Checks: 5, Failures: 0, Errors: 0
 PASS: check_lang
 Running suite(s): Subfile
 100%: Checks: 2, Failures: 0, Errors: 0
 PASS: check_subfile
 ==================
 All 2 tests passed
 ==================

                                                                                                                  66

北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign
OVER?                                                                                  http://www.ossxp.com




     辛苦写的单元测试仅供一个人把玩?
     加入软件集成,即所为冒烟测试
     Next...




                                                                                                         67

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              68
持续集成                                                                                   http://www.ossxp.com




     重复性劳动,交给机器去做
     避免集成环境差异破坏产品
     能够让拥有部分代码的提交
     者及时发现集成错误
     测试用例在集成中自动运行
     及时的反馈
     交付构建给测试团队




                                                                                                         69

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
持续集成:自动构建                                                                              http://www.ossxp.com




     代码变更的自动构建,或手动构建




                                                                                                         70

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
持续集成:开发和测试的接口                                                                          http://www.ossxp.com




     构建结果,是开发的输出和测试的输入




                                                                                                         71

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
持续集成:测试用例在集成时自动执行                                                                      http://www.ossxp.com




     单元测试失败,导致的集成失败




                                                                                                         72

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
持续集成:测试用例在集成时自动执行                                                                      http://www.ossxp.com




     单元测试失败,导致的集成失败




                                                                                                         73

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              74
测试过程管理                                                                                   http://www.ossxp.com




     减少测试过程的随意性
         编写测试用例
         测试用例的维护
     整个测试生命周期管理
         测试计划
         测试需求
         测试用例
         测试报告



                                                                                                           75

北京群英汇信息技术有限公司     Project Management inspired by open source practice —— Hacking CoSign
测试用例维护                                                                                 http://www.ossxp.com




     测试套件和测试用例:让测试过程可重复




                                                                                                         76

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
测试报告                                                                                   http://www.ossxp.com




     测试用例覆盖度




                                                                                                         77

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
目 录                                                             http://www.ossxp.com




                                                 文档
                                 理
                             管
                         试                                                         on
                     测
                                                                                   ha the
                                                             求 管理                     ck s
                                                         需                              i n po
                                                                                           g t
                 持
                 续                                                                               版
                集                           CoSign                                               本
                成                          upstream                                              控
                                                                                                 制
                     单
                     单




                                                                                            踪
                         元
                         元




                                                                                  陷跟
                             测
                             测




                                                   代码评审                         缺
                                 试
                                 试




北京群英汇信息技术有限公司            Project Management inspired by open source practice —— Hacking CoSign                              78
文档                                                                                        http://www.ossxp.com




     关于文档的需求
         需要哪些文档?用户手册和管理员手册
         文档格式有几种? HTML, PDF
         写可维护的文档?纯文本写文档,进行版本控制
         文档的版本?版本要随着软件走
     可行的文档方案
         reST    : 《The Definitive Guide to Pylons 》
         markdown: 《The Git Community Book 》
         Docbook : 《Version Control with Subversion 》
     群英汇的方案
         reST + 自行开发的 Docbones
         特色:
            HTML 输出增加灯箱效果
            HTML 输出的样式表定制
            PDF 输出的中文和格式规范化                                                                                 79

北京群英汇信息技术有限公司      Project Management inspired by open source practice —— Hacking CoSign
文档源码( Docbones 管理的 Rakefile )                                                                      http://www.ossxp.com




     doc/user-guide/Rakefile
       require 'docbones'
       source_suffix = '.rst'
       ::Docbones.setup source_suffix


       PROJ.root= "."
       PROJ.name = "user-guide"
       PROJ.index = "user-guide"
       PROJ.output = "../output/user-guide"
       PROJ.css_path = "/stylesheet/lightbox/nf.lightbox.css,/stylesheet/ossxp/doc.css"
       PROJ.js_path =
       "/javascript/jquery/1.4.2.js,/javascript/lightbox/nf.lightbox.js,/javascript/ligh
       tbox/load-nf.lightbox.js"
       PROJ.pdf_style = "style/ossxp.style"


       task:default




                                                                                                                     80

北京群英汇信息技术有限公司               Project Management inspired by open source practice —— Hacking CoSign
文档源码(文本式的 WYSIWYG )                                                                              http://www.ossxp.com




     doc/user-guide/user-guide.rst
       ================
       单点登录用户手册
       ================

       : 作者 : 北京群英汇信息技术有限公司
       : 网址 : http://www.ossxp.com/
       : 版本 : 3.1.1-1
       : 日期 : |date|
       : 版权信息 : Creative Commons

       ..   contents:: 目录
       ..   sectnum::
       ..   header:: 单点登录用户手册
       ..   footer:: 北京群英汇信息技术有限公司
       ..   |date| date:: %Y-%m-%d %H:%M


       访问单点登录系统
       ================
       单点登录即 Single Sign-On ,多个 web 应用仅需登录一次,是群英汇众多 web 应用的唯一登录入口。
       ...

                                                                                                                   81

北京群英汇信息技术有限公司             Project Management inspired by open source practice —— Hacking CoSign
编译后的文档                                                                                 http://www.ossxp.com




     HTML 文档的 CSS 样式




                                                                                                         82

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
编译后的文档                                                                                 http://www.ossxp.com




     图片放大——灯箱效果




                                                                                                         83

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign
个人文档习惯                                                                                        http://www.ossxp.com




     你是如何记笔记的?
         blog ? wiki ? mindmap?
     FreeMind-MMX
         freemind.sf.net
         freemind-mmx.sf.net




                                                                                                                84

北京群英汇信息技术有限公司          Project Management inspired by open source practice —— Hacking CoSign
参考及版权说明                                                                                      http://www.ossxp.com




     我们对 CoSign 的改进,参见我们提交到 Github 上的代码库
         http://github.com/ossxp-com/cosign-ossxp-hacks
     您可以 ...
         可以任意散发本文档,但必须保持本文档的完整性
         可以下载我们改进的 CoSign
         可以在您的公司 / 团队部署我们改进的 CoSign
         可以向我们报告 Bug
         可以向我们提出需求
         可以向我们购买开源软件部署和技术支持等服务
     您不可以 ...
         不可以破坏开源软件的版权和游戏规则
         不可以 steal 我们的劳动成果

                                                                                                               85

北京群英汇信息技术有限公司         Project Management inspired by open source practice —— Hacking CoSign
联系我们                                                                                         http://www.ossxp.com




      北京群英汇信息技术有限公司
      网址: http://www.ossxp.com/

      Email: worldhello.net@gmail.com

          info@ossxp.com

      电话 : 010-51262007
                                                                                     马上联系我们
          13801210969




                                                                                                               86

北京群英汇信息技术有限公司         Project Management inspired by open source practice —— Hacking CoSign
http://www.ossxp.com




                                                                                                         87

北京群英汇信息技术有限公司   Project Management inspired by open source practice —— Hacking CoSign

More Related Content

Viewers also liked

Viewers also liked (6)

Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异
 
Trabajo
TrabajoTrabajo
Trabajo
 
RMP Infotec Business Presentation
RMP Infotec Business PresentationRMP Infotec Business Presentation
RMP Infotec Business Presentation
 
Collocations
CollocationsCollocations
Collocations
 
RMP Infotec Dubai India MLM Business
RMP Infotec Dubai India MLM BusinessRMP Infotec Dubai India MLM Business
RMP Infotec Dubai India MLM Business
 
song
songsong
song
 

Similar to Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程

大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計Andrew Wu
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践Na Lee
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
2020 gops-旷视城市大脑私有云平台实践-刘天伟
2020 gops-旷视城市大脑私有云平台实践-刘天伟2020 gops-旷视城市大脑私有云平台实践-刘天伟
2020 gops-旷视城市大脑私有云平台实践-刘天伟Tianwei Liu
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理frankwsj
 
Enterprise connect
Enterprise connectEnterprise connect
Enterprise connectthinkinlamp
 
110329 luopeng-sysopt-openkavass
110329 luopeng-sysopt-openkavass110329 luopeng-sysopt-openkavass
110329 luopeng-sysopt-openkavassZoom Quiet
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」Orange Tsai
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计mysqlops
 
中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 SaacChao Zhu
 
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术团队
 
蓝鲸平台培训_V1.0.pptx
蓝鲸平台培训_V1.0.pptx蓝鲸平台培训_V1.0.pptx
蓝鲸平台培训_V1.0.pptxssuser693b9a
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
阿里云 张旭 集群运维管理平台
阿里云 张旭 集群运维管理平台阿里云 张旭 集群运维管理平台
阿里云 张旭 集群运维管理平台guiyingshenxia
 
集群运维管理平台
集群运维管理平台集群运维管理平台
集群运维管理平台mysqlops
 
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖drewz lin
 
易仁Mes解决方案介绍 website
易仁Mes解决方案介绍 website易仁Mes解决方案介绍 website
易仁Mes解决方案介绍 websiteazhe
 
持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110Qiao Liang
 

Similar to Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程 (20)

大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
2020 gops-旷视城市大脑私有云平台实践-刘天伟
2020 gops-旷视城市大脑私有云平台实践-刘天伟2020 gops-旷视城市大脑私有云平台实践-刘天伟
2020 gops-旷视城市大脑私有云平台实践-刘天伟
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
 
Enterprise connect
Enterprise connectEnterprise connect
Enterprise connect
 
110329 luopeng-sysopt-openkavass
110329 luopeng-sysopt-openkavass110329 luopeng-sysopt-openkavass
110329 luopeng-sysopt-openkavass
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计
 
中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac
 
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控美团点评技术沙龙05 - Node.js业务应用实践和服务监控
美团点评技术沙龙05 - Node.js业务应用实践和服务监控
 
蓝鲸平台培训_V1.0.pptx
蓝鲸平台培训_V1.0.pptx蓝鲸平台培训_V1.0.pptx
蓝鲸平台培训_V1.0.pptx
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
阿里云 张旭 集群运维管理平台
阿里云 张旭 集群运维管理平台阿里云 张旭 集群运维管理平台
阿里云 张旭 集群运维管理平台
 
集群运维管理平台
集群运维管理平台集群运维管理平台
集群运维管理平台
 
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
 
易仁Mes解决方案介绍 website
易仁Mes解决方案介绍 website易仁Mes解决方案介绍 website
易仁Mes解决方案介绍 website
 
Xpp
XppXpp
Xpp
 
持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110持续交付最佳实践——百度技术沙龙201110
持续交付最佳实践——百度技术沙龙201110
 

Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程

  • 1. 开源软件定制中的 软件工程 Hacking CoSign... 2005-2010 北京群英汇信息技术有限公司 蒋 鑫 http://www.ossxp.com 版本号 : 0.1-5
  • 2. 北京群英汇信息技术有限公司 http://www.ossxp.com 我们是开源软件的产品和服务提供商 看出 LOGO 的奥秘? 奔跑的 角马  — 开源软件生生不息的脚步; 整体的 邮戳  — 品质的保证,服务快捷、方便; “ 汇”字的两层含义: “ 汇聚”— 群英汇聚之地; “ 汇递”— 开源软件汇递八方; 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 2
  • 3. 开源启示——个人 http://www.ossxp.com 程序员的需求:新技术,技巧,好的习惯,好的工作 研究开源软件,与技术高手为伍 参与开源软件,在软件过程的实践中养成习惯 立即行动 使用开源软件 参与开源社区:报告问题 , 参与讨论 贡献翻译 , 文档和代码 创立开源项目 3 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 4. 开源启示——企业 / 组织 http://www.ossxp.com 企业的需求:低成本,高效工作流,质量高 企业的开源经济模式 嵌入式开发 非核心业务开源: NVIDIA , IBM eclipse 开源软件整合: Redhat 定制和支持:群英汇 @ossxp.com 其他获益方式 使用开源软件,采购开源软件服务 借鉴开源项目的管理模式 4 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 5. 开源软件打造——群英汇研发协同管理平台 http://www.ossxp.com 7 1.知识管理 2.沟通系统 3.搜索引擎 4.版本控制 5.测试管理 6 4110101110110101101001 5 6.持续集成 100011011110101010111 001000100011010101010 110101001010101011011 7.缺陷跟踪 101010101001010101010 101010100101010010101 00010101010110000000 101010101100001001011 8.集中管理 1 2 3 5 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 6. 开源藏宝图 http://www.ossxp.com ProjectMgmt _,-> (Redmine) <-._ * Redmine * CoSign _/ _ Trac _/ _ Mantis VCS CI TestMgmt (SVN,pySvnMager -> (CruiseControl) -> (Testlink) * Subversion * GOsa Git ...) pySvnManager Git (topgit,gitosis) o o o / o o /| /| | /| /| * Testlink * CruiseControl / / / / / +----------------------------------------------------+ * MoinMoin * Nutch | Search Engine | MediaWiki Lucene +----------------------------------------------------+ | Knowledge Base Communication | * WordPress | (Moin+WordPress) (Mailman+IM?) | Typo +----------------------------------------------------+ | UserMgmt + Single Signon | * Mailman +----------------------------------------------------+ phpBB SMF 6 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 7. 开源软件定制的软件工程学 http://www.ossxp.com 文档 理 管 试 on 测 ha the 管理 ck s 需 求 in po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 元 元 跟踪 测 测 缺 陷 试 试 代码评审 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 7
  • 8. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 8
  • 9. 认识一下 CoSign http://www.ossxp.com 单点登录平台 9 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 10. 认识一下 CoSign http://www.ossxp.com 登录成功,显示服务列表 10 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 11. CoSign 的组成 http://www.ossxp.com APPS --> Filter (IIS)------+ APPS --> Filter (Java)-----+ APPS --> Filter (Apache)---+ ./ | ./ | ./ V login ---+ / +--> Daemon (tcp/6663) |--> CGI --| logout --+ +--> Factors -> AuthSource(DB, LDAP) 11 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 12. CoSign 的原理 http://www.ossxp.com 参见 CoSign 2.x 协议介绍 http://blog.ossxp.com/2010/03/824/ CoSign 3.x 介绍及与 CoSign 2.x 的协议比较 http://blog.ossxp.com/2010/03/831/ 12 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 13. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 13
  • 14. 定制的需求 http://www.ossxp.com 不说中国话,以及改说中国话的问题 14 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 15. 定制的需求 ( 续 ) http://www.ossxp.com 需要增加邀请码认证 需要客户 / 亲朋无须注册即可访问 增加邮件地址登录 既可以用 ID 登录,也可以邮件地址登录 双因子认证 来自于 OpenSesame 的需求 请求认证因子的或运算 来自于邮件列表审核的授权需求 其它痒痒的小问题 认证因子的本地化 登录对话框无关认证方式的隐藏 15 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 16. 需求管理 http://www.ossxp.com 使用项目管理工具来记录需求 16 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 17. 需求管理要点 http://www.ossxp.com 需求以功能的方式建立 设置里程碑,让团队看到目标 每个功能都归属于某个里程碑 一个里程碑不要包含太多功能。 快速迭代:小步快跑 程序员开发,提交说明要引用 到需求编号 See #123: 实现 xxx 的部分功 能 ... Fixes #123: 完成 xxx 功能的 全部实现 ... 17 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 18. 需求管理要点 ( 续 ) http://www.ossxp.com 甘特图:为功能需求设定预期的开发时间 18 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 19. 需求的变更历史 http://www.ossxp.com 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 19
  • 20. 看看 CoSign 最终的实现 http://www.ossxp.com 需要增加邀请码认证 只需知道邀请码,如 test123 增加邮件地址登录 如 jiangxin@moon.ossxp.com 双因子认证 其它应用自动登录:如 wiki 访问 : https://weblogin.moon.ossxp.com/opensesame/ 请求认证因子的或运算 邮件列表审核授权: http://list.moon.ossxp.com/mailman/admindb/dev 实现过程大揭密 即将拉开大幕 ... 20 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 21. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 21
  • 22. Let's hack... http://www.ossxp.com 在部署路径中,直接修改页面模板 hacking... 如何保存部署目录的现场修改? 使用版本控制系统 Hg, Git 等最适合用做 on the spot 版本控制 修改导出为 patch 文件 现场修改不等于定制开发 现场修改是不完整的代码修改 现场修改是临时性修改,会被新的部署覆盖 22 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 23. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 23
  • 24. 自有项目开发和二次开发区别 http://www.ossxp.com 开发模式的区别,导致版本控制上的区别 24 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 25. 定制开发中的版本控制 http://www.ossxp.com 使用 Subversion 的卖主分支管理定制开发 X 合并冲突(所有的 hack 混杂在一起的合并,痛苦有谁知?) | 58 O 导入上游新版本 v3.x AMD /branches/upstream/* | 57 O hack 55: M /trunk/src/zzz | ... | 4 O hack 02: A /trunk/include/bbb | 3 O hack 01: M /trunk/src/aaa | 2 O 建立卖主分支 cp /trunk /branches/upstream | 1 O 导入上游版本 v2.x A /trunk/* 25 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 26. 用 SVN 这么实现可以么? http://www.ossxp.com +--------------------O(v3.x)--------- upstream / ---O(v2.x)............................... /trunk ```` +--O--------------X----------- hack1 +---O------O-+------O-X---------- hack2 +--O------O------------X--------- hack3 +--O---Y-X------- hack4 你可以一试 但是 SVN 分支合并的难度,以及分支依赖关系难以解决,补丁导出 工具的缺乏,会让你放弃这个想法 26 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 27. Subversion 好坏说 http://www.ossxp.com 优点: 基于路径的授权,适合企业应用 在公司纷纷将代码开源的背景下,严格授权是否具有实际意义 代码评审,结对编程等实践,实际上源码已在公司内部开源 适合原生代码的版本控制 缺点: 不适合现场 hacking 的版本控制 受网络限制,分处异地团队的协同,以及移动办公受限 分支合并的成本高 不适合用做二次开发的版本控制 27 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 28. 什么样的版本控制,是定制开发需要的 呢? http://www.ossxp.com 每个 Hack 拥有一个独立的分支 每个分支的产出是一个补丁文件 不需要所有 Hack 都合并到一起的分支,因为徒增烦恼! 分支合并的成本高,不如补丁来得直接 补丁队列 (patch queue) 的管理 quilt 是最通用的补丁列表管理工具 quilt 的输入 源码目录 补丁文件:每个补丁即为对源码的一个 hack 补丁队列: series 文件,即补丁文件安装的先后次序 quilt 两种最主要的用法 quilt push quilt pop 28 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 29. Thank you, OpenSource http://www.ossxp.com 从来就不会只有唯一的包治百病的解决方案 每个解决方案都会在适于特定环境 选择开源,很多时候是在选型 换手机时,幸福的烦恼:太多的选择 29 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 30. Hg/MQ 为定制做版本控制:一人独享式 http://www.ossxp.com 实际上是两个 Hg 库完成的版本控制 版本库 1 版本库 2 O'(patch2 cont.) | series O (patch2) + patch1 | +-- > patch2 O (patch1) - patch3 | - patch4 O (v2.x) / O O | O 30 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 31. Hg/MQ 的工作过程 http://www.ossxp.com 初始状态 series - patch1 - patch2 - patch3 - patch4 O (v2.x) / O O | O 31 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 32. Hg/MQ 的工作过程 http://www.ossxp.com $ hg qpush series > patch1 - patch2 O (patch1) - patch3 | - patch4 O (v2.x) / O O | O 32 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 33. Hg/MQ 的工作过程 http://www.ossxp.com $ hg qpush series O (patch2) + patch1 | > patch2 O (patch1) - patch3 | - patch4 O (v2.x) / O O | O 33 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 34. Hg/MQ 的工作过程 http://www.ossxp.com modify O' modify... series O (patch2) + patch1 | > patch2 O (patch1) - patch3 | - patch4 O (v2.x) / O O | O 34 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 35. Hg/MQ 的工作过程 http://www.ossxp.com $ hg qref O' modify...-__ series O (patch2) __ + patch1 | --> patch2 O (patch1) - patch3 | - patch4 O (v2.x) / O O | O 35 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 36. Hg/MQ 的工作过程 http://www.ossxp.com $ hg qref series O'(patch2) + patch1 | > patch2' O (patch1) - patch3 | - patch4 O (v2.x) / O O | O 36 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 37. Hg/MQ 的工作过程 http://www.ossxp.com $ hg qpush -a O (patch4) | O (patch3) | series O'(patch2) + patch1 | + patch2' O (patch1) + patch3 | > patch4 O (v2.x) / O O | O 37 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 38. Hg/MQ 的工作过程 http://www.ossxp.com $ hg qpop -a series - patch1 - patch2' - patch3 - patch4 O (v2.x) / O O | O 38 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 39. Hg/MQ 的工作过程 http://www.ossxp.com $ hg pull upstream series - patch1 - patch2' O (v3.x) - patch3 / - patch4 O (v2.x) / O O O | | O O O 39 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 40. Hg/MQ 的工作过程 http://www.ossxp.com $ hg qpush series O (patch1) > patch1 | - patch2' O (v3.x) - patch3 / - patch4 O (v2.x) / O O O | | O O O 40 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 41. Hg/MQ 的工作过程 http://www.ossxp.com $ hg qpush -a O (patch4) | O (patch3) | O'(patch2') | series O (patch1) + patch1 | + patch2' O (v3.x) + patch3 / > patch4 O (v2.x) / O O O | | O O O 41 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 42. Hg/MQ 好坏说 http://www.ossxp.com 优点 简单 Hg 的使用习惯和 SVN 接近 MQ 库的工作区实际上就是 Quilt 补丁文件 与上游新版本的合并是非混杂模式,易实现 缺点 补丁之间依赖关系不清,难以独立发布 不适合团队协同开发 两个版本库,部署复杂 补丁的冲突!老天 42 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 43. 群英汇用 Git + Topgit 对定制进行版本控制 http://www.ossxp.com Topgit 主要为 Git 提供了增强的和更加便捷的分支管理 +--------------------O(v3.x)--------- master / ---O(v2.x) ```` +--O--------------X----------- t/hack1 +---O------O-+------O-X--+------- t/hack2 +--O------O-------------X-------- t/hack3 +--O--------Y---- t/hack4 附加的管理文件 : .topmsg, .topdeps 附加的管理分支 : top-bases/* 43 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 44. Git + Topgit 的好坏说 http://www.ossxp.com 优点: 每个 hack 一个分支(功能分支) 显式的依赖关系:可通过 .topdeps 设置多个依赖 缺省依赖 master (当前工作分支) 便于独立的 hack (功能)补丁导出 适合团队协同开发 缺点: Git 具有独特的使用习惯, SVN 用户需要更多时间的学习 44 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 45. Git + Topgit 演示 (1) http://www.ossxp.com 查看 topgit 分支 $ tg summary r t/auth_log_for_fail2ban [PATCH] t/auth_log_for_fail2ban r t/autotools_for_setup [PATCH] t/autotools_for_setup r t/bugfix_cosign_httponly_quirk [PATCH] t/bugfix_cosign_httponly_quirk r t/bugfix_no_retry_report [PATCH] t/bugfix_no_retry_report r t/custom_cosign_path [PATCH] t/custom_cosign_path r t/factor_admin [PATCH] t/factor_admin r t/factor_invite [PATCH] t/factor_invite r t/factor_ldap [PATCH] t/factor_ldap r t/include_macro_for_templates [PATCH] t/include_macro_for_templates r t/javascript [PATCH] t/javascript r t/message_localize [PATCH] t/message_localize r t/message_translation [PATCH] t/message_translation r t/multi_language [PATCH] t/multi_language r t/new_factor_with_flag_3 [PATCH] t/new_factor_with_flag_3 r t/real_remote_user [PATCH] t/real_remote_user r t/services_template [PATCH] t/services_template r t/static_htmls_to_templates [PATCH] t/static_htmls_to_templates 45 ... 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 46. Git + Topgit 演示 (2) http://www.ossxp.com 将某个分支所有改动显示为补丁 $ git co t/unittest Switched to branch 't/unittest' $ tg patch From: Jiang <jiangxin@ossxp.com> Subject: [PATCH] t/unittest Unit test framework. Signed-off-by: Jiang <jiangxin@ossxp.com> --- Makefile.in | 6 +- cgi/lang.c | 31 ++++- cgi/lang.h | 2 + cgi/subfile.c | 14 ++- tests/Makefile | 112 +++++++++++++++++++ tests/check_lang.c | 296 +++++++++++++++++++++++++++++++++++++++++++++++++ tests/check_subfile.c | 128 +++++++++++++++++++++ 7 files changed, 578 insertions(+), 11 deletions(-) diff --git a/Makefile.in b/Makefile.in ... 46 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 47. Git + Topgit 演示 (3) http://www.ossxp.com 导出全部功能分支为 Quilt 补丁队列 $ tg export --all --quilt patches Exporting t/auth_log_for_fail2ban Exporting t/autotools_for_setup Exporting t/bugfix_cosign_httponly_quirk Exporting t/bugfix_no_retry_report Exporting t/custom_cosign_path Exporting t/factor_admin Exporting t/factor_invite Exporting t/factor_ldap Exporting t/multi_language Exporting t/include_macro_for_templates Exporting t/javascript Exporting t/message_localize ... $ ls -1R patches/ patches/: series t patches/t: auth_log_for_fail2ban.diff autotools_for_setup.diff 47 ... 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 48. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 48
  • 49. Bug 迟早来相见 http://www.ossxp.com 最近发现的一个 Bug (#165) ,记录在缺陷跟踪系统中 重现方法: 登录后,更换 IP 地址 访问单点登录界面 提示重新认证 点击切换用户 显示空白页面 ( 段错误 ) 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 49
  • 50. Debug 过程好辛苦 http://www.ossxp.com 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 50
  • 51. 代码改动却一点点 http://www.ossxp.com 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 51
  • 52. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 52
  • 53. 假如之前就实施 代码评审 / 代码复查? http://www.ossxp.com 针对代码提交建立评审任务 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 53
  • 54. 代码评审发现错误 http://www.ossxp.com 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 54
  • 55. 结对编程是更好的复查? http://www.ossxp.com 结对编程来自敏捷软件方法的 XP 代码复查是“小鸡”,结对编程是“猪” 投入不同,产出必然不同 事不关己,高高挂起:代码复查很容易流于形式 结对的代码质量是最高的,评审是实时在进行 如何选择? 工作在同一个地点,选择结对 开发者分处异地,选择代码复查 如:大多数开源项目 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 55
  • 56. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 56
  • 57. 没有单元测试的教训 http://www.ossxp.com Bug !浏览器语种支持的数量若达到某个值,可能导致异常。 gdb 调试,发现问题出现在新增的 get_accept_language 函数 char ** get_accept_language() 预分配字串数组 calloc(sizeof(char*),SIZE+1) getenv( "HTTP_ACCEPT_LANGUAGE" ) 获取环境变量 HTTP_ACCEPT_LANGUAGES eg: zh,zh-cn;q=0.8,en;q=0.5,zh-sg;q=0.3 以逗号分割 字串数组动态扩增 realloc(...) 填充至字串数组 分割结束? 字串规范化处理 否 是 返回字串数组 57 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 58. 编写测试代码(非 xUnit 框架) # 1 http://www.ossxp.com 代码中使用 _DEBUG 宏,进行条件编译 getenv 被桩函数 mygetenv 替换 从数组而非环境变量获取浏览器支持语种 参见分支 t/multi_language 中 cgi/lang.c 代码 #ifdef _DEBUG #define getenv mygetenv char *my_lang_buff[] = { "zz", "it,en_us,en,zh-sg,zh,zh-sg,zh-cn,zh,zh-tw,ar,it,zr1,zr2,zr3,zr4", ... }; char *mygetenv( char *ignore) { static int loop = -1; int num = sizeof(my_lang_buff)/sizeof(*my_lang_buff); return ++loop < num ? my_lang_buff[loop] : NULL; } #endif 58 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 59. 编写测试代码(非 xUnit 框架) # 2 http://www.ossxp.com 条件编译的 main 函数,执行测试 #ifdef _DEBUG int main() { char **lang, **orig; while (lang = get_accept_language()) { if (*lang == NULL) break; orig = lang; while (*(lang++) != NULL); printf ("num: %d. ", lang - orig -1); lang = orig; while (*lang != NULL) { printf("%s,", *lang); lang++; } printf("n"); } } #endif 59 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 60. 编写测试代码(非 xUnit 框架) # 3 http://www.ossxp.com Makefile lang: lang.c gcc -g3 -D_DEBUG -D_LOCALEDIR="${LOCALEDIR}" -D_TEMPLATE_LOCALEDIR="${COSIGNTMPLDIR}-local/locale" -o $@ $^ 在 t/message_localize 分支下运行测试用例 $ git co t/message_localize $ cd cgi $ make -f Makefile.in lang $ ./lang 60 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 61. 编写测试代码(非 xUnit 框架) # 4 http://www.ossxp.com $ make -f Makefile.in lang gcc -g3 -D_DEBUG -D_LOCALEDIR="@localedir@" -D_TEMPLATE_LOCALEDIR="@prefix@/templates-local/locale" -o lang lang.c $ ./lang num: 1. zz, num: 1. zh, ... Environment : zz. locale : C. Environment : zh. locale : zh_CN.UTF-8. Environment : zh-tw. locale : zh_TW.UTF-8. Environment : zh-sg. locale : zh_CN.UTF-8. ... Environment : it,zh-sg,en_us,en,zh,zh-sg,zh-cn,zh,zh-tw,ar,it. locale : zh_CN.UTF-8. 61 ... 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 62. 为什么不使用 xUnit 单元测试框架呢? http://www.ossxp.com 带有个人风格的单元测试的缺点: 没有使用断言。测试用例通过与否,不易验证 不能自动化运行 不能在敏捷实践中推广,难以实现测试先行 解决方案: 采用单元测试框架 xUnit 对于 C 语言,选择 check 单元测试框架 check 单元测试用例框架特点 启动子进程运行测试用例,避免由于段错误导致测试用例运行 无结果返回 使用宏定义单元测试用例 支持 autotools 参见: http://blog.ossxp.com/2010/05/1211/ 62 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 63. 编写测试代码( xUnit 框架) # 1 http://www.ossxp.com 代码重构,以便提高代码的可测试性 要撰写可测试性代码 测试先行,能够确保代码的可测试性 可以避免过度使用桩函数 mygetenv 的替代 原来的一个函数 char ** get_accept_language() 改用两个函数实现 char ** get_accept_language() char ** _get_accept_language( char *env ) 测试针对 _get_accept_language 函数 直接通过参数赋值 不使用 getenv 获取环境变量 63 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 64. 编写测试代码( xUnit 框架) # 2 http://www.ossxp.com 单元测试架构 (tests/check_lang.c) Suite * ossxp_suite (void) { Suite *s = suite_create ("Language"); TCase *tc_lang = tcase_create ("Lang"); tcase_add_test (tc_lang, test_lang_one); tcase_add_test (tc_lang, test_lang_many); suite_add_tcase (s, tc_lang); return s; } int main (void) { int number_failed; Suite *s = ossxp_suite (); SRunner *sr = srunner_create (s); srunner_run_all (sr, CK_NORMAL); number_failed = srunner_ntests_failed (sr); srunner_free (sr); return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; } 64 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 65. 编写测试代码( xUnit 框架) # 3 http://www.ossxp.com 单元测试用例示例 (tests/check_lang.c) START_TEST (test_lang_many) { char **lang; char *env; int i = 0; lang = _get_accept_language( "zz,zz ;q=3,zz ;q=2, zz ;q=1," ); fail_if ( get_lang_size(lang) != 1, "wrong size: %d", get_lang_size(lang)); lang = _get_accept_language( "l1;q=1,l2;q=2,l2,l3" ); fail_if ( get_lang_size(lang) != 3, "wrong size: %d", get_lang_size(lang)); lang = _get_accept_language( "l1;q=1,l2;q=2,l2,l3,l4" ); fail_if ( get_lang_size(lang) != 4, "wrong size: %d", get_lang_size(lang)); env = malloc(200*5+10); strcpy(env, "l0"); for (i=1; i< 200; i++) { sprintf(env, "%s,l%d", env, i); lang = _get_accept_language( env ); fail_if ( get_lang_size(lang) != i+1, "Lang %s.nWrong size: %d != %d", env, get_lang_size(lang), i); } } 65 END_TEST 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 66. 运行测试用例 http://www.ossxp.com $ cd tests $ make cc -c -o check_lang.o check_lang.c cc -o check_lang check_lang.o ../cgi/lang.o -lcheck cc -c -o check_subfile.o check_subfile.c cc -o check_subfile check_subfile.o ../cgi/subfile.o ../cgi/lang.o -lcheck $ make check Running suite(s): Language 100%: Checks: 5, Failures: 0, Errors: 0 PASS: check_lang Running suite(s): Subfile 100%: Checks: 2, Failures: 0, Errors: 0 PASS: check_subfile ================== All 2 tests passed ================== 66 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 67. OVER? http://www.ossxp.com 辛苦写的单元测试仅供一个人把玩? 加入软件集成,即所为冒烟测试 Next... 67 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 68. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 68
  • 69. 持续集成 http://www.ossxp.com 重复性劳动,交给机器去做 避免集成环境差异破坏产品 能够让拥有部分代码的提交 者及时发现集成错误 测试用例在集成中自动运行 及时的反馈 交付构建给测试团队 69 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 70. 持续集成:自动构建 http://www.ossxp.com 代码变更的自动构建,或手动构建 70 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 71. 持续集成:开发和测试的接口 http://www.ossxp.com 构建结果,是开发的输出和测试的输入 71 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 72. 持续集成:测试用例在集成时自动执行 http://www.ossxp.com 单元测试失败,导致的集成失败 72 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 73. 持续集成:测试用例在集成时自动执行 http://www.ossxp.com 单元测试失败,导致的集成失败 73 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 74. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 74
  • 75. 测试过程管理 http://www.ossxp.com 减少测试过程的随意性 编写测试用例 测试用例的维护 整个测试生命周期管理 测试计划 测试需求 测试用例 测试报告 75 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 76. 测试用例维护 http://www.ossxp.com 测试套件和测试用例:让测试过程可重复 76 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 77. 测试报告 http://www.ossxp.com 测试用例覆盖度 77 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 78. 目 录 http://www.ossxp.com 文档 理 管 试 on 测 ha the 求 管理 ck s 需 i n po g t 持 续 版 集 CoSign 本 成 upstream 控 制 单 单 踪 元 元 陷跟 测 测 代码评审 缺 试 试 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign 78
  • 79. 文档 http://www.ossxp.com 关于文档的需求 需要哪些文档?用户手册和管理员手册 文档格式有几种? HTML, PDF 写可维护的文档?纯文本写文档,进行版本控制 文档的版本?版本要随着软件走 可行的文档方案 reST : 《The Definitive Guide to Pylons 》 markdown: 《The Git Community Book 》 Docbook : 《Version Control with Subversion 》 群英汇的方案 reST + 自行开发的 Docbones 特色: HTML 输出增加灯箱效果 HTML 输出的样式表定制 PDF 输出的中文和格式规范化 79 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 80. 文档源码( Docbones 管理的 Rakefile ) http://www.ossxp.com doc/user-guide/Rakefile require 'docbones' source_suffix = '.rst' ::Docbones.setup source_suffix PROJ.root= "." PROJ.name = "user-guide" PROJ.index = "user-guide" PROJ.output = "../output/user-guide" PROJ.css_path = "/stylesheet/lightbox/nf.lightbox.css,/stylesheet/ossxp/doc.css" PROJ.js_path = "/javascript/jquery/1.4.2.js,/javascript/lightbox/nf.lightbox.js,/javascript/ligh tbox/load-nf.lightbox.js" PROJ.pdf_style = "style/ossxp.style" task:default 80 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 81. 文档源码(文本式的 WYSIWYG ) http://www.ossxp.com doc/user-guide/user-guide.rst ================ 单点登录用户手册 ================ : 作者 : 北京群英汇信息技术有限公司 : 网址 : http://www.ossxp.com/ : 版本 : 3.1.1-1 : 日期 : |date| : 版权信息 : Creative Commons .. contents:: 目录 .. sectnum:: .. header:: 单点登录用户手册 .. footer:: 北京群英汇信息技术有限公司 .. |date| date:: %Y-%m-%d %H:%M 访问单点登录系统 ================ 单点登录即 Single Sign-On ,多个 web 应用仅需登录一次,是群英汇众多 web 应用的唯一登录入口。 ... 81 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 82. 编译后的文档 http://www.ossxp.com HTML 文档的 CSS 样式 82 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 83. 编译后的文档 http://www.ossxp.com 图片放大——灯箱效果 83 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 84. 个人文档习惯 http://www.ossxp.com 你是如何记笔记的? blog ? wiki ? mindmap? FreeMind-MMX freemind.sf.net freemind-mmx.sf.net 84 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 85. 参考及版权说明 http://www.ossxp.com 我们对 CoSign 的改进,参见我们提交到 Github 上的代码库 http://github.com/ossxp-com/cosign-ossxp-hacks 您可以 ... 可以任意散发本文档,但必须保持本文档的完整性 可以下载我们改进的 CoSign 可以在您的公司 / 团队部署我们改进的 CoSign 可以向我们报告 Bug 可以向我们提出需求 可以向我们购买开源软件部署和技术支持等服务 您不可以 ... 不可以破坏开源软件的版权和游戏规则 不可以 steal 我们的劳动成果 85 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 86. 联系我们 http://www.ossxp.com 北京群英汇信息技术有限公司 网址: http://www.ossxp.com/ Email: worldhello.net@gmail.com     info@ossxp.com 电话 : 010-51262007 马上联系我们     13801210969 86 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign
  • 87. http://www.ossxp.com 87 北京群英汇信息技术有限公司 Project Management inspired by open source practice —— Hacking CoSign