前面介绍了创业型软件公司的工作模式,这里详细介绍下如何实施,第一步是先要搭建环境,有了环境才能开展工作。

整个软件项目分为四个环境 开发本地环境、开发环境、测试环境、IDC环境。和传统C++开发不一样的模式是多了第一个开发本地环境。这是为什么呢,因为目前大部分开发人员还是比较熟悉windows下开发。对于mac和linux下直接使用软件并且开发的中国开发者还是少之又少,这套架构就这个现状做出来的。如下是环境搭建架构图:

agile_pic3

 

从环境来说:

一、开发本地环境、开发集成服务器搭建。 前端开发者、后台开发者。

前端开发用的最多的是photoshop和dreamweaver。在做psd之前大部分是不会协同开发的,只有整个文件传递过来过去。html切割的时候可能就会多个人协同开发了。这个时候需要一个集中ftp服务器、svn服务器。svn服务器用于保存版本代码库,用于保存历史修改的版本和开发人员协同。ftp服务器适用于及时修改时保存上传到预览服务器进行预览。看到这里有人也许会问,我直接合并svn和ftp不行吗?其实有这样的问题,如果直接提交svn,后台开发人员就会从svn看到。本来是前端的集成协同开发预览,结果影响到后台容易引起版本混乱。

后台开发怎么搭建环境?用eclipse在本地环境搭建开发环境,通过tomcat插件或者jetty启动调试class、jsp。之前看过很多公司都通过打成war包发布到集成环境再调试。集成环境大家都去集成容易引起版本混乱。即使不发布到集成环境,在本地就算修改个小的class文件也要重启war包有点浪费时间。最好就是利用tomcat的热部署,修改小功能直接生效。现在我们就是这样做的,用maven管理jar包依赖,ant本地打包、拷贝包,用eclipse的tomcat插件热部署快速开发。等到所有功能开发好了。把分支版本发布到开发环境进行集成测试。

开发环境涉及的软件有:nexus 、maven、tomcat服务器、mysql、ftp、jenkins、svn、jira、fisheye、eclipse、dreamweaver、photoshop、nginx。

软件的作用:
nexus作为集中仓库管理,因为每个工程如果都有一堆jar包,很难管理。加上svn上传、分支、合并耗费网络带宽、空间。如果有个地方把这些浪费空间的jar集中管理起来,所有工程合用岂不是很好。
maven是软件生命周期、依赖管理,有了集中管理jar包,就需要有个东西把jar包仓库和工程连接起来。
tomcat服务器是本地开发使用和集中测试服务器。
mysql就没必要每个开发机器都装一个了,放在一个开发环境就可以。
ftp作为前端开发上传文件使用。
jenkins是持续集成,开发和前端都把代码弄好,怎么融合集成在一起测试呢,总需要有个人来把所有的文件合并在一起吧?这个软件就起到这个角色,把所有文件集成、编译、打包、发布到tomcat服务器。如下图:

test

svn代码版本管理,大家都知道协同作用。
jira用于需求、bug等管理。
fisheye用于代码统计、审核等。
eclipse、dreamweaver、photoshop不用说啦。
nginx主要用于做虚拟主机和静态资源管理。因为我们可能同时开发多个网站,nginx可以根据不同的域名转发到不同的web服务器。

二、测试服务器。开发、测试。

开发集成测试环境通过后,这个就可以转测试了。通过持续集成,测试部署好环境就开始测试。测试环境同样依赖于集中仓库、maven、持续集成等软件。也就是集成测试环境、开发集成环境、开发本地环境都是用的一套jar包,是不是很cool。如果测试不通过,就要转回开发,开发好再转测试。怎么保证开发的质量和测试的质量,还有大家的协作性,这个过程涉及到软件工程和绩效考核,后面再说。测试通过一些测试,测试通过后就可以发布到外网了。这个时候需要提供发布列表、操作步骤、数据库操作脚本给到运维审核,审核通过后才能发布。

怎么发布到外网IDC呢?运维可以根据发布列表去操作,开发和前端一起等着熬夜啊熬夜。没有效率!这里提出了一个增量发布版本的方式,通过发布列表,我们的发布程序会自动检测到发布的文件和发布的机器,发布到对应的服务器。如果发布失败了还可以回滚文件,基本上是一键操作。未来还会把服务器重启、日志输出等集成起来。

三、IDC服务器。

外网的真实服务器,后台和前台。大家能够访问到的网站服务器。业务人员在版本发布后查看。整个流程就做好了。大家在每一次版本开发完了,可以很好的协同、开发、测试、发布。

扩展话题:
1、photoshop能否和html互转并且有版本管理功能,这个做好是个革命性的标志。
2、css、js等静态文件是否也能够纳入自动依赖管理里。这样不用我们发布一个页面文件时发现还有些依赖的js没有发布。

原创文章,转载请注明: 转载自LANCEYAN.COM

本文链接地址: JAVA敏捷开发环境搭建

前端

    css架构
    js架构
    js例子开发
    css规范
    js规范
    交互设计

java

    java开发规范
    jeeframework框架
    eclpse工具使用
    dal访问层
    cache层 memcached等
    quartz封装
    eclipse rcp开发
    web服务器 tomcat jetty
    jvm 参数调整 jconsole
    rss封装
    日志系统
    线程池
    socket网络

python

云计算
hadoop
hdfs
hbase

爬虫

搜索引擎

    分词
    lucene
    solr
    语义
    分布式搜索

windows

    vc
    vb

linux

    nfs服务
    sftp
    shell脚本
    nginx
    apache
    squid、vanish、haproxy、keepalived

监控

    catic
    nagios
    zabbix
    tanglia

算法

    simhash
    paxos

数据挖掘 可视化

推荐引擎

架构 其他架构

    资源调度
    配置中心
    消息中心

图像识别

虚拟机

企业管理

项目管理

敏捷

浏览器内核

持续集成 ant、ivy、maven

存储 硬件

数据库 mysql mongodb oracle

代码仓库 svn、git

seo

移动 andriod ios

原创文章,转载请注明: 转载自LANCEYAN.COM

本文链接地址: 整理了一个目录,督促自己写博客

      在创业开始时,也许有一个点子,经过研究调查有市场可行性就开始召集人员开始创业。这个时候一般都是单打独斗,一两个人负责所有的事情,包括产品设计、交互原型设计、网页美工切割、程序开发、功能测试。这个时候基本不用合作,采用独立开发模式,自己搞定保存就可以了。不过也有风险就是硬盘坏了怎么办呢,要知道硬盘是最脆弱的东西了,我一般的话会定期备份硬盘的东西。

      如果发现创业模式可行,需要赶时间抢市场,一两个人完成不了很多任务,就需要更多专业的人加入才能做出一个交互很好、页面美观、功能好用的产品。这个时候一般的话应该有产品经理、美工设计、程序开发、测试、运维。但是这些角色不是说一定要安排这么多岗位的人,需要根据公司具体自身情况来设定。

    有了点市场机会,时间才是最重要的。如果按照传统的计划型开发模式就不太适合了,敏捷开发还算比较相像。不一定说非要采用什么开发模式,这个也要根据自己的公司来决定。我们的模式应该是像中国的社会主义社会一样是基于敏捷的XX公司的开发模式。

      好了,岗位都有了,咱们怎么分工合作呢?这时,因为是根据点子来演化产品,很多东西都是不确定的,不能定一个大的一成不变的长时间计划和需求。毕竟这个时候要求需求不变也是不可能的,我们本身自己就充当了产品经理的角色。不只要想市场和老板的需求,还要产品本身和功能实现的需求,逐步把一个模糊的东西变成可以实际操作的产品原型,再形成最终产品。结合敏捷开发的特点,以人为本,把一个大的需求分成小需求分给适合的人来完成。上面所说的那些角色不一定每个岗位都需要一个具体的人,也可以是一个人承担一个角色,或者多个人承担一个角色。比如我们公司暂时就没有产品经理、测试、运维,程序开发负责开发、测试、运维,产品设计所有人都要参与。总体产品设计由一个人来把关和跟踪,细分到每一个产品都要对自己的产品负责分析和跟进。相当于贯彻了一句话,好像来自于阿里巴巴的一个产品写的一本书《人人都是产品经理》。如果自己对自己的产品都不清楚、玩不转、操作不了,谈什么让用户喜欢呢?不管美工、研发、测试、运维,都需要对产品有很好的理解。如果可以的话,不只是要理解自己做的一小块需求的产品,还应该了解更多其他同事的产品。作为产品总体把关的人一般是技术总监需要对每一个产品都很熟悉,这样才能跟进和设计讨论。所以研发、美工、测试、运维不管做什么工作,都需要站在一定高度思考问题,既然创业就需要以创业的角度思考,这样对自己的职业发展有帮助,也可以做好产品。

      在根据一个大需求技术总监和大家讨论,把模糊的东西逐步清晰化得到一个比较明确的做法后分到合适的人上。这样大家各自领导自己的需求开始分析具体实现,得到一个大概的思路后再和技术总监讨论确定最终具体实现。关于美工总体需求分析可以参与,这样便于了解整个需求,还是那句话了解了才能设计出好看好用的产品界面。细节的需求和技术实现就让研发来想和确定。在研发确定好了实现方案后,和美工进行讨论界面的实现方案,这个时候美工就清楚了小需求的实现功能和界面方案。然后美工设计界面,有时间可以多弄几个方案,开始可以在草图用笔画,也要沟通、讨论、确定。最后选择一个用户界面,研发开始开发程序、美工切割页面。如果美工的模板和规范基本都有确定了,那工作可能就不是太紧张,所以可以应对几个开发的需求。这个根据具体的情况确定美工的人数。

      研发开始可以自己弄页面,先把动态的标签确定好了,后面根据美工切割的页面套入。然后研发后台逻辑,一般都是从前台到后台开发甚至db开发都需要懂点,这样才能保证高效开发。如果横向切分,一些人研发service、一些人研发dao,一些研发jsp会增加不必要的沟通浪费时间。如果后面项目庞大了,还是建议应该增加一个专业的前端js开发和后台DBA。研发开发好自己的业务代码对功能进行测试,测试ok技术总监确认就等集成连调。这个时候的开发都是在自己的本机完成,不在测试环境测试是为了提供研发速度和效率。大家都知道如果是java开发,部署war不断reload会影响他人的工作,如果工程比较大启动也比较慢。如果在本机,只是修改类里面的东西和jsp等直接就可以看到效果。修改类签名和增加类等需要重新部署。

      大家都开发好自己的模块后,集中在测试服务器集成测试。这里可以由指定人来打包部署,大家一起测试找问题,修改。关于前端一般是自己改好了原型界面,后面被嵌入了动态页面后就直接修改动态页面了。预览在集成服务器,这里可以把预览和svn服务器集成,前端美工提交jsp到svn后就生效,他也可以直接看到效果了。具体操作后面文章再介绍。最后测试没有问题,老板确认,发布外网服务器、部署db。这里也容易出错,如果发布者不是本人很容易漏掉东西,所以最好在发布时,如果改了除了程序以前的东西需要提供发布列表一并修改。

      再以后随着项目的庞大和人员的扩充就需要借助更多的模式和辅助工具来寻找更适合自己的方式了。比如页面发布工具(前端可以直接发布IDC)、持续集成(可以自动部署测试和IDC)等等。项目中最最重要的还是人,根据人来选择不同的工作模式,就像豆瓣CEO说的,什么语言工具技术都没关系,最重要的是人、团队。相信经过大家的磨合, 每一个都是超人(技能、沟通、合作)的团队就是这么诞生的。

原创文章,转载请注明: 转载自LANCEYAN.COM

本文链接地址: 谈谈创业公司技术的工作模式