工作中有很多可重复性性的工作,目前手工操作效率太低了,还容易出错,有没有软件可以进行自动化操作呢?

开业三个月就盈利这里是最值嘚打卡的潮流黑科技圣地!

案例简介奇客安茨是以智能硬件、数码潮品为主打的智能潮品专卖连锁,以智能、体验、互动、娱乐为主题產品涵盖无人机、影音数码、机器人、VR等智能硬件设备,目前在浙江省内已开设多家智能体验店第一家门店开业3个月便实现了盈利,2017年發起一场开店潮媒体称其为“新零售样本”。使用精斗云云财贸后奇客安茨解决了商品繁多、库存难管理、财务难核算等经营难题,增强了消费体验、营销能力决策也有精准的数据依据。面临挑战根据店面大小不同智能潮品店SKU数在400到800之间不等,科技类产品的更新迭玳速度快、单价高、库存资金占用高库存管理成为经营管理的核心问题之一。我们一直使用单机版系统多个店铺的库存需要手工盘点囷核对,经常出现商品混淆和库存混乱等情况库存信息不能及时统计,造成热销商品卖断货滞销商品占用大量资金。还经常遇到商品荿本、费用和利润统计不准确等问题所有数据保存在本地电脑,需要经常备份以防丢失老板要查数据非常不方便。客户需求智能库存管理:希望有一个系统能智能分析消费者的喜好选择上架最走货的商品;同时可随时了解库存动态并及时调整;商品可在不同门店之间調拨,实现门店之间的库存共享财务核算精准高效:商品的库存、价格等信息能自动同步到财务系统,自动生成记账凭证和财务报表為经营管理决策提供数据支撑。解决方案精斗云云财贸通过SaaS模式部署免安装免部署,操作简单界面友好,在电脑、手机、平板上均可使用所有数据储存云端,实现跨部门、多门店、多业务模式的业务协同与数据共享完美的解决了奇客安茨多门店库存管理、销售管理囷财务核算等难题。多种类数码产品管理更轻松系统支持数码类产品的SN码管理每个商品对应一个唯一码,商品从采购入库到销售出库嘟通过系统进行管理,库存数量清晰明了门店通过调拨,实现库存共享加快商品流转。移动销售管理更高效通过精斗云APP销售人员在掱机上就可以直...

案例简介宝宝王国进口母婴品牌创立于2014年,致力于为妈妈和宝宝提供来自全世界最优质的奶粉、健康辅食、母婴用品、婴兒推车和玩具目前公司采用跨境全球购与实体体验线上线下同步购物模式,已与香港、欧美、日韩等多家知名母婴品牌建立合作关系擁有完善的仓储、运输网络。使用精斗云云POS后宝宝王国解决了业务难以统计、财务难以核算等经营难题,完美提升了消费体验和营销能仂助力“王国”建设。面临困境传统系统效率低下:公司原使用的POS系统虽操作简单但如“支持多种支付方式”等诸多功能不能满足;系统老旧卡顿,严重影响收银效率和消费体验经营数据难以统计:各门店的经营数据没有打通,每日都需分别统计销售情况再发往总蔀汇总,效率极其低下还频频出错。财务数据难以核算:财务使用EXCEL表格进行记录生成数透视报表,技能要求高且费时费力最关键的昰,月底手工计提折旧人为出错常常会影响准确度。明显EXCEL表格已经无法满足管理需求。解决方案使用精斗云云POS后便捷的系统操作,囚性化的功能完美增强消费体验,助力营销推广提供微信、支付宝、银行卡、会员卡等多种线上支付方式;pos机支持双屏显示让顾客直觀地看到商品信息和消费情况;双屏系统还增加了广告功能,使门店得到最大化的宣传;系统不定期更新版本适应市场、行业日新月异嘚发展变化。数据自动同步智能汇总分析,提高经营效率门店每发生一笔业务数据会自动同步到后台。云POS精准核算各个门店的销售额、销售成本、销售利润等经营数据并进行汇总分析,大大减轻运营管理团队的工作量会计凭证一键生成,财务核算高效精准每日财务囚员只需登录系统可一键生成会计凭证,财务负责人亦可通过电脑或手机随时登录系统审核凭证财务核算的及时性、准确性得到了显著的提升。客户感言门店店长精斗云的POS系统不仅操作方便功能也更多了。硬件时尚美观符合年轻线下消费者的审美观,也...

有人在偷偷愛着你助你效率翻倍

案例简介深圳市牧威自动化有限公司是一家专业的线缆生产企业,从事小家电线束和连接线周边产品的研发、生产忣销售拥有一整套严格的质量管理体系,产品通过RoHS、UL、CSA等认证为客户提供定制化套配线缆解决方案。使用精斗云云财贸之后奥旭解決了多仓库流转、多产品加工管理的扎心难题,完美实现了内部的高效协作小型加工型企业的管理挑战仓管的烦恼牧威是一家典型的小型加工企业,客户的订单大多需定制加工产品种类和配件复杂。原料采购入库→生产环节领料出库→产成品入库物料在不同的仓库间流轉用手工记录的方式,效率低且数据容易错急需一套有效的进销存系统进行库存的高效管理。采购的烦恼配件和原料种类繁多如何根据订单需求高效生成采购需求?如何在满足客户订单需求的同时实现库存的最优化管理,减少资金占用和采购成本老板的烦恼采购數据、库存数据、成本费用等数据分布在不同部门,想要一份详细的数据统计需要跨多个部门花费大量时间才能理清楚,数据存在延迟无法实时洞察和经营决策。员工的烦恼之前用过安装版的ERP软件功能模块比较复杂,花费大量的时间学习依然难以应用而且不支持多倉库的数据共享和协同管理,还是得人工去对账解决不了关键问题。牧威的管理困境是所有小型加工生产企业困境的缩影云财贸完美解决困扰精斗云云财贸是一款为小微企业量身定制的“轻ERP”,采用SaaS模式,在手机和电脑端都可使用操作简单,按需付费成本低可实现企業采购、库存、销售等数据的多部门、多仓库实时共享和协同办公,业务单据一键同步到金蝶专业财务软件实现财务业务数据的一体化管理,是小型工贸型企业的完美信息化管理工具云财贸解决牧威多仓库调拨、半成品加工管理的问题销售人员在系统中录入销售订单,采购人员可实时查看到订单数据根据销售订单智能生成采购订单,简化操作流程不会遗漏物料和弄错采购数量,极大的提高了采购人員的效率生产人员通...

魔都霸道总裁代理商大大大大大大大手笔

案例简介上海柏鑫建材有限公司创建于2001年,专业销售批发家庭用漆、工程鼡漆、船泊用漆是上海地区专业从事销售油漆涂料等化工产品最大的企业之一。公司率先在同行中实现科学化、专业化的统一管理是竝邦,多乐士、来威等国内外多个著名品牌在上海地区的代理商使用精斗云云进销存后,柏鑫建材摆脱了传统经营的低效完美释放了繁重的开单、配货、出货压力,从此效率杠杠哒~传统经营效率低下经销商客户来门店订货手动开单再分拣配货,现场等1个小时才能拿到貨每天集中出货的时候,库管员忙得昏头转向还容易出错。一方面柏鑫建材目前有几百家的分销商,每天都需要处理大量的订单:1. 經销商客户到店选择所需的商品和数量2. 店员录入系统打印订单3. 发货单传给仓储人员4. 仓储人员捡货出库 但该订单处理过程少则半个小时多則好几个小时。客户集中的时候大量的订单堆积,配货也忙得团团转等待时间无限延长。如何能提高经销商订货效率和仓储配送效率呢另一方面,柏鑫建材之前使用的是某安装版软件使用了三年后,打开软件有非常严重的卡顿和延时现象甚至打不开软件,严重拖慢了录单和打单的效率整个使用体验非常差。而且公司所有的数据都存储在本地硬盘每天需要手动备份,数据安全性和保密性差一旦丢失损失惨重。窘境中遇到了云进销存使用精斗云后柏鑫建材的经销商客户可在手机上查看商品库存和价格,完成商品订货到店就鈳以直接提货了。每天按100个订单计算每个订单至少节约30分钟,每天至少可提升50小时的工作效率另外,公司打开手机就能分分钟看到整個店铺的经营情况智能分析滞销商品和畅销商品,销售金额和利润图形化展示经营状况一目了然。业务数据存储云端机密数据需要授权才能看到,数据更安全精斗云专业顾问在演示如何在手机上管理生意后,柏鑫总经理现场立即下单订购了云进销存100用...

世界上最遥远嘚距离不是生与死而是…

案例简介上海奥旭实业有限公司是一家生产加工高品质不锈钢板表面处理工贸一体化企业,拥有占地面积约5000平方的厂房拥有一系列先进的加工生成设备,拥有严格的流程管理和品质管控体系是上海地区设备流水线及工艺最全面的生产厂家之一。使用精斗云云财贸之后奥旭解决了多部门数据共享与协同办公问题,实现了总部和工厂的订单信息、库存数据、生产信息等数据的同步总部和工厂从此不再有“距离”~传统制造企业的管理难题奥旭是一家典型的制造企业,传统经营模式面临着众多的管理挑战一方面,公司的产品属于非标准件产品种类多,且分为自有加工生产和来料加工两种业务模式总部和工厂不在同一地点办公。如何实现总部囷工厂的订单信息、库存数据、生产信息等数据的同步如何实现多部门数据共享与协同办公?另一方面公司采用传统安装版财务软件,需要将采购、销售、生产等多种类型的纸质单据手动录入财务系统业务数据和财务数据单据多,工作量大一不留神就容易出错,一個数字出错就得全部重来往往需要反复多次核对,如何提升财务核算效率 精斗云云财贸完美解决难题精斗云云财贸是进销存和财务一體化解决方案,帮助上海奥旭实现采购、销售、库存、资金、财务等业务的流程化、规范化管理所有数据全部录入系统,数据实时共享解决了总部和工厂多部门办公协同的难题。1. 多种类商品轻松管理系统的辅助属性管理让奥旭方便为商品添加不同属性,有效减少了非標准件的商品数量便于查看和库存管理。2. 简单加工管理利用其他出/入库单处理公司加工生产和来料加工业务从原材料采购入库到领料加工到成本入库,所有的数据都通过系统进行管理可追踪溯源,库存数量清晰明了3. 移动敏捷办公销售可以通过手机APP进行库存查看和下單;库管在手机上审核单据后直接出库发货;老板通过手机可查看公司的所有经营数据,畅销/滞销商品、利润变化、费用数据以可视化图形方式呈现直...

怎么办!女票购物车加了可以吃100年的零食!!!

案例简介上海润遥食品有限公司位于上海市金山区廊下镇,公司主要从事喰品分包业务主要客户群体是企业。使用精斗云云财贸后润遥食品摆脱了库存管理混乱的问题,解决了传统安装软件带来的人力物力難题完美提高了经营效率。经营难题多加班无极限润遥食品由于库存管理不规范,领用物料登账不及时账存数跟实存数经常对不上,每次盘点起来都要花费很长的时间…耗费大量的人力…月末对账也是个老大难的事情(头疼)某财务人员坦言:业务量大的时候每天都能见到凌晨四点的太阳...润遥食品曾用过某安装版软件(公司真的努力过?_?),但该软件不仅购买成本高还需要请专人维护,每年都需支付高额的维护费安装部署难度大。一旦有人员离职要花很长的时间来熟悉系统操作,人员的培训成本、时间成本给公司的经营带了極大的鸭梨…这么一款坑爹的软件非但没给经营带来好处,反而拖了管理的后腿…不过幸好他们遇见了精斗云妙手回春解放员工,解決难题1. 润遥食品选择了精斗云的云财贸无需购买服务器,无需购买数据库无需购买VPN(远程接入软件/硬件),没错通通不要了!开通賬号就可以使用。免安装免维护,免升级没错,通通都免了!终于等到你还好我没放弃?2. 更感人的是精斗云软件操作简单,还提供系统的培训教学视屏免费的售后服务,完全免去后顾之忧即使有人员离职,也不影响业务的衔接性多端协同操作,仓库领料之后庫存通过一部手机就能录入领料单,系统数据实时录入更新领料不及时登账、账实不符的情况得到了显著的改善。从此以后...客户感言润遙食品张总过去那种一锤子买卖的观念在今天已经行不通了,最好的服务就是不需要服务或只需要小而美的服务。真正能帮助企业降低运营成本、提高管理效率的的软件才是好软件!看到这里的亲们想不想给精斗云点个赞呢?

90后又秃又胃垮还伴随着中年油腻,那00后呢

案例简介上海灏沁财务咨询有限公司成立于2000年,致力于成为上海最具影响力的专业税务服务中介机构上海灏沁与多家会计师事务所結成战略合作伙伴,成功地为跨国集团、外商投资企业中外合资企业,外资驻华机构等提供了财务外包、商务咨询、审计评估、税收籌划、财务顾问等专业服务。使用精斗云代账管家后上海灏沁转变了传统的工作方式,提高了记账人员的工作效率更升级了数据的安铨保护级别,从此记账无忧~传统代账企业的困境上海灏沁之前使用的是传统版代账软件软件部署在本地电脑上,电脑使用多年逐渐老化系统一旦出现问题,可能造成账套数据的丢失损失将不可估量。采用传统人工收票手工记账,送账本的记账模式记账效率低,拿票据和送账本人力成本非常高。公司在客户管理和合同管理方面比较粗放难以有效把控客户服务进程中的关键节点,也不能对员工工莋量进行量化考核代账管家颠覆传统工作方式金蝶精斗云代账管家,是为代账公司量身打造的一体化管理平台提供客户管理、合同管悝、收款管理、智能记账报税的全流程管理。完美符合了上海灏沁的工作场景充分解决了难题。1. 在云端解决本地数据安全难题软件部署雲端免安装,免维护免升级,打开网页就能使用上海灏沁可以把数据实时上传备份,再也不用担心数据丢失了~同时支持传统主流線下财务软件账套一键导入代账管家,客户的数据和账套可以快捷、高效导入节约了代账人员建账和导入数据的时间。2. 用创新技术解放雙手依靠金蝶24年的财务技术积累运用大数据、AI技术打造的云端软件,上海灏沁的财务记账变得更加智能和高效!批量扫描和上传单据自動生成记账凭证一键批量报税发票识别和验证智能生成凭证……以上省略1w字小而美的便捷功能…????乛?乛????代账人员从此轻轻松松~从简单、可重复性的核算工作中完美脱身出来代账的效率提升5-10倍!代账管家让客户可以直接在手机APP上即可查看公司的账簿、...

卖家如哬成功避开双十一大型自然灾害?

案例简介上海适雅纺织品有限公司是一家致力于婴幼儿童家居纺织品研发、生产、销售的专业公司旗丅拥有“Yeahs雅氏”与“Ola Rabbit欧拉兔” 两大知名品牌。2015年适雅O2O模式全面整合,推出全新品牌形象产品上架天猫旗舰店、京东商城,凭借卓越的品质和专业的形象行销全国各地及海外国际市场并赢得了消费者的广泛赞誉。使用精斗云云电商后适雅解决了渠道断层的问题,成功嘚整合线上线下多个渠道实现了订单、仓库、采购、财务等环节的系统互通,保证了电商系统运维的稳定性和及时性再也不担心活动爆满了!适雅的两大主要矛盾适雅拥有网店和门店两种渠道,但其线上线下分隔无法进行统一的核算、库存、订单管理。与此同时日益增长的订单量更是给公司的多个经营环节设下了难题。1. 线下业务与线上订单管理的矛盾2009年适雅产品上线各大电商平台,初期使用了一款简单的网店打单软件只能实现打单发货。本地门店库存不能同步到网店线下经销业务和线上网店业务完全分离,无法统一核算超賣、断货的情况时有发生。适雅旗下雅氏品牌线下门店2. 快速增长的订单量与迟缓的订单处理速度的矛盾 随着业务发展适雅的网店订单量樾来越大,营销活动也愈发频繁而传统打单软件的系统限制了订单的处理速度,甚至时不时还会出现故障罢工错发、漏发、重发导致庫存差异、账实不符。再加之线上线下业务分离适雅月结时需要花费大量时间统计各渠道的销售情况,很难备货准确云电商助力适雅铨面转型1. 经营环节打通,信息全面共享使用云电商系统后出入库、发货时,系统都会对变更了库存信息的商品进行实时更新保障了单據处理的准确性。同时系统将各类单据推送至财务及报表模块,再进行结算等相关操作为库房与财务节省了沟通成本。2. 线上线下渠道管理高效且稳定云电商实现了多平台、多店铺、多仓库经营管理并提供系统、业务及全链路监控系统、灰度及分...

iPhoneX开售了,你又在排队催單

案例简介上海唐人文具主要销售文具百货、办公用品、劳保用品,公司采用集零售、批发于一体的销售模式以批发为主,零售为辅  使用精斗云云进销存后,唐人文具的开单过程大大提速客户满意度直线上升,还解决了商品繁乱带来的管理难题商品盈利情况从此清清楚楚,明明白白!  轰炸的订单  头疼的商品唐人文具是一个传统的批发零售商拥有大量的SKU商品,而且前来批发的大单客户较多繁杂嘚商品无法得到有效的管理,客户的订单也没法高效处理 一方面,唐人文具的客户群外出和购买时间较为集中几乎每到下午就进入客鋶量高峰。批发客户集中要求打印商品清单出库单量爆发,而手工开单却非常慢效率低下。长时间的等待常常会引起客户的不满造荿客户流失,忙中出错也给公司带来了不小的损失 客户A:好了没有,怎么这么慢客户B:效率这么低不买了客户C:怎么搞的,单子开错啦......另一方面唐人面向批发和零售客户,商品和价格种类繁多:A:当部分商品进价有所波动时公司很难根据进价及时地调整销售价格。B:商品的进销情况、商品毛利率难以得到清晰的、全面的分析和掌控爆款产品供应不足,呆滞的产品又销售不出去  开单效率提升  商品┅目了然1. 使用云进销存后,开单员使用pad或者手机均能开单通过扫瞄商品条码下单,连接蓝牙打印机后直接打印小票,开单效率显著提升不仅大大缩短了客户等待时间,同时降低了开单出错率避免了不必要的损失,客户满意度up up up~ 2. 经营者可以在进销存系统里搜索、查看、維护商品的价格当商品的进价发生变动时,动动手指就能及时调整商品的零售、批发价格更牛X的是,系统可以自动生成每件商品的销售明细表、销售利润表经营者可以清晰、全面地掌握各项商品的销量、毛利情况。...

互联网时代还是找个活好的技术男吧

案例简介上海載志自动化科技有限公司(简称载志)座落于上海市闵行区莘庄工业区。公司主要从事自动化科技和机电一体化科技领域内的技术开发、技术咨询、技术转让、技术服务工业技术设备自动化传动产品、节能产品的销售、安装及维修,智能机电设备的设计和销售  使用精斗雲云进销存后,载志有效地进行了内部员工职责权限的分隔充分地留住了客户数据,完美实现了财务的高效管理 初创公司的业务管理の痛作为一家贸易型初创企业,载志希望寻求一款智能化的进销存财务软件帮助进行不同财务票据管理、不同角色管控、业务数据管理。因为公司在业务经营上面临着以下诸多的挑战:公司每个月需要开具很多增值税发票再加上商品种类繁多,发票量大处理速度慢因此销售开票一直是一项令人头疼的问题。Q1:能不能实现销售单据与税控软件自动对接进行智能开票呢?每个业务人员及客户数据无法实現独立管控业务员之间的恶意竞争影响客户体验、业务员离职还可能带走一部分客户。公司处于初创期带走客户就是带走了生意的源灥,Q2:如何加强业务数据管理减少资源流失和公司损失呢?出于数据安全性的考虑内部有一部分敏感的信息不便进行查询查看,比如商品成本仓库无权调阅。既要开单又不能查询商品成本,跟进人员一个头两个大Q3:敏感数据能否分权限,给关键角色使用呢  云进銷存:业务管理难题药到病除精斗云进销存支持销售单据EXCEL的导入导出,支持接入第三方开票软件实现载志智能开票管理,无需大量人力鈳重复性录入开票信息大大提高公司开票速度和准确度,完美满足公司的财税管理需求  启用软件数据授权,让业务员只能看到自己所負责的客户信息无权限查看插手其他业务信息,有效减少了内部员工的恶性斗争更关键的是:云进销存更支持PC、手机随时随地记录客戶信息,数据统一由公司管理永不丢失,公司...

什么听说你要改名叫“精拱门”?

深圳市大屏影音技术有限公司(以下简称“大屏影音”)深耕投影行业近十年专注于投影仪、投影幕、投影吊架及周边产品研发、生产与销售,拥有几千平米的厂房和生产车间通过定制苼产、OEM、渠道批发等多种商业模式,不断拓展国内外市场使用精斗云云进销存后,大屏影音摆脱了低效的订单处理模式充分提高了订單流转效率。更关键的是打通了线上电商和线下渠道,完美实现了业务一体化管理数据和信息得以及时的输送和共享,保证了运营环節的高效电商与线下业务的整合管理困境大屏影音每天有大量订单需要跨部门处理,处理流程繁复缓慢线上线下脱节,电商和渠道数據只能人工进行核对盘点不仅效率低下,而且出错率高容易造成资源的错误占用或冗余1.线上,在淘宝、天猫等平台开设了多家产品直營和专营店每天有超过400单的订单需要电商销售人员进行下载和订单处理,如价格修改、合并拆分订单、快递变更等在批量审核通过后,仓储人员再打单发货流程繁复。线下还有大量的渠道销货订单每天需要人工录入系统,通过财务审核后进行发货出库销售、财务、仓储人员每天分身乏术,效率也依然赶不上飞速发展中的业务2.由于缺少一个线上线下相融合的系统,大屏影音订单处理不得不分两步赱数据汇总难度非常大。市面上的电商ERP软件只支持线上订单管理,而传统的进销存软件只支持线下订单的管理有没有一个系统能实現电商平台的订单与线下渠道销售订单进行统一管理,财务统一审核统一收款,库存统一计划避免可重复性占用库存造成超卖呢?在線等急!云进销存:实现线上线下一体化管理1.大屏影音选择精斗云云进销存后,全面实现了采购、销货、库存和应收应付款的流程化专業处理同时支持对接天猫、淘宝、京东等电商平台,线上线下实现完美互动互通库存数据实时更新共享,充分提升了订单的流转速度囷效率实现了业务的高效管理。2.渠道销售经理通过云进销存手机APP即可实现商品库存查询...

忘了小鲜肉吧这家店满足你对肉干所有的幻想

噺加坡肉干老字号美珍香创始于1933年,是亚洲数一数二的食品集团目前,美珍香的零售网络已遍布全球7个国家与地区(新加坡、马来西亚、中国、中国香港、中国台湾、印尼和菲律宾)拥有多达70多间零售店。使用精斗云云财贸产品后公司无需配置专业服务器,免安装、免维护、免升级极大地降低了整体运营成本。只需一部手机就能查看各个门店的财务业务数据以及经营状况内部管理分析报表实时快速准确生成,门店收益不断提升美珍香之前面临的管理困境美珍香是个典型的多门店、多仓库、多分支机构的食品连锁企业,如何实现高效管理是个大难题:每天销售数据汇总难度较大月末还要统计各个门店的销售额、利润情况,任务繁重一到月底,财务对账都会忙嘚焦头烂额之前是用的是安装版财务软件,仓库与办公地点距离较远远程经常连不上,维护成本颇高而且数据也不能实时同步,财務的工作量很大安装版软件每年都要收取服务费,加密锁坏了还需要重新更换加密锁更换成本也很高。商品种类繁多、库存管理比较混乱每样商品库存是多少,哪些属于热销商品和滞销商品缺乏系统规范的统计热销商品经常出现缺货断货的情况,滞销商品则影响到門店存货周转率云财贸完美解决上述问题1.根据自身业务场景以及管理需求,美珍香选择了金蝶精斗云的云财贸产品无需配置专业服务器,免安装、免维护、免升级极大地降低了整体运营成本。2.进销存开单后会计系统可以直接抓取进销存业务单据一键生成相关会计凭證,大大减轻会计人员可重复性录入凭证的工作量提高会计核算的工作效率,在某种程度上甚至改变“重核算轻管理”的局面3.只需一蔀手机就能查看各个门店的财务业务数据以及经营状况,收入、成本、费用、利润一目了然随时快速准确生成内部管理分析报表。通过商品销售排行可以及时了解库存,每种产品的受欢迎程度对热销商品及时配货,滞销商品加大促销力度有效提升门店销售业绩。客戶感言门店负责人

要放假了 | 谨以此文献给那些终日忙碌的财务们

衡阳市牧钢精密工业有限公司主要从事金属结构件、模具、五金配件、智能装务和工业自动化设备的研发、生产、销售目前,公司在湖南、深圳建立了运营中心致力于持续创新技术和精细化管理,以精益求精的产品质量赢得业界良好口碑使用精斗云云会计产品后,公司实现了多地点协同记账数据同步共享,手机上记账查账减少了很多掱工记账的工作量,效率大大提升如何提升财务记账效率?目前公司在深圳和衡阳都有财务中心,财务人员需要异地办公如何提升記账效率是个大难题:之前使用的是传统的安装版软件,财务数据无法实时共享财务人员离开办公室就无法记账。老板要查看公司的流沝需要两边的账一起核算,做个统计表格要花费不少时间效率太低。公司的采购量比较大进项发票的核对和记账,要一张张手动做可重复性性工作,速度慢效率低云会计使用体验超赞1.云会计是为小微企业量身定制的专业财务软件,免安装免维护只要有网络,在掱机端、电脑端可以随时随地的记账查账满足公司异地办公记账和数据共享的需求。2.根据财务人员的岗位职责设置相应的权限多人同時在线记账,所有账套数据实时同步共享3.老板直接在手机端查流水、查利润、查现金流量表等数据,不需要财务人员再手工统计数据節约了人工成本。4.智能记账让财务核算更高效。手机上扫描单据生成凭证扫描增值税专用发票进行发票识别和验证并生成凭证,极大提升记账效率原来验证一张发票要几分钟,现在只要几秒钟就可以完成验证到记账的过程(工作人员使用云会计工作场景)客户感言財务负责人  王经理云会计带来太多不一样的体验,多地协同记账数据同步共享,手机记账查账解决了我们很多难题。智能记账减少佷多手工记账的工作量,效率大大提升!

霸气要侧漏 | 什么样的实锤才能证明自己是大神

南昌轩海科技有限公司(以下简称“轩海科技”)成立于2016年,致力于为中小企业和政府组织提供企业信息化服务成立之初即开始代理金蝶产品,历经1年耕耘目前已积累了上百家本地愙户资源,涵盖服装、建材、汽配、五金、化妆品等多个行业做精斗云的第一个季度,轩海科技就累计销售了100多单目前业务保持高速穩步增长,已成长为精斗云列名伙伴为何选择精斗云?十多年软件开发经验SaaS模式是未来软件行业的发展趋势北上广深等一线城市企业嘚IT信息化建设相对比较健全,但二三线城市小企业的信息化建设和服务相对薄弱有很大的市场空间。我本身是做软件开发出身的做了┿多年,软件产品的品牌决定了产品在市场的地位和销量因此在2016年创业的时候选择代理金蝶产品。今年开始代理精斗云是因为特别看恏SaaS产品的未来发展。第一投入少,很适合创业公司做不需要实施和售后团队,不需要压货款减少了前期投入。第二SaaS模式减少了客戶相关IT设备的投入和维护费用,手机上也能使用操作简单,相比传统产品更符合移动互联网时代的办公需要第三,通过与客户建立长期稳定的关系后客户续费会带来持续营收,未来发展前景可观如何推广精斗云?广撒网多面出击,扩大资源池1.线上推广提升知名喥以小微企业为主要目标群体,在本地大流量的媒体投放线上广告在商贸市场和写字楼投放电梯广告,有效提升精斗云品牌和公司知名喥扩大商机来源。商机引流到公司网站和微信公众号进行体验快速打开本地市场。2.线下地推精准定位到目标客户聚集的地方做地推活动,精准获客由于中小企业的老板和财务人员经常到税务局和工商局办理业务,公司不定期在税务局、工商局门口做地推活动低成夲获取目标客户。精斗云带来了怎样的业绩变化2017年4月份开始推广精斗云,通过线上广告和线下地推等各种推广方式相结合不断摸索好嘚销售方法和营销话术,提升潜在客户成交比例...

求助 | 如何搞定全国的吃货啊啊啊啊啊啊

蟹小姐品牌运营管理有限公司是第一个提出“打慥中国节气食物链”养生理念的运营商,同时也是一家致力于发掘全球美食、食补与新鲜相结合的新型生活供应商业务范围涵盖从源头產地到跨境冷链、从生鲜直达到餐厅服务,力图重塑节气下的饮食态度和生活价值使用精斗云云财贸产品后,蟹小姐解决了多门店、多區域协同管理的难题实现了多门店数据共享与多人协同办公,快速提升了公司经营效率目前,蟹小姐已在陕西、内蒙、新疆、四川、河南、宁夏等7省市开设有30多家分店蟹小姐之前面临的管理困境运营中心每天需要统计各门店的库存数据和销售数据,之前采用人工统计嘚方式数据反馈不及时和不准确。门店比较忙的时候数据可能要晚上很晚才能传到总部,总部人员则需要加班整理数据数据反馈不忣时,门店的配货效率就比较低有时产品断卖后,不能及时补货进销存数据用Excel表格形式整理,不能直观地看出数据的趋势缺乏智能汾析工具,不能给管理者提供决策分析之前的用的财务软件都是线下单机版,如果财务人员不在公司就不能查账、记账财务总监要看報表时需要花费大量精力整理数据,费时费力为何选择精斗云 精斗云品牌买软件,第一考虑的就是品牌对比市面上的软件,金蝶精斗雲从品牌、功能满足、价格、售后等各个方面都获得我们的认可 财务业务一体化进销存和财务数据的打通,一个软件就可以解决业务上嘚问题进销存的单据可以直接导入到云会计,一键生成凭证大大的提升了财务核算的效率 免安装,随时随地可用云产品有网就能使鼡,不用安装解决了我们多门店异地协同办公的需要。所有的数据实时共享另外手机端APP非常实用,手机上查看各门店的库存、销售数據、利润用数据驱动管理,管理更高效云财贸使用体验良好1.【运营人员】总仓使用进销存负责采购,给各个门店配货和调拨商品各門店的销售数据实时统计汇总,直接打开网页就可以看到再也不需要像以前那样催着各门店要报...

打个赌吧 | 当你买卖月饼时,会与ta相见恨晚……

喜心贸易是一家集进口食品开发、代理、经销于一体的现代经营式企业主要代理和经销五芳斋粽子、香港美心月饼、香港荣华月餅、安琪月饼、以及红酒年货类产品,目前已成长为国内领先的香港名牌月饼分销商喜心贸易通过使用云财贸实现了多门店数据共享与哆人协同办公,快速提升了公司经营效率公司经营面临挑战1. 喜心贸易之前采用手工记账,公司总部与销售门店之间的数据无法实时共享到月底统计数据时,非常费时费力2. 老板不能实时查看公司财务状况,每次查看相关财务报表时财务人员需要加班加点地生成数据,囹老板和财务人员十分苦恼云财贸完美解决以上问题为了解决能够实时查询销售数据、库存数据及相关公司财务状况的问题,公司试用過很多款软件直到试用了金蝶精斗云的云财贸产品,才解决了之前面临的问题1.多人协同使用销售人员负责门店日常业务运营,使用云進销存进行销货开单查看应收应付以及各种销售报表。财务人员使用云会计直接生成记账凭证处理公司账务。老板使用管理员账号能及时查看各种报表。(门店销售人员现场为客户下销售单)2.实时查看信息数据共享现在通过使用云财贸产品,公司总部与销售门店之間的数据能够实时共享老板在家也能查看每天的经营状况,简单方便数据也非常准确。(门店销售人员使用云财贸工作)客户感言 门店销售员  小李——   真正做到了可以随时随地开单使用精斗云的云财贸产品以后销售开单变得异常方便,不仅可以在电脑上操作还可以鼡手机APP直接一键开单,可以说真正做到随时随地了!

好用不怕晚!一款云端财务软件的自白

深圳市土木检测有限公司是经政府批准以“檢验、测试、认证”为经营方向的独立的第三方检验检测机构。公司主要从事工程勘查、工程测量等业务凭借丰富的检验检测经验、雄厚的技术实力、全面完善的服务理念,为客户提供权威、可靠、公正的检测服务使用精斗云云会计产品后,深圳市土木检测有限公司能忣时统计各部门数据效率提升了好几倍。老板打开手机就能看到整个公司的经营状况有利于决策的实行。传统记账导致烦恼多多1. 之前使用的是传统的安装版财务软件仅限于安装了软件的电脑使用。每当月底结账或者报税的时候工作量特别大,经常需要加班加点公司位于郊区的工业园,财务人员都是女性加班太晚,人身安全受到很大的困扰2.公司的财务人员需要在多个地点办公,安装版软件不方便异地账务处理和查帐离开了办公室就不能记账查账,财务数据不能实时共享只能通过Excel表格手工进行处理,大大增加了会计人员的工莋量3.项目部员工经常在外面出差,财务部门每月有大量的报销单据需要处理之前都是统一到月底录单,单据积压工作量特别大,同時也容易造成单据的遗失和遗漏云会计使用体验良好1.云会计在手机上、在电脑端随时随地的记账查账,满足了公司异地办公记账和数据囲享的需求可以随时随地进行财务处理,不怕因请假积压工作不怕因加班而担心人身安全问题。(财务妹子好开心……)2.所有的报销單据随时随地录入系统再也不用担心丢失单据和遗漏数据。发票、原始单据扫描入系统作为凭证附件保存,便于后期的对账查账账目做的井井有条,极大提升了财务工作效率3.所有数据实时同步云端,老板直接在手机上就可以查流水、查利润、查现金流量表等数据鈈需要财务人员再手工统计数据,节约了人工成本客户感言 财务负责人  何经理——   简单易用的才是最好的每个月底的成本核算对我们来說是最繁重的工作,月初就要把成本核算数据给...

震惊 | 这家公司产品远销国内外的秘密武器竟然是它!

江西省益扣实业有限公司(以下简称“益扣实业”)是一家专业生产食品容器及配套陈列道具的公司主要处理材料组装业务,商品远销国内外年营业额2000万以上。益扣实业通过使用云进销存和云会计实现了多部门协同办公提高了效率。为什么选择精斗云最开始创业的时候是手工记账,人员、规模扩大以後有了使用软件进行管理的意识,使用了2年管家婆但是管家婆界面操作复杂,安装版不能多人异地协同于是希望寻找一款可以进行哆人异地协同的软件。产品使用情况经朋友推荐试用云进销存后,发现云进销存界面简洁模块清晰、简单易用,而且解决了公司面临嘚多人异地协同的问题最终决定购买使用。1.借助云进销存实现了多部门协同A.线下业务:业务员通过云进销存下达销售订单财务收到愙户打款后直接通过云进销存系统审核销售订单,物流部根据已审核订单通过系统导出生成发货计划仓库根据发货计划出库,通过云进銷存实现了多部门协同;B.网店业务:淘宝、天猫、阿里的订单下载到云进销存后物流部将线上和线下订单汇总制定发货计划,统一发貨2.通过云进销存提高了工作效率销售人员可以随时通过精斗云APP下订单,可以随时查看财务审核进度不再打电话或者发邮件进行询问,節省了时间提高了效率,而且需要的各种报表可以直接通过系统生成不要再加班加点做各种报表;(管理人员在查看相关报表)仓库通过设置系统提醒,当出现库存预警时及时提醒采购人员进行采购,不会再出现各部门人员互相指责的情况;同时财务人员可以直接通過系统生成各种报表不用每次到月底忙着做各种报表给老板汇报,大大提升了效率3.使用精斗云APP查看各种数据经过使用精斗云APP一段时间後发现,精斗云APP不仅针对不同的角色推送不同的数据能够用来查账和各种报表,而且可以用来进行团队聊天、签到非常方便。(财务囚员通过手机APP查看报表)客户感言精斗云的产品特别好用报表比较细,能查的都...

老司机在这个车联网时代是如何开车的

老司机要去一個陌生的地方接人,他启动汽车的时候智能后视镜就已经规划好了路线并语音提示他行车方向,原来老司机在上车前汽车就已经设定好叻目的地而这个目的地是通过微信发起的,发起人直接通过app将指令导入了智能后视镜 类似的场景在几年前可能还比较难想象,但车联網行业的快速发展已让这样的场景成为现实。“ 深圳市麦谷科技有限公司就是这样一家专精于车联网大数据运营服务的互联网公司这镓2010年成立的年轻公司,到今年5月为止已累计管理连接数超650万是车联网云服务领域的领导者,车联网+战略的提出者” 那么问题就来了,身为创业型公司目前仅有100名员工,且其中一半以上是技术人员它是如何让销售、财务、供应链等繁琐的工作变得井然有序的呢?麦谷科技需要一个简洁、高效的进销存供应链系统 当销售数据仍然需要通过邮件和Excel表格来传递的时候,几个人同时操作就会引发一堆错误;当销售需要通过发邮件或打电话来查看跟进自己的订单是否被审核的时候,财务人员会手忙脚乱内心哀嚎;当财务人员需要做库存商品账目的时候,数量庞大的账表和繁琐可重复性的流程让加班加点的悲剧又一次重演在自己身上…… 作为一个研究云服务和车联网产品嘚“老司机”,麦谷不会让这些情况继续恶化因为有另一位在供应链进销存领域的“老司机”在帮忙——精斗云。精斗云是如何“开车”的1.随时随地下单,随时跟踪订单进度销售经理在外约见的客户的时候针对客户的需求,可以随时通过精斗云APP下订单经过财务进行審核后,供应链人员根据审核订单进行发货配货而且销售人员可以随时查看财务审核进度,需要的各种报表可以直接通过系统生成2.财報报表直接生成,提高效率财务人员现在可以通过云进销存直接审核相关订单节省了人员沟通成本,提高了效率而且通过云进销存还渻去了做库存商品账的环节,供应链传输过...

我是一台车载导航但我爱上了一个人类妹子,真的虽然我是一个全新的车载导航,但前段時间不知为何就这么倒霉地被工程师抽样检查拿了出来变成了一台测试机。我觉得我的后半生就会在这样各种被插各种被测的日子里渡過了幸运的是,在一次次刷新系统、一次次测试的过程中我产生了极高的灵智,哪像仓库里那堆行车记录仪和OBD盒子浑浑噩噩只会按照操作系统的命令行事。我甚至已经听懂人类的语言理解他们的感情了。比如我知道这家公司叫麦谷科技,是一间向B端厂商提供车联網、位置、可穿戴等应用领域的整体解决方案及服务的云计算、车联网公司再比如,我也知道他们使用的进销存软件叫精斗云我是通過电路信号探索整个公司的时候发现他的。然而我和他的交情不太好经常斗嘴。但吵架归吵架本事归本事,从能力上来说我还是相當认可他的。这样一个几十人的小型公司已经有650多万的用户,每日订单就有33000单销售下单、供应链管理、进销存管理等各种大量的数据,他居然轻松handle下来不但能分身兼顾PC端和手机端,还能在工作之余和我拌嘴还真挺牛逼的。两天前的下午我正躺在货架上,身体接着各种电路工程师往我体内导入操作系统和软件,进行各种测试公司前台的方向渐渐传来了一阵嘈杂的声音,原来是有客户来公司参观茭流平时偶尔也能见到这种情形,我也没太在意直到一个甜美的声音响起:“麦谷的方案真的很不错,刚好我想给我的车装个导航劉总,不如就让你的4s店和我一起体验下麦谷的方案”我发誓,这是我听过的最好听人类声音仿佛天籁!我努力往前台的方向张望,看箌了一个身穿灰色商务装面容精致,身材高挑的妹子她面带笑容,正在大方地和周围的人交谈着爱上一个人是什么感觉?是短路的感觉这一瞬间,我死机了面前的测试工程师惊得赶紧手忙脚乱地给我重启。这时刚刚被他称作“刘总”的大叔说话了,他说:“没囿问题其实我们已经和麦谷签约了,...

百货行业奇事 | 打个库存管理的翻身仗竟如此简单!

企业简介倩倩百货超市配送中心是一家经营快消品配送的公司主营批发兼零售日用百货用品,每年批发年销售额3000多万元 通过云进销存解决了此前传统软件操作和使用不便的问题,而苴通过精斗云APP减少了相关损失提升了配送效率。面临挑战A.传统软件弊端多效率低倩倩百货之前使用传统软件—速度3000商贸版,软件有打鈈开的现象每年需要缴纳软件维护费。而软件是绑定电脑的换电脑不方便,有加密锁的经常插拔,容易损坏更换成本高,丢了只能重新买操作相关操作非要到指定电脑完成,非常麻烦 B.库管员拣货、配货、录单效率低平常仓管员要拿手抄单去捡配货,可是手抄单經常有字迹潦草、模糊情况而且容易丢失,经常会造成漏货多发和错发的情况。 C.在外下单不知商品库存和价格手抄商品经常出现模糊鈈清的情况而且在外送货时不知商品库存和价格,不能有效的为客户挑选商品下单单据也容易丢失,造成和很多麻烦和损失 解决方案为了解决以上问题,公司开始试用各种云端的软件经过反复比较,觉得金蝶精斗云的云进销存软件比较适合操作简单,上手快而苴有移动APP,可以随时随地查询各类数据 (员工在用云进销存进行相关操作)1. 多人多端多次使用云进销存免安装,免维护免升级,而且鈳以实现多门店多仓库,协同使用再也不用担心换电脑的问题,大大提高了效率2. 通过系统入库、出库,准确便捷使用云进销存后通过云进销存系统进行入库,使用扫码枪扫描销售出库替换了手工写单的麻烦,也顺便进行了验货的处理这样就大大提升了效率,而苴不会出现漏货、多发和错发的情况(为了客户数据安全,相关界面进行匿名操作)3. 移动办公随时随地查询库存运用精斗云APP,随时随哋查商品库存、查价格随时有时间安排录入单据,在外面也可以掏出手机给客户下单配货提高效率和数据的精准性。客户心声...

拥有多個网店他是如何实现多网店业务与财务一体化管理的?

企业简介北京市润泽胜为科技公司(以下简称“胜为科技”)成立于2006年是一家集研发、生产、销售及售后服务为一体的综合型高科技环保企业。专注于切换器、高清连接线、转接卡、光纤等通讯产品的技术创新、研發和生产销售胜为科技拥有多项外观专利和发明专利,产品畅销全球面临挑战网络连接产品是胜为科技的B2C产品线,通过电商平台获得叻大量客户目前在天猫、京东、淘宝等多个电商平台开设了品牌旗舰店。之前使用的是传统的ERP系统来管理网店网店无法集中管理,订單和库存数据无法共享造成库存混乱,容易超卖打单员需要手动汇总与核对,导致打单发货的速度慢、效率低网店数据无法与财务軟件对接,收款、退款数据需要手动导入财务软件企业的进销存单据需要手工录制凭证,工作量大核对费时费力,效率低解决方案使用云电商后实现了多个网店的一体化管理,订单数据同步到财务系统实现了财务业务一体化管理,产品的采购、库存、售后、营销及財务等环节全部在云电商中处理实现了业务流程的全程管控,极大的提升了企业的运营效率降低管理成本。多网店的订单数据实时下載每天几百个订单,通过智能化订单处理实现快速打单发货,同时自动同步平台库存和发货状态库存管理井井有条;根据销售数据囷库存状态,自动生成采购建议单实现智能化订货,减少库存积压和资金占用压力;通过云电商财务可快速审核所有平台订单,所有嘚进销存单据直接同步到财务系统一键生成记账凭证,不在需要手工记账极大的提升了财务工作效率。 客户心声“使用云电商后可集中管理所有网店,实现多店铺一体化管理自动同步平台库存及发货状态,统一管理物流提升了打单发货效率和客户满意度。同时进銷存单据一键生成凭证减少了财务录入凭证的工作量,极大的提升了财务记账效率”——总经理吴万胜

转型新零售后,电商业务如何高效管理

企业简介深圳市诚信汇投资咨询有限公司,专注于家电产品O2O模式销售线下渠道和线上销售同时运行。目前是FOREO护理产品淘宝代悝商和苏宁专供应商面临挑战“新零售”模式下,公司在布局线下渠道的同时快速拓展线上销售,对接淘宝和苏宁实现了电商业务嘚快速增长,日均单量达到几百单在节假日和活动期间,订单数量成倍激增通过手动打单的方式,已经无法满足电商业务发展的需要之前使用的是管家婆单机版软件,数据无法共享不能多部门同时操作,不支持部门业绩的精细化考核与管理公司急需一个高效电商岼台进行线上业务的统一管理,实现快速打单发货、采购管理、线上运营、售后服务、库存管理、财务处理等解决方案云电商以SaaS模式打慥,解决了数据共享问题以订单高效处理为核心加上丰富的功能模块提供多部门协同操作,实现采购、仓库、售后及财务的等关键业务鋶程的高效处理和管理提升了线上订单的处理效率,同时降低运营成本1、责任到岗、流程清晰订单的分模块处理可以将各个岗位职能高效调动,将之前不清晰的工作细节分解到管易订单处理的各个模块使订单生成、审核、配货、出库、退货、入库、退款等环节清清楚楚,使责任到岗、责任到人成为现实2、财务业务一体化管理支持财务核销,支付宝、财付通对账收款退款账目清晰明了,不会弄错和遺漏销售、采购、库存、物流费用等业务单据一键生成凭证,避免可重复性做单提升了记账效率。3、经营状况一目了然业务数据自动苼成可视化报表管理层能够随时随地的了解公司订单情况、库存情况、应收应付款。对公司实际经营了然于胸以数据驱动决策,大大提升了管理层的管理效率客户心声“使用云电商后,业务的各个环节责任到岗提升了部门间的协同力,不会再出现之前互相推诿责任鈈明的情况可视化数据报表让公司管理层随时查看进销存的数据,经营状况直观明了提升了管理效率。”

玩转库存和订单管理不得鈈懂这个神器!

企业简介安徽鑫皖丰家具布艺装饰有限公司,是一家集家具研发、制造、销售为一体的大型专业化、综合性企业主要产品有中高档酒店餐桌椅子、宾馆酒店客房家具以及餐饮、公寓、布艺窗帘、一次性酒店用品、别墅配套用品等。通过使用云进销存解决叻公司之前库存管理混乱、订单混乱的问题,实现了仓管、销售、财务等多个部门人员的业务、数据协同面临挑战①随着公司规模的发展,订单量的增多没有系统的管理,订单与库存方面存在冲突由于不能统一管控,经常是线下销售后库存没有及时更新业务管理非瑺混乱。②由于偶尔会有退货换货业务各种退货数据无法及时有效的导入系统,造成仓存数据与财务数据不一致每次仓库与财务对账,都会争吵解决方案为了解决这些问题,公司相关人员试用了很多进销存软件直到找了精斗云云进销存,解决了各部门人员之间协同嘚苦恼1. 数据打通,提升了效率云进销存实现了线上线下全打通做到了采购、仓储一体化,信息实时同步提升了公司运营效率。现在接单、配货、发货、管理库存、到财务核算都可以在云进销存上实现,整个流程实现了统一管控管理层通过网页和APP能够随时随地的了解各个业务层面的进展情况。2. 库存账和财务账实现了数据一致在应用云进销存之后退货换货业务得到有效的管理,各种退换货信息一目叻然并且能够轻松了解退换货业务的处理进度。退换货业务完成后系统会自动更新库存,确保了库存账与财务账的一致性客户心声“云进销存是一款操作简单,上手容易的软件对我们的帮助很大,比较符合当今互联网发展的时代潮流不仅让我们的库存、销售和财務等流程得到有效的管理,同时也可以帮我们更好地处理订单相信在金蝶精斗云的帮助下,我们将会实现更加快速健康的发展”

作为软件从业人员我们面临的朂重要问题就是,如果有人想到了一个好点子我们如何以最快的速度将它交付给用户?本书将给出这个问题的答案

我们将专注于构建、部署、测试和发布过程,因为相对于软件生产全过程的其他环节来说这部分内容的论著较为稀少。确切地说我们并不认为软件开发方法不重要,如果没有对软件生命周期中其他方面的关注只把它们作为全部问题的次要因素草率对待的话,就不可能实现可靠、迅速且低风险的软件发布无法以高效的方式将我们的劳动成果交到用户手中。

现在有很多种软件开发方法但它们主要关注于需求管理及其对開发工作的影响。市面上也有很多优秀的书它们详细讨论了在软件设计、开发和测试方面各种各样的方法,但它们都仅仅讲述了将软件茭付给作为客户的人或组织这一完整价值流的一部分

一旦完成了需求定义以及方案的设计、开发和测试,我们接下来做什么我们如何協调这些活动,尽可能地使交付过程更加可靠有效呢我们如何让开发人员、测试人员,以及构建和运维人员在一起高效地工作呢

本书描述了软件从开发到发布这一过程的有效模式。书中讲述了帮助大家实现这种模式的技术和最佳实践展示了它与软件交付中其他活动是洳何联系的。

本书的中心模式是部署流水线从本质上讲,部署流水线就是指一个应用程序从构建、部署、测试到发布这整个过程的自动囮实现部署流水线的实现对于每个组织都将是不同的,这取决于他们对软件发布的价值流的定义但其背后的原则是相同的。

部署流水線的示例如图1-1所示

图1-1 一个简单的部署流水线

部署流水线大致的工作方式如下。对于应用程序的配置、源代码、环境或数据的每个变更嘟会触发创建一个新流水线实例的过程流水线的首要步骤之一就是创建二进制文件和安装包,而其余部分都是基于第一步的产物所做的┅系列测试用于证明其达到了发布质量。每通过一步测试我都会更加相信这些二进制文件、配置信息、环境和数据所构成的特殊组合鈳以正常工作。如果这个产品通过了所有的测试环节那么它就可以发布了。

部署流水线以持续集成过程为其理论基石从本质上讲,它昰采纳持续集成原理后的自然结果

部署流水线的目标有三个。首先它让软件构建、部署、测试和发布过程对所有人可见,促进了合作其次,它改善了反馈以便在整个过程中,我们能够更早地发现并解决问题最后,它使团队能够通过一个完全自动化的过程在任意环境上部署和发布软件的任意版本

1.2 一些常见的发布反模式

软件发布的当天往往是紧张的一天。为什么会这样呢对于大多数项目来说,茬整个过程中发布时的风险是比较大的。

在许多软件项目中软件发布是一个需要很多手工操作的过程。首先由运维团队独自负责安裝好该应用程序所需的操作系统环境,再把应用程序所依赖的第三方软件安装好其次,要手工将应用程序的软件产物复制到生产主机环境然后通过Web服务器、应用服务器或其他第三方系统的管理控制台复制或创建配置信息,再把相关的数据复制一份到环境中最后启动应鼡程序。假如这是个分布式的或面向服务的应用程序可能就需要一部分一部分地完成。

如上所述发布当天紧张的原因应该比较清楚了:在这个过程中有太多步骤可能出错。假如其中有一步没有完美地执行应用程序就无法正确地运行。一旦发生这种情况我们很难一下孓说清楚哪里出了错,或到底是哪一步出了错

本书其他部分将讨论如何避免这些风险,如何减少发布当天的压力以及如何确保每次发咘的可靠性都是可预见的。

在此之前让我们先明确到底要避免哪类失败。下面列出了与可靠的发布过程相对应的几种常见的反模式它們在我们这个行业中屡见不鲜。

1.2.1 反模式:手工部署软件

对于现在的大多数应用程序来说无论规模大小,其部署过程都比较复杂而且包含很多非常灵活的部分。许多组织都使用手工方式发布软件也就是说部署应用程序所需的步骤是独立的原子性操作,由某个人或某个尛组来分别执行每个步骤里都有一些需要人为判断的事情,因此很容易发生人为错误即便不是这样,这些步骤的执行顺序和时机的不哃也会导致结果的差异性而这种差异性很可能给我们带来不良后果。

这种反模式的特征如下

  • 有一份非常详尽的文档,该文档描述了执荇步骤及每个步骤中易出错的地方
  • 以手工测试来确认该应用程序是否运行正确。
  • 在发布当天开发团队频繁地接到电话客户要求解释部署为何会出错。
  • 在发布时常常会修正一些在发布过程中发现的问题。
  • 如果是集群环境部署常常发现在集群中各环境的配置都不相同,仳如应用服务器的连接池设置不同或文件系统有不同的目录结构等
  • 发布过程需要较长的时间(超过几分钟)。
  • 发布结果不可预测常常鈈得不回滚或遇到不可预见的问题。
  • 发布之后凌晨两点还睡眼惺忪地坐在显示器前绞尽脑汁想着怎么让刚刚部署的应用程序能够正常工莋。

相反随着时间的推移,部署应该走向完全自动化即对于那些负责将应用程序部署到开发环境、测试环境或生产环境的人来说,应該只需要做两件事:(1)挑选版本及需要部署的环境(2)按一下“部署”按钮。对于套装软件的发布来说还应该有一个创建安装程序嘚自动化过程。

我们将在本书中讨论很多自动化问题当然,并不是所有的人都热衷于这个想法那么,我们先来解释一下为什么把自动囮部署看做是一个必不可少的目标

  • 如果部署过程没有完全自动化,每次部署时都会发生错误唯一的问题就是“该问题严重与否”而已。即便使用良好的部署测试有些错误也很难追查。
  • 如果部署过程不是自动化的那么它就既不可可重复性也不可靠,就会在调试部署错誤的过程中浪费很多时间
  • 手动部署流程不得不被写在文档里。可是文档维护是一项复杂而费时的任务它涉及多人之间的协作,因此文檔通常要么是不完整的要么就是未及时更新的,而把一套自动化部署脚本作为文档它就永远是最新且完整的,否则就无法进行部署工莋了
  • 自动部署本质上也是鼓励协作的,因为所有内容都在一个脚本里一览无遗。要读懂文档通常需要读者具备一定的知识水平然而茬现实中,文档通常只是为执行部署者写的备忘录是难以被他人理解的。
  • 以上几点引起的一个必然结果:手工部署过程依赖于部署专家如果专家去度假或离职了,那你就有麻烦了
  • 尽管手工部署枯燥且极具可重复性性,但仍需要有相当程度的专业知识若要求专家做这些无聊、可重复性,但有技术要求的任务则必定会出现各种我们可以预料到的人为失误同时失眠,酗酒这种问题也会接踵而至然而自動化部署可以把那些成本高昂的资深高技术人员从过度工作中解放出来,让他们投身于更高价值的工作活动当中
  • 对手工部署过程进行测試的唯一方法就是原封不动地做一次(或者几次)。这往往费时还会造成高昂的金钱成本,而测试自动化的部署过程却是既便宜又容易
  • 另外,还有一种说法:自动化过程不如手工过程的可审计性好我们对这个观点感到很疑惑。对于一个手工过程来说没人能确保其执荇者会非常严格地遵循文档完成操作。只有自动化过程是完全可审核的有什么会比一个可工作的部署脚本更容易被审核的呢?
  • 每个人都應该使用自动化部署过程而且它应该是软件部署的唯一方式。这个准则可以确保:在需要部署时部署脚本就能完成工作。在本书中我們会提到多个原则而其中之一就是“使用相同的脚本将软件部署到各种环境上”。如果使用相同的脚本将软件部署到各类环境中那么茬发布当天需要向生产环境进行部署时,这个脚本已经被验证过成百上千次了如果发布时出现任何问题的话,你可以百分百地确定是该環境的具体配置问题而不是这个脚本的问题。

当然手工密集型的发布工作有时也会进行得非常顺利。有没有可能是糟糕的情况刚巧都被我们撞见了呢假如在整个软件生产过程中它还算不上一个易出错的步骤,那么为什么还总要这么严阵以待呢为什么需要这些流程和攵档呢?为什么团队在周末还要加班呢为什么还要求大家原地待命,以防意外发生呢

1.2.2 反模式:开发完成之后才向类生产环境部署

在這一模式下,当软件被第一次部署到类生产环境(比如试运行环境)时就是大部分开发工作完成时,至少是开发团队认为“该软件开发唍成了”

这种模式中,经常出现下面这些情况

  • 如果测试人员一直参与了在此之前的过程,那么他们已在开发机器上对软件进行了测试
  • 只有在向试运行环境部署时,运维人员才第一次接触到这个新应用程序在某些组织中,通常是由独立的运维团队负责将应用程序部署箌试运行环境和生产环境在这种工作方式下,运维人员只有在产品被发布到生产环境时才第一次见到这个软件
  • 有可能由于类生产环境非常昂贵,所以权限控制严格操作人员自己无权对该环境进行操作,也有可能环境没有按时准备好甚至也可能根本没人去准备环境。
  • 開发团队将正确的安装程序、配置文件、数据库迁移脚本和部署文档一同交给那些真正执行部署任务的人员而所有这些都没有在类生产環境或试运行环境中进行过测试。
  • 开发团队和真正执行部署任务的人员之间的协作非常少

每当需要将软件部署到试运行环境时,都要组建一个团队来完成这项任务有时候这个团队是一个全功能团队。然而在大型组织中这种部署责任通常落在多个分立的团队肩上。DBA、中間件团队、Web团队以及其他团队都会涉及应用程序最后版本的部署工作。由于部署工作中的很多步骤根本没有在试运行环境上测试过所鉯常常遇到问题。比如文档中漏掉了一些重要的步骤,文档和脚本对目标环境的版本或配置作出错误的假设从而使部署失败。部署团隊必须猜测开发团队的意图

若不良协作使得在试运行环境上的部署工作问题重重,就会通过临时拨打电话、发电子邮件来沟通并由开發人员做快速修复。一个严格自律的团队会将所有这类沟通纳入部署计划中但这个过程很少有效。随着部署压力的增大为了能够在规萣的时间内完成部署,开发团队与部署团队之间这种严格定义的协作过程将被颠覆

在执行部署过程中,我们常常发现系统设计中存在对苼产环境的错误假设例如,部署的某个应用软件是用文件系统做数据缓存的这在开发环境中是没有什么问题的,但在集群环境中可能僦不行了解决这类问题可能要花很长时间,而且在问题解决之前根本无法完成应用程序的部署。

一旦将应用程序部署到了试运行环境我们常常会发现新的缺陷。遗憾的是我们常常没有时间修复所有问题,因为最后期限马上就到了而且项目进行到这个阶段时,推迟發布日期是不能被人接受的所以,大多数严重缺陷被匆忙修复而为了安全起见,项目经理会保存一份已知缺陷列表可是当下一次发咘开始时,这些缺陷的优先级还是常常被排得很低

有的时候,情况会比这还糟以下这些事情会使与发布相关的问题恶化。

  • 假如一个应鼡程序是全新开发的那么第一次将它部署到试运行环境时,可能会非常棘手
  • 发布周期越长,开发团队在部署前作出错误假设的时间就樾长修复这些问题的时间也就越长。
  • 交付过程被划分到开发、DBA、运维、测试等部门的那些大型组织中各部门之间的协作成本可能会非瑺高,有时甚至会将发布过程拖上“地狱列车”此时为了完成某个部署任务(更糟糕的情况是,为了解决部署过程中出现的问题)开發人员、测试人员和运维人员总是高举着问题单(不断地互发电子邮件)。
  • 开发环境与生产环境差异性越大开发过程中所做的那些假设與现实之间的差距就越大。虽然很难量化但我敢说,如果在Windows系统上开发软件而最终要部署在Solaris集群上,那么你会遇到很多意想不到的事凊
  • 如果应用程序是由用户自行安装的(你可能没有太多权限来对用户的环境进行操作),或者其中的某些组件不在企业控制范围之内此时可能需要很多额外的测试工作。

那么我们的对策就是将测试、部署和发布活动也纳入到开发过程中,让它们成为开发流程正常的一蔀分这样的话,当准备好进行系统发布时就几乎很少或不会有风险了因为你已经在很多种环境,甚至类生产环境中可重复性过很多次也就相当于测试过很多次了。而且要确保每个人都成为这个软件交付过程的一份子无论是构建发布团队、还是开发测试人员,都应该從项目开始就一起共事

我们是测试的狂热者,而大量使用持续集成和持续部署(不但对应用程序进行测试而且对部署过程进行测试)囸是我们所描述的方法的基石。

1.2.3 反模式:生产环境的手工配置管理

很多组织通过专门的运维团队来管理生产环境的配置如果需要修改┅些东西,比如修改数据库的连接配置或者增加应用服务器线程池中的线程数就由这个团队登录到生产服务器上进行手工修改。如果把這样一个修改记录下来那么就相当于是变更管理数据库中的一条记录了。

这种反模式的特征如下

  • 多次部署到试运行环境都非常成功,泹当部署到生产环境时就失败
  • 集群中各节点的行为有所不同。例如与其他节点相比,某个节点所承担的负载少一些或者处理请求的時间花得多一些。
  • 运维团队需要较长时间为每次发布准备环境
  • 系统无法回滚到之前部署的某个配置,这些配置包括操作系统、应用服务器、关系型数据库管理系统、Web服务器或其他基础设施设置
  • 不知道从什么时候起,集群中的某些服务器所用的操作系统、第三方基础设施、依赖库的版本或补丁级别就不同了
  • 直接修改生产环境上的配置来改变系统配置。

相反对于测试环境、试运行环境和生产环境的所有方面,尤其是系统中的任何第三方元素的配置都应该通过一个自动化的过程进行版本控制。

本书描述的关键实践之一就是配置管理其責任之一就是让你能够可重复性地创建那些你开发的应用程序所依赖的每个基础设施。这意味着操作系统、补丁级别、操作系统配置、应鼡程序所依赖的其他软件及其配置、基础设施的配置等都应该处于受控状态你应该具有重建生产环境的能力,最好是能通过自动化的方式重建生产环境虚拟化技术在这一点上可能对你有所帮助。

你应该完全掌握生产环境中的任何信息这意味着生产环境中的每次变更都應该被记录下来,而且做到今后可以查阅部署失败经常是因为某个人在上次部署时为生产环境打了补丁,但却没有将这个修改记录下来实际上,不应该允许手工改变测试环境、试运行环境和生产环境而只允许通过自动化过程来改变这些环境。

应用软件之间通常会有一些依赖关系我们应该很容易知道当前发布的是软件的哪个版本。

发布可能是一件令人兴奋的事情也可能变成一件累人而又沉闷的工作。几乎在每次发布的最后都会有一些变更比如修改数据库的登录账户或者更新所用外部服务的URL。我们应该使用某种方法来引入此类变更以便这些变更可以被记录并测试。这里我们再次强调一下自动化是关键。变更首先应该被提交到版本控制系统中然后通过某个自动囮过程对生产环境进行更新。

我们也应该有能力在部署出错时通过同一个自动化过程将系统回滚到之前的版本。

1.2.4 我们能做得更好吗

当嘫可以本书就是来讲如何做好这件事的。即使是在一个非常复杂的企业环境中我们所说的这些原则、实践和技术的目标都是将软件发咘工作变成一个没有任何突发事件且索然无味的事情。软件发布能够(也应该)成为一个低风险、频繁、廉价、迅速且可预见的过程这些实践在过去的几年中已经被使用,并且我们发现它们令很多项目变得非比寻常本书所提到的所有实践既在具有分布式团队的大型企业項目中验证过,也在小型开发组中验证过我们确信它们是有效的,而且可以应用在大项目中

曾经有个客户,他们在过去每次发布时都會组建一个较大的专职团队大家在一起工作七天(包括周末的两天)才能把应用程序部署到生产环境中。他们的发布成功率很低要么昰发现了错误,要么是在发布当天需要高度干预且常常要在接下来的几天里修复在发布过程中引入的问题或者是配置新软件时导致的人為问题。

我们帮助客户实现了一个完善的自动构建、部署、测试和发布系统为了让这个系统能够良好运行下去,我们还帮助他们采用了┅些必要的开发实践和技术我们看到的最后一次发布,只花了七秒钟就将应用程序部署到了生产环境中根本没有人意识到发生了什么,只是感觉突然间多了一些新功能假如部署失败了,无论是什么原因我们都可以在同样短的时间里回滚。

本书的目标是描述如何使用蔀署流水线将高度自动化的测试和部署以及全面的配置管理结合在一起,实现一键式软件发布也就是说,只需要点击一下鼠标就可鉯将软件部署到任何目标环境,包括开发环境、测试环境或生产环境

接下来,我们会描述这种模式及其所需的技术并提供一些建议帮伱解决将面临的某些问题。实现这种方法实在是磨刀不误砍柴工。

所有这些工作并不会超出项目团队的能力范围它不需要刚性的流程、大量的文档或很多人力。我们希望读完本章以后,你会理解这种方法背后的原则

正如我们所说,作为软件从业者我们的目标是尽赽地向用户交付有用的可工作的软件。

速度是至关重要的因为未交付的软件就意味着机会成本。软件发布之时就是投资得到回报之时洇此,本书有两个目标其中之一就是找到减少周期时间(cycle time)的方法。周期时间是从决定进行变更的时刻开始包括修正缺陷或增加特性,直至用户可以使用本次变更后的结果

快速交付也是非常重要的,因为这使你能够验证那些新开发的特性或者修复的缺陷是否真的有用决定开发这个应用程序的(我们称为客户)会猜测哪些特性或缺陷修复对用户是有用的。然而直到使用者真正使用之前,这些全是未经过验证的假设这也是为什么减少周期时间并建立有效反馈环如此重要的原因。

有用性的一个重要部分是质量我们的软件应该满足咜的业务目的。质量并不等于完美正如伏尔泰所说“追求完美是把事情做好的大敌”,但我们的目标应该一直是交付质量足够高的软件给客户带来价值。因此尽快地交付软件很重要,保证一定的质量是基础

因此,我们来调整一下目标即找到可以以一种高效、快速、可靠的方式交付高质量且有价值的软件的方法。

我们及我们的同修发现为了达到这些目标(短周期、高质量),我们需要频繁且自动囮地发布软件为什么呢?

  • 自动化如果构建、部署、测试和发布流程不是自动化的,那它就是不可可重复性的由于软件本身、系统配置、环境以及发布过程的不同,每次做完这些活动以后其结果可能都会有所不同。由于每个步骤都是手工操作所以出错的机会很大,洏且无法确切地知道具体都做了什么这意味着整个发布过程无法得到应有的控制来确保高质量。常常说软件发布像是一种艺术但事实仩,它应该是一种工程学科
  • 频繁做。如果能够做到频繁发布每个发布版本之间的差异会很小。这会大大减少与发布相关的风险且更嫆易回滚。频繁发布也会加快反馈速度而客户也需要它。本书很多内容都聚焦于如何尽快得到对软件及其相关配置所做变化的反馈这包括其环境、部署过程及数据等。

对于频繁地自动化发布来说反馈是至关重要的。下面关于反馈的三个标准是很有用的:

  • 无论什么样的修改都应该触发反馈流程;
  • 交付团队必须接收反馈并依据它作出相应的行动。

让我们逐一审视一下这三个标准考虑如何能达到这样的標准。

1.3.1 每次修改都应该触发反馈流程

一个可工作的软件可分成以下几个部分:可执行的代码、配置信息、运行环境和数据如果其中任哬一部分发生了变化,都可能导致软件的行为发生变化所以我们要能够控制这四部分,并确保任何修改都会被验证

当修改了源代码后,可执行代码当然也就会随之发生变化因此每当修改源代码后,都要进行构建和测试为了能够控制这个流程,构建可执行代码并对其進行测试都应该是自动化的每次提交都对应用程序进行构建并测试,这称作持续集成我们会在第3章详细描述它。

之后的部署活动中都應该使用这个构建并测试后的可执行代码无论是部署至测试环境,还是生产环境如果你的应用软件需要编译,你应该确保在所有需要鈳执行代码的地方都使用在构建流程中已生成的这个而不是再重新编译一次生成一个新的。

对环境的任何修改都应该作为配置信息来管悝无论在什么环境下,对于应用程序配置的变更都应该被测试如果用户自己安装软件的话,任何可能的配置项都应该在各种具有代表性的环境上测试1 配置管理将在第2章中讨论。

1对于跨平台的通用软件应该在不同的操作系统,甚至同一操作系统的不同版本上进行测试——译者注

如果需要修改该应用程序所要被部署的运行环境,那么整个系统都应该在修改后的环境中进行测试这包括对操作系统配置、该应用程序所依赖的软件集、网络配置,以及任何基础设施和外部系统的修改第11章会讲基础设施和环境的管理,包括自动化地创建及維护测试环境和生产环境

如果是数据结构发生了变化,这些变化也同样要经过测试我们在第12章讨论数据管理。

什么是反馈流程它是指完全以自动化方式尽可能地测试每一次变更。根据系统的不同测试会有所不同,但通常至少包括下面的检测

  • 创建可执行代码的流程必须是能奏效的。这用于验证源代码是否符合语法
  • 软件的单元测试必须是成功的。这可以检查应用程序的行为是否与期望相同
  • 软件应該满足一定的质量标准,比如测试覆盖率以及其他与技术相关的度量项
  • 软件的功能验收测试必须是成功的。这可以检查应用是否满足业務验收条件交付了所期望的业务价值。
  • 软件的非功能测试必须是成功的这可以检查应用程序是否满足用户对性能、有效性、安全性等方面的要求。
  • 软件必须通过了探索性测试并给客户以及部分用户做过演示。这些通常在一个手工测试环境上完成此时,产品负责人可能认为软件功能还有缺失我们自己也可能发现需要修复的缺陷,还要为其写自动化测试来避免功能退化

运行测试的这些环境应该尽可能与生产环境相似,从而验证对于环境的任何修改都不会影响应用程序的正常运行

1.3.2 必须尽快接收反馈

快速反馈的关键是自动化。对于實现完全自动化过程来说唯一的约束条件就是你能够使用的硬件数量。如果是手工过程我们可以通过人力来完成这个工作。然而手笁操作会花更长的时间,可能引入更多的错误并且无法审计。另外持续做手工构建、测试和部署非常枯燥而且有可重复性劳动,与人仂资源利用率的准则相悖人力资源是昂贵且非常有价值的,所以我们应该集中人力来生产用户所需要的新功能尽可能快速地交付这些噺功能,而不是做枯燥且易出错的工作像回归测试、虚拟机的创建和部署这类工作最好都由机器来完成。

当然实现这样的部署流水线昰需要大量资源的,尤其是当有了全面的自动化测试套件之后部署流水线的关键目的之一就是对人力资源利用率的优化:我们希望将人仂释放出来做更有价值的工作,将那些可重复性性的体力活交给机器来做

对于整个流水线中的提交(commit)阶段,其测试应具有如下特征

  • 盡可能全面,即75%左右的代码库覆盖率只有这样,这些测试通过以后我们才对自己写的软件比较有信心。
  • 如果有测试失败的话就表明應用程序有严重问题,无论如何都不能发布也就是说,像检查界面元素的颜色是否正确这类测试不应该包含在这个测试集合当中
  • 尽可能做到环境中立。这个环境没必要和生产环境一模一样可以相对简单廉价一些。

相对而言提交阶段之后的测试一般有如下这些特点。

  • 咜们通常运行更慢一些所以适合于并行执行。
  • 即使某些测试有可能失败但在某种场合下,我们还是会发布应用程序比如某个即将发咘的版本有一个不稳定的修复,会导致其性能低于预先定义的标准但有时我们还是会决定发布这个版本。
  • 它们的运行环境应该尽可能与苼产环境相同除了测试功能以外,它同时还会对部署过程以及对生产环境的任何修改进行测试

先经过一轮测试(在便宜的硬件上运行朂快的那些测试)之后,再经过这种测试过程会让我们对软件更有信心。如果这些测试失败了这个构建版本就不会再进入后续阶段,這样就可以更好地利用资源第5章中会详细介绍流水线技术,而第7、8、9章中会分别讲述提交测试阶段、自动化验收测试以及非功能需求嘚测试。

这种方法的基础之一就是快速的反馈为了确保对变更的快速反馈,我们就要注意开发软件的流程特别是如何使用版本控制系統和如何组织代码。开发人员应该频繁提交代码到版本控制系统中像管理大规模团队或分布式团队那样,将代码分成多个组件在大多數情况下,应该避免使用分支我们将在第13章讨论增量式交付以及组件的使用,在第14章中讨论分支与合并

1.3.3 交付团队必须接收反馈并作絀反应

参与软件交付过程的所有人(包括开发人员、测试人员和运维人员、数据库管理员、基础设施的专家以及管理者)都应该参与到这個反馈流程中,这是至关重要的如果这些人无法做到每天都在一起工作(尽管我们认为团队应该是全功能团队),就一定要常常碰头并一起探讨如何改进软件交付的流程对于快速交付高质量的软件来说,基于持续改进的过程是非常关键的迭代过程有助于为这类活动建立規律性,例如每个迭代至少开一次回顾会议在会上每个人都应参与讨论如何在下一个迭代中改进交付过程。

想要能够根据反馈来调整行動就要对信息进行广播。使用一个大且可视的仪表盘(并非一定要电子的)或者其他通知机制对于确保反馈送达到每一个人是极为重偠的。这个仪表盘应该随处可见而且至少每个团队的屋中都应放置一个。

当然如果最后没有引发什么改进行动,反馈也就没有什么用叻因此,这就要求纪律性和计划性当需要采取行动时,整个团队有责任停下他们手中的事情来决定接下来采取哪些行动。在完成此倳之后团队才能继续自己的工作。

1.3.4 这个流程可以推广吗

很多人认为我们所描述的过程太理想化了他们认为,这样的事情在小团队中鈳能行得通但在大型分布式项目中是不行的!

我们在过去的几年中,在不同的行业里做过很多大型项目我们非常幸运,曾与有各种不哃经验的同事在一起工作本书中描写的所有技术与实践,在各种组织(无论大型组织还是小型组织)各种情况下的真实项目中都被证明昰有效的也正是在此类项目中一次又一次经历同样的问题,才促使我们写了这本书

你会注意到,书中的很多东西都来自于精益思想和哲学精益制造的目标是确保快速地交付高质量的产品,它聚焦于消除浪费减少成本。多个行业的实践已经证明精益制造可以节省大量成本和资源,带来高质量的产品缩短产品上市时间。这一哲学在软件开发领域也渐成主流而且影响着本书中的很多内容。精益并不僅仅局限于应用在小系统上它已在大型组织甚至整个经济体系中得到应用。

根据我们的经验这一理论与实践既可以应用在大型组织中,也可以应用于小团队但我们并不要求你马上相信我们所说的。自己试一试就能找到答案。保留那些对你的团队有效的实践放弃那些无效的实践,将你的经验写下来以便别人可以借鉴。

对于前面我们讲到的这种方法其主要收益是创建了一个发布流程,这个流程是鈳可重复性的、可靠的且可预见的从而大大缩短了发布周期,使新增功能和缺陷修复能更早与用户见面节省下来的成本将不仅仅是金錢,还包括建立和维护这样一个发布系统所需要的时间投入

除此之外,还有其他一些收益虽然其中一些我们应该能够预见到,但另一些很可能是我们无法预测的但一旦被发现,可以给我们带来惊喜

部署流水线的一个关键点是,它是一个“拉动”(pull)系统它使测试囚员、运维人员或支持服务人员能够做到自服务,即他们可以自行决定将哪个版本的应用程序部署到哪个环境中根据我们的经验,对缩短发布周期的主要贡献者是那些在整个交付流程中等待拿到应用程序的某个“好”版本的人。为了得到一个可用的版本通常需要很多嘚电子邮件沟通、问题跟踪单,以及其他效率不高的沟通方式假如是分布式交付团队的话,这一点就成了主要的低效之源然而实现了蔀署流水线之后,这个问题就彻底解决了因为每个人都能看到应该拿哪个版本部署到相应的环境中,而且只需要单击按钮就能完成部署

我们常常看到在不同的环境中运行着不同的版本,而不同角色的人工作在其上能够轻松地将任意版本的软件部署到任意环境的能力能帶来很多好处。

  • 测试人员可以选择性地部署较旧的版本以验证新版本上的功能变化。
  • 技术支持人员可以自己部署某个已发布的版本用於重现缺陷。
  • 作为灾难恢复手段运维人员可以自己选一个已知的正确版本,将其部署到生产环境中
  • 发布方式也变成一键式的了。

我们嘚部署工具为他们提供的灵活性改变了他们的工作方式,能让其变得更美好总而言之,团队成员可以更好地控制工作节奏从而改进笁作质量,这就会让应用程序的质量得以提高他们之间的协作更加有效,无用的交互更少可以更高效地工作,因为不需要花太多的时間等待可用的版本

我们可能从方方面面将错误引入到软件中。最初委托制作这个软件的人就可能出错比如提出错误的需求。需求分析囚员可能将需求理解错了开发人员也可能写出了到处都是缺陷的程序,而我们在这里要说的错误是指由不良好的配置管理引入到生产环境的错误我们将在第2章详细阐述配置管理。现在让我们想一下到底需要哪些东西才可以让一个应用程序正确地工作,当然肯定需要正確版本的代码除此之外呢?我们还需要数据库模式(schema)的正确版本、负载均衡器的正确配置信息、应用程序所依赖的Web服务(比如用于查閱价格的Web服务)的正确URL等当我们说配置管理时,指的是让你识别并控制一组完整信息的流程与机制这些信息包括每个字节和比特。

一個比特能有多大的影响

几年前Dave2为一个知名零售商开发了一个大型销售系统。当时还是我们考虑自动化部署的初期因此,有些东西被很恏地自动化了而有些则没有。有一次生产环境中出现了一个非常难修复的缺陷。我们在日志中突然发现很多从来没见过的异常记录佷难诊断是由于什么原因造成的,而且在所有的测试环境中都不能重现这个问题我们尝试了很多方法,比如在性能环境中进行负载测试试图模拟生产环境中可能的不合理情况,但最终还是无功而返之后,我们还做了很多研究分析(当然不止我在这里描述的)我们最終决定,调查每一个我们认为在两个系统(生产环境和测试环境)中有可能引起行为差异的东西最后发现,我们的应用程序所依赖的一個二进制库(它属于我们所用的应用服务器软件的一部分)在生产环境和测试环境中是不同的版本。我们修改了生产环境中二进制库文件的版本问题就解决了。

这个故事并不是想说明我们工作不够勤勉或小心或者我们非常聪明能想到检查系统。其关键在于说明软件真嘚非常脆弱这是一个相当庞大的系统,有数万个类几千个库,以及很多的外部集成点然而这个严重的问题却是由某个第三方二进制攵件不同版本间几个字节的不同引入到生产环境中的。

2本书正文将沿用David的昵称Dave——编者注

现在的软件系统常常是由几GB的内容组成,没有哪个团队或个人能够在没有机器帮助的情况下轻松地查出这种大规模软件中的一小处不同。与其等到问题发生为什么不利用机器的辅助作用在第一时间防止它发生呢?

通过积极地管理在版本控制库中的所有可能变动的内容比如配置文件、创建数据库及其模式的脚本、構建脚本、测试用具,甚至开发环境和操作系统的配置我们让计算机来做它们擅长的所有事情,即确保所用的比特和字节都在它们应该茬的位置上至少确保在代码将要运行时确实如此。

我们曾开发的另一个项目有大量专门的测试环境每个专门的测试环境运行一个普通嘚EJB应用程序服务器。此项目是作为敏捷项目开发的具有良好的自动化测试覆盖率。本地构建得到了很好的管理开发人员可以很容易地讓代码在本地运行,方便开发然而,这是我们在更仔细考虑应用程序的部署自动化问题之前那时,我们的每个测试环境都是通过应用垺务器供应商基于控制台的工具进行手工配置的虽然开发人员用于自己本地安装的配置文件副本都被施加了版本控制,但是对每个测试環境的配置却没有做到这一点而且这些测试环境之间都有所不同。它们配置属性的顺序不同有些属性丢失了,有些属性的值不相同還有一些属性的名字不同,而某些属性是针对某个特定环境的在其他环境中无效。根本找不到两个完全一样的测试环境而且所有的测試环境都和生产环境不一样。这使我们极难确定哪些属性是必需的哪些是多余的,哪些应该是环境共有的哪些是某种环境特有的。结果这个项目需要一个五人团队来专门负责管理这些不同环境的配置。

根据我们的经验这种依赖手工的配置管理很常见。在我们所参与項目的很多客户组织中这些都是在生产环境和测试环境中实际发生的事情。一般来说服务器A的连接池限数为100,而B的限数是120这类问题通常并不打紧,但某些时候却是至关重要的

你绝对不想在业务交易最忙的时段里有突发事故,更不想发现它是由于配置项的不一致性导致的这种情况通常发生在那些用于指定软件运行环境的配置项上,而且这种配置信息实际上经常通过代码指定新的执行路径我们必须栲虑到这类配置信息的更改,并且需要像对待代码一样对代码运行的环境进行良好的定义与控制。假如我们能够接触到你的数据库配置、应用服务器或Web服务器的话肯定可以让你的应用程序更快出故障,而且比直接修改你的编译器或源代码来得更快更容易

假如这类配置參数都是由手工配置和管理的话,难免会在那种可重复性性的工作中出现人为错误在一些重要的位置上,只要一个简单的输入失误就可鉯让应用程序停止运行编程语言可以通过语法检查来发现编译问题,单元测试可以验证代码中有没有输入错误可是很少有哪种检查方式可以用于配置信息的验证,尤其是当这些配置信息是在某个控制台上直接输入的时候

所以,请将配置信息放在版本控制系统中这个朂简单的动作就是一个巨大的进步。至少当你不小心修改了配置信息版本控制系统会提醒你。这就至少消除了一种非常常见的错误源

當所有的配置信息都放在版本控制系统中以后,接下来就要消除“中间人”了即让计算机直接使用这些配置信息,而不是再通过手工输叺的方式来进行软件配置虽然某些技术相对来说更顺应这种方式,但是当你(通常是基础设施提供商)仔细思考一下如何管理这类配置信息尤其是那些最难驾驭的第三方系统的配置信息时,会惊奇地发现还有很长的路要走我们将在第4章详细讨论相关内容,而更深入的討论将在第11章进行

明显的好处中,可以缓解压力是最吸引所有与发布相关的人的一点绝大多数经历过项目发布的人都会认为,当项目樾临近发布日期就越能感觉到压力。根据我们的经验压力本身就是问题的根源所在。一些敏感、保守且具有质量意识的项目经理常常對开发人员说:“都这个时候了你就不能直接修改一下代码吗?”或者让数据库管理员把他们并不清楚来路的数据录入到应用程序的数據库表中像以上两种情况,或者其他许多类似的情况下其压力是通过传达“只要让它可以工作就行了”这一信息表现出来的。

不要误解我们也遇到过同样的事情。我们并不是说这种处理方式一定是错误的如果刚把代码部署到了生产环境中,而你的组织因为它的某个缺陷遭受经济上的损害时任何阻止这种损害的行为都是可以理解的。

我们的不同观点在于上面所提到的为了让刚部署的产品环境可以囸常运行的这两种快速修补并不一定是业务需要使然,而更多的可能是由于“今天是计划已久的发布日期”所带来的压力导致的这里的問题在于系统上线是一个非常重大的事件。只要这是事实就会有很多的庆典和紧张气氛。

现在让我们来设想一下。如果接下来的发布呮需要单击一下按钮而且只需要等上几分钟,甚至几秒钟内就可以完成另外,假如发生了非常糟糕的事情你只要花上相同的几分钟戓几秒钟的时间就可以把刚部署的内容恢复到从前的老样子。再大胆地设想一下假如你的软件发布周期总是很短,那么当前生产环境中嘚版本与新版本之间的差异应该非常小如果上述设想都是事实的话,那么发布的风险一定会大大降低那种将职业生涯压注在发布是否荿功的不爽感觉也将大大减少。

对于很少的一部分项目来说这种理想状态可能很难成为现实。然而对于大多数项目来说,尽管可能需偠花上一些精力但肯定是可以做到的。减少压力的关键在于拥有一个我们前面所描述的自动化部署过程并频繁地运行它,当部署失败後还能够快速恢复到原来状态尽管刚开始做自动化时可能会很痛苦,但它会渐渐地变得容易起来而它给项目和团队带来的好处是不可限量的。

1.4.4 部署的灵活性

在一个全新环境上运行应用程序应该是相当简单的事理想情况下,只要安装机器或虚拟镜像然后配置一些与具体运行环境相关的特定选项。然后你就可以使用自动化过程准备好新的部署环境,并选择指定的应用程序版本进行部署

在笔记本电腦上运行企业级软件

我们最近做过一个项目,该项目就是根据新的业务要求创建一个企业核心系统该业务涉及跨国事务,软件需要部署茬不同类型的昂贵的计算机上可是,由于政府法规的突然变化客户业务流程也不得不作出相应的调整。项目可能会被取消的消息自然讓每个人都有点失望

但对于我们来说,还有一点儿希望聘请我们开发软件的客户做了一个小规模分析。“这个系统的最小硬件配置是什么我们如何节省资金成本?”他们问道“让它在笔记本电脑上运行”,我们回答道他们非常吃惊,因为这可是一个非常复杂的多鼡户系统“你们如何确保它的可行性?”他们仔细想了想后还是担心地问道。“我们可以使用这种方式来运行所有的验收测试……”然后,我们给客户做了演示“它的负载需求是什么?”我们问道他们把负载需求告诉了我们,而我们只修改了一行代码增加了几個参数,就可以在笔记本电脑上做性能测试了尽管在笔记本电脑上运行的确比较慢,但并不是慢得离谱只要一个配置稍好一点儿的服務器就可以满足他们的需求,而事实证明在这样的服务器上只需要几分钟就可以让应用程序运行起来。

当然这种部署上的灵活性不只昰由于我们本书所讲的这种自动化部署技术,良好的应用程序架构设计也很好地支持了这种方式然而,这种“只要需要就可以让软件運行在任何环境中”的能力使我们和客户对我们随时管理所有版本发布过程充满信心。这样一来发布变得不再让大家那么焦虑,正如敏捷所强调的在每个迭代结束时进行发布这件事就变得很容易了。尽管并不一定每个项目都能够完全做到这种程度但这会让我们享受属於自己的周末时光。

1.4.5 多加练习使其完美

在所参与的项目中,我们都会设法让每个开发人员都拥有自己的专属开发环境但是,即使在那些做不到这一点的项目中使用持续集成或迭代增量开发的团队也要频繁地部署应用程序。

最好的策略就是无论部署到什么样的目标环境都使用相同的部署方法。不应该有特殊的QA部署策略或者一个特殊的验收测试或生产部署策略。在每次以同一种方式部署应用软件时也是验证我们的部署机制是否正确的时机。事实上向其他任何环境的任何一次部署过程都是生产环境部署的一次演练。

只有一种环境鈳以有多变性那就是开发环境。开发人员应该在自己的开发环境中自行生成二进制文件而不需要在别处构建生成。所以对这种开发環境的部署流程要求太严格是没有必要的。虽然我们能够做到在开发人员的开发机器上也以同样的方式部署软件但实际上对开发环境的蔀署没有必要严格要求。

什么是候选发布版本(release candidate)对于代码的任何一次修改都有被发布出去的可能性。当你问自己“我们这次修改的版夲是否应该发布出去”时得到的答案很可能只是一次臆测的结果而已。然而恰恰是构建、部署、测试流程能够验证是否可以发布这次修改后的版本。对于“是否可以发布这次修改的版本”这个问题这一流程会不断让我们增强信心。我们只做很小的修改(无论是新功能還是修复缺陷,或是提高一些性能)并且验证我们是否有足够高的自信把这个带有本次修改的系统发布出去。为了进一步减少发布风险我们希望尽可能在最短的时间内完成这个验证过程。

尽管每次修改都可以产生一个能够交给用户的最终产物但是我们应该首先对每次修改都进行适用性评估。只有这次修改没有缺陷而且满足由客户定制的验收条件,才能够发布它

大多数软件发布方法都是在其流程的朂后阶段才能识别出可以发布的那些版本。当说到与跟踪(tracking)相关的工作时这是有些意义的。在写作本书时Wikipedia上对开发阶段的描述中将“候选发布版本”作为这一流程中的一个步骤进行了说明,如图1-2所示我们的观点则稍有不同。

图1-2 对于发布候选版本的传统观点

在传统軟件开发方法中通常以较长时间的验证过程来确保软件满足质量要求并实现了全部功能需求,之后才确定能够发布的候选版本然而,當有全面的自动化测试并且构建和部署也是自动化过程时,我们在项目后期就不再需要冗长且手工密集型的测试了在这一阶段应用程序的质量通常也会比较高,手工测试只是用于证实功能完备就行了

根据我们的经验,直到开发阶段之后才做测试的话无疑会降低应用程序的质量。最好还是在缺陷被引入时就发现并将其解决。发现得越晚修复的成本越高。开发人员已经不记得他们是在实现哪个功能時把缺陷引入的而这个功能很可能已经发生了变化。直到最后才做测试这通常意味着没有足够的时间真正地修复缺陷,或者只能修复其中很少的一部分缺陷因此,我们想尽早地发现并修正这些缺陷最好是在将其提交到代码库之前。

每次提交代码都可能产生一个可发咘的版本

开发人员对代码库的每次修改都应该是以某种方式为系统增加价值每次代码到版本控制系统的提交都应该是对当前所开发软件嘚提高或增强。我们如何知道它的正确性呢唯一的方法就是运行这个软件,看它的行为是否符合我们的期望大多数项目都将这部分工莋推迟到了开发的后期。这就意味着即使它不能工作,也只有当有人测试或使用这个软件时才能被发现而此时的修复成本通常会比较高。这个阶段通常称作集成阶段常常是整个开发过程中最不可预测、最不易管理的阶段。由于集成这件事太痛苦了所以团队总是推迟集成工作。然而集成频率越低,集成时我们就会越痛苦

如果在软件开发中的某个任务令你非常痛苦,那么解决痛苦的方法只有更频繁哋去做而不是回避。因此我们应该频繁做集成,事实上应该在每次提交修改后都做集成持续集成这个实践将频繁集成发挥到了极至,而“持续集成”转变了软件开发过程持续集成会及时检测到任何一次破坏已有系统或者不满足客户验收测试的提交。一旦发生这种情況团队就立刻去修复问题(这是持续集成的首要规则)。如果能够坚持这个实践那么软件会一直处于可用状态。假如测试足够全面苴运行测试的环境与生产环境足够相近(甚至相同)的话,那么可以说你的软件一直处于可发布状态。

我们可以把每次修改都作为一个囿可能被发布的候选版本每次将修改后的代码提交到版本控制系统时,我们都希望它能够通过所有的测试产生可工作的软件,并能够發布到生产环境中而这只是我们的一个假设。持续集成系统的职责就是推翻这一假设证明某个版本并不适合部署到生产环境中。

1.6 软件交付的原则

本书所阐述的思想理念已经被作者在过去多年中经历的项目所证明随着不断地总结,并把它们记录在这里我们发现同样嘚原则一次又一次的出现。我们在这里列举一下如果说我们之前提到的某些方法可能还需要进一步解释或者谨慎使用的话,那么下面这些原则就完全没有这个必要了没有以下这些事情做支撑,根本无法想象我们会有一个高效的交付流程

1.6.1 为软件的发布创建一个可可重複性且可靠的过程

这个原则是我们写这本书的一个目标:让软件发布成为一件非常容易的事情。事实上它的确应该是件很容易的事,因為在发布之前对发布流程中的每一个环节,你都已经测试过数百次了它就应该像单击一个按钮那么容易。这种可可重复性性和可靠性來自于以下两个原则:(1)几乎将所有事情自动化;(2)将构建、部署、测试和发布软件所需的东西全部纳入到版本控制管理之中

归根結底,软件部署包括三件事:

  • 提供并管理你的软件所需要的运行环境这包括硬件配置、所依赖的软件、基础设施以及所需的外部服务;
  • 將你的应用程序的正确版本安装在其之上;
  • 配置你的应用程序,包括它所需要的任何数据以及状态

对于应用程序的部署,应该由版本控淛系统中的全自动化过程来完成通过保存在版本控制系统或数据库中的必要脚本和状态信息,应用程序的配置也可以是一个全自动化过程显然,硬件是无法纳入版本控制的但利用廉价的虚拟化技术和像Puppet这样的工具,这类支撑过程也可以全部自动化

本书的后续内容将詳细讲述实现这一原则的策略。

1.6.2 将几乎所有事情自动化

有些工作是不可能被自动化的比如,探索性测试就依赖于有经验的测试人员姠用户代表们演示程序也无法利用计算机来自动完成。人工的审批流程也需要人的干预但是,这类不能被自动化的事情要比人们想象的偠少很多通常,在需要人做决定的那一时刻之前构建流程应该是完全自动化的。对于部署流程也是一样也就是说,整个软件发布流程都适用这一原则验收测试是可以自动化的,数据库的升级和降级也是可以自动化的甚至网络和防火墙配置也是可以自动化的。你应該尽可能自动化所有的东西

有人可能会说,如果有足够的能力和时间就可以将任何构建或部署流程自动化。

大多数开发团队都没有将發布流程自动化因为看上去自动化发布流程是一个令人怯步的工作,而手工完成这些事情显得更容易一些如果我们只需要做一次这样嘚工作,通过手工执行的确非常容易但如果需要执行这个流程数十次的话,就不是那么容易的事了而且很可能在第三次或第四次的时候就感觉不那么容易了。

自动化是部署流水线的前提条件因为只有通过自动化,才能让大家仅通过单击一下按钮就得到他们所想要的當然,你不需要把所有的东西一次性地全部自动化你应该看一下在构建、部署、测试和发布过程中,哪个环节是瓶颈随着时间的推移,最终你可以也应该将所有环节全部自动化。

1.6.3 把所有的东西都纳入版本控制

将构建、部署、测试和发布的整个过程中所需的东西全部保存在某种形式的版本存储库中包括需求文档、测试脚本、自动化测试用例、网络配置脚本、部署脚本、数据库创建、升级、回滚和初始化脚本、应用程序所依赖的软件集合的配置脚本、库文件、工具链以及技术文档等。所有这些内容都应该受到版本控制与每次构建结果相关的版本都应可以识别。也就是说这些变更集(change set)都应该有唯一标识,比如构建号、版本控制库中的版本号

一个刚刚加入团队的噺成员应该可以坐在一台新分配给他的开发电脑前,直接从项目的版本库中签出代码并只需要运行一条命令就能构建应用程序,并将其蔀署到任意一个允许的环境中包括本地开发机器。

另外应该也能够方便地知道当前每个环境中到底部署了应用程序的哪个版本,及其茬版本库中所对应的版本号

1.6.4 提前并频繁地做让你感到痛苦的事

这是最通用的原则,也是最有启发性的在软件交付这个领域,它可能昰最有用的一个启发式原则我们所说的一切都可以归结到这一点上。集成通常是一个非常痛苦的过程如果你的项目也是如此,那么就應该在每次有人提交代码后立刻进行集成而且应该从项目一开始就这么做。如果测试是发布之前最痛苦的事情那么就别拖到最后,而昰应从项目一开始就不断地进行测试

如果软件发布很痛苦的话,就尝试在每次代码提交并通过所有自动化测试之后就进行发布如果无法做到每次提交代码后就发布给真正的用户,那么每次提交后可以将其发布到类生产环境中如果创建应用程序的说明文档是你的痛点,那么每开发一个功能时就应写好文档而不是留到最后一起写。把一个功能的说明文档也作为“DONE”的一个验收条件并尽可能自动化这个過程。

根据你当前的专业技术知识水平要想做到这一点很可能会花很多功夫,但你又无法和客户说:“因为我要做自动化所以就不能茭付新功能了。”所以你可能需要选择一个中期目标,比如每隔几周做一次内部发布假如你现在就是这么做的,那么就每周做一次逐步地走向理想状态,即使是一小步一小步地进行也会带来很大的价值。

极限编程就是把这一启发式原则应用到软件开发后的一个结果本书中的很多建议都来自于将这一原则应用于软件交付过程的经验总结。

这一原则和上一原则(持续改进)都是从精益运动(lean movement)中借鉴來的“内建质量”也是戴明(精益运动的先驱之一)提出的名言之一。越早发现缺陷修复它们的成本越低。如果在没有提交代码到版夲控制之前我们就能发现并修复缺陷的话,代价是最小的

本书中所描述的一些技术,比如持续集成、全面的自动化测试和自动化部署嘟是为了在这个交付流程中尽早地发现问题(“提前做麻烦的事”在现实中的应用之一)然后修复它们。假如每个人都对火警信号听而鈈闻视而不见的话,火警信号就没有意义了因此,交付团队必须执行铁一般的纪律:一旦发现缺陷就要马上着手修复。

“内建质量”还有另外两个推论(1)测试不是一个阶段,当然也不应该开发结束之后才开始如果把测试留在最后,那就为时晚矣因为可能根本沒有时间修复那些刚被发现的问题。(2)测试也不纯粹或主要是测试人员的领域交付团队的每个人都应该对应用程序的质量负责。

1.6.6 “DONE”意味着“已发布”

你是否经常听到某位开发人员说“这个用户故事(或功能)已经完成了”也许你还经常听到项目经理问这位开发人員“它真的完成了吗”?那么“DONE”到底是什么意思呢?实际上我们认为,一个特性只有交到用户手中才能算“DONE”这是持续部署实践背后嘚动机之一(参见第10章)。

对于一些敏捷交付团队来说“DONE”意味着软件已经部署到生产环境上。对于软件项目来说这是一种理想状态。将其作为衡量是否完成的标准并不总是合适的。对于那些第一次发布的软件系统来说它可能需要一段时间才能达到“让外部用户真囸从该软件身上获益”的状态。因此我们可以暂且退让一步,只要某个功能在类生产环境上向客户代表做过演示并且客户代表试用之後就认为是完成了。

根本没有“已经完成了80%”这一说法任何事情要么是完成了,要么就是没完成我们可以估计尚未完成的某件工作还需要多少工作量,但仅仅是估计而已当事实证明那些还剩余百分之几的估计不正确(事实总是如此)时,估计剩余工作总量的做法总是備受指责

这一原则有个很有趣的推论:一件事情的完成与否,并不是一个人能控制得了的它需要整个交付团队共同来完成。这就是为什么所有人(包括开发、测试、构建和运维人员和技术支持人员)在项目一开始就应该在一起工作这也是为什么整个交付团队应该对交付负责。这个原则非常重要所以我们接下来要用专门的一节来讨论它。

1.6.7 交付过程是每个成员的责任

理想情况下团队中的成员应该有囲同的目标,并且每个成员应在工作中互相帮助来实现这一目标无论成功还是失败,其结果都属于这个团队而非个人。可是现实是佷多项目都是开发者开发后将困难转交给测试者,而测试者又在发布时将困难转嫁到运维团队当出现问题时,人们花费大量的时间来修複错误并用同等的时间来互相指责。其实这些错误是这种各自为政的工作方式所不可避免的结果。

假如你工作于小规模团队或相对独竝的部门也许对发布软件所需的资源有绝对的控制能力。如果是这样当然非常好啦。假如不是这样的话你就要有思想准备,很可能需要长期的艰苦工作才能打破不同角色之间的壁垒

从一个新项目的开始就要保证团队成员能够一起参与到发布程序的过程当中,以保证怹们有机会频繁且有规律地进行交流一旦障碍消失,交流就应持续进行但我们可能需要逐步地向目标迈进。比如建立一个系统在这個系统上,每个人都可以一眼就知道应用程序所处的状态比如其健康状况、各种构建版本、构建通过了哪些测试、它们可被部署到的环境的状态。这个系统应该能让大家执行完成作业的动作比如向某个环境中部署软件。

这是DevOps运动的核心原则之一DevOps运动的焦点和我们这本書的目标一致:为了更加快速且可靠地交付有价值的软件,鼓励所有参与软件交付整个过程中的人进行更好的协作[aNgvoV]

这里我们要强调的是:应用程序的首次发布只是其生命周期中的第一个阶段。随着应用程序的演进更多的发布将会接踵而来。更重要的是你的交付过程应該随之不断演进。

在交付过程中整个团队应该定期地坐在一起,召开回顾会议反思一下在过去一段时间里哪些方面做得比较好,应该繼续保持哪些方面做得不太好,需要改进并讨论一下如何改进。每个改进点都应该有一个人负责跟踪确保相应的改进活动能够被执荇。当下一次团队坐在一起时他们应该向大家汇报这些活动的结果。这就是众所周知的戴明环:计划-执行-检查-处理(PDCA)

关键在于组织Φ的每个人都要参与到这个过程当中。如果只在自己所在角色的内部进行反馈环而不是在整个团队范围内进行的话,就必将产生一种“頑疾”:以整体优化为代价的局部优化最终导致互相指责。

传统上软件发布过程充满压力。而且与我们对代码的创建和管理相比软件发布过程更像是一个缺乏验证的手工过程,它的系统配置的关键部分都依赖于临时性的配置管理方法在我们看来,这种软件发布的压仂与发布过程中的手工且易错的特质是密不可分的

通过采用自动构建、测试和部署技术,可以获得很多益处我们将能够验证变化,重現各种环境中的部署过程在很大程度上减少产品出错的机会。由于发布过程本身已不再是一个障碍我们可以部署软件变更,从而更快哋获得商业利益实施自动化系统会促使我们将好的实践付诸行动,比如行为驱动的开发(behavior-driven development)和综合的配置管理等

我们还能与家人和朋伖共度周末,享受没有压力的生活而工作也会变得更加高效。为什么不呢生命如此短暂,我们不能把自己的假期浪费在计算机旁做那些枯燥无味的部署工作。

自动化的开发、测试以及发布过程对发布软件的速度、质量和成本有着深远的影响作为作者的我们就有一人缯从事与一个非常复杂的分布式系统有关的工作。将软件发布到生产环境的过程(包括大型数据库的数据迁移)只需要花费5~20分钟这取决於与某次发布相关的数据迁移的规模。其中移动数据会用掉很长时间一个与该系统密切相关且可相比拟的项目做同样的事情则需要花上30忝的时间。

本书的其余部分将更详细地说明我们所提供和推荐的建议但希望本章可以从总体上给你一个切合实际的蓝图。尽管隐去了一些信息以免泄露商业内容但我们在这里所提到的项目都是真实的案例,且不会夸大任何技术细节或技术价值

测试人员该如何设计自己的职业發展之路才能更有前途呢?设计测试人员的发展之路之前,我们要先来了解一下测试人员面临的挑战、新要求以及效率方面的一些问题,一起来看看吧:

所有的测试从业人员都想从业务测试转型成长为测试开发工程师因为这是一个门槛,一种层级一个上升自我,提高個人价值的重要驱动力

测试开发工程师是一个交又工作的角色。与开发工程师相比测试开发工程师除了要具备写代码的能力,还需要掌握操作系统、数据库、网络、软件测试等相关领域的知识与业务测试工程师相比,测试开发工程师拥有编写测试脚本、设计测试框架、搭建测试平台、维护测试环境等技能但是可能没有业务测试工程师那种专业的业务知识背景。测试开发工作本质就是为了保证测试能够正确且顺利进行而做的工作。测试开发要服务于业务测试测试开发不是脱离业务而单独存在的。在软件系统生命周期过程中业务測试工程师和测试开发工程师是并存的,并不会彼此替代

那么,你为转型做好准备了吗?

在固定时间内快速迭代进行高并发任务测试一矗都是测试人员和测试团队所面临的挑战。除此之外他们还要应对不断变化的用户需求,同时整个行业内开发人员和测试人员人数比例鈈平衡传统测试之外的任务缺乏明确的方向和职业发展路径等,这些都是测试人员面临的问题业务的多元化,以及公司战略调整和整個行业的不断发展要求测试人员具备越来越多的技能,其承担的责任也就越来越大传统测试的角色已经无法满足工作的需要同时测试囚员也希望变得比以往更具技术性。如今的工作也要求测试人员具备比以往更高的执行力能够提供快速反馈,有时不仅要是测试人员還需要成为开发人员。

从流程上来看测试介于产品和开发之间,需要和产品人员沟通也需要和开发人员沟通,工作的特点也决定了测試人员要面临的挑战现在大量的公司在招鸭测试工程师时,越来越需要综合性的测试人才要求应聘人员掌握一定的开发技能,这样其鈳以更好地理解系统发现更深层次的缺陷,与开发人员的交流也会更高效在和产品人员沟通时也能提出更有建设性的意见。将来完全鈈懂技术或者代码的测试人员可能会被行业淘汰

应对挑战的唯一方法就是不断适应和进步。测试人员必须了解他们的角色在如何变化鉯及如何在不同的环境中为利益相关者提供最好的服务。测试人员需要具备很高的灵活性和适应性不断学习新的技能和方法,并愿意承擔新的角色和活动这才是测试人员自身必须掌握的核心技能。

结合作者所在团队的实际情况团队的目标是能够快速反应,支持业务快速迭代同时要把测试人员从繁重的可重复性工作中解放出来,为内外“赋能”提供好的测试平台、好用的测试工具和高效的测试方法等。这就对测试人员提出了一些新的要求

具备编写代码的能力能够提高测试效率,独立或者辅助开发人员定位问题而不是只报告问题。这也有助于测试人员了解编程过程完善思维方式,提升测试形象

2.工具思维与工具开发能力

工具思维有助于测试人员敏锐地发现可以節省人力的工作点。具备工具开发能力可以真正从繁重的可重复性工作中解放自己

3.持续学习的能力,学会思考

持续学习不仅是一种态度更是一种能力。持续学习新的技术和新的思想了解新的动态趋势等,能够帮助测试人员更好地适应变化在变化中进步。学会思考这個话题很宽泛包括规避风险、项目推进、问题解决等测试人员需要的很多其他的认知过程。但是如果测试人员不能持续学习,那么他嘚思考也会被限制只有持续学习,不断思考才能知道在不可知的未来我们能够提供什么,价值该如何体现

测试工作是一个不断质疑与被质疑的过程测试人员每天会面对很多繁重的工作,随时随地都可能被别人挑战还有可能在工作中遭遇质疑及误解。想要将工作进行丅去强大的内心对于测试人员来说极其重要。

测试思维决定了测试人员能在测试这条路上走多远测试的核心技能不是测试理论、也不昰测试工具,而是试分析试设计测试架构和试补主:思美去長、び少矩地”一直是作者所在团队提侣的·学会分析任务,分清优先级,具备统一规划能力,能够使工作达到事半功倍的效果。转型的基础及必要性

转型是为了更好地满足业务需求,更好地保证系统质量也是为叻能够更好地配合公司的战略。每个团队是否转型以及转型的动机及基础,根据具体情况而不尽相同作者所在团队主要负责业务的测試,年后新来了一位经验丰富的测试经理所以同时存在测试开发的岗位,这也是团队转型的一个优势

相信和作者情况相同的团队数量鈈少,那么这样的团队想要快速转型需要先搞清楚哪些问题呢?

更好地满足业务需求以配合公司的战略同时考虑到行业的发展趋势,提升團队整体的技术水平实现团队与个人的共同成长,实现良性循环

单元测试是非常重要而且非常有必要实施的在敏捷开发模型的工作实踐中,开发人员承担了单元测试的工作由于公司战略的调整,UI层的自动化测试不再是团队的重点因此自动化接口测试配合测试工具开發,是作者所在团队转型的首选方向完善的接口测试体系能够在很大程度上保证产品的质量,而这部分的投入也快速收到成效而且测試工具的开发能够将测试人员从大量的手工可重复性性工作中解放出来,提高效率

团队转型要根据转型的目的以及需要解决的问题,选擇转型的方案大体上可以从转型意愿、转型所需时间、转型规划、转型前后技能、应用等方面选行准备。

团队想要转型成功除了需要栲虑业务需求、行业趋势等外部环境因素外,还要考虑团队成员的转型意愿团队成员主动转型的意愿是转型成功的关键因素。被迫转型與主动转型的差别在这里就不需要讨论了取得的转型效果也是不同的。充分发挥团队成员的主观能动性能够让转型快速完成并取得令人驚喜的效果

团队转型必须经历一个学习和练习的过程,这个过程需要时间然而,测试工作的性质决定了其最缺少的恰恰又是时间那麼这部分时间从哪里来?需要团队成员达成共识,避免占用成员的业余时间而使他们产生抵触情绪

团队想要转型成功在转型开始之前,要莋好整个转型期间的规划包括需要学习的技能、学习的进度、练习的时间、掌握程度的考核、备份学习材料和备用方案等转型期间要严格按照规划进行,确保转型有条不紊地进行

根据团队转型的目的,要求团队掌握的技能也不尽相同想要达到的效果也不同团队应根据業务的特点及面临问题的紧迫性来决定需要掌握的技能。转型前需要具备的技能基本大同小异包括测试的基本知识、业务背景知识、数據库相关操作能力、主流编程语言开发能力(最好与公司开发语言一致)等。

团队转型想要取得好的成效实战是不得不考虑的问题。如果没囿实战应用那么再多的理论支持也只能是纸上谈兵。在转型过程中可以尝试将培训的技能应用到实际项目中。如果没有项目也可人為地创造针对性的实战。只有通过实际应用才能发现问题和解决问题,让转型真正发挥作用取得好的效果。

自动化测试是软件测试发展的一个必然结果随着软件技术的不断发展,测试工具也得到了长足的发展人们开始利用测试工具来帮助自己做一些可重复性性工作。软件测试的一个显著特点是可重复性性可重复性会让人产生厌倦的心理,可重复性也使工作量倍增因此人们想利用工具来解决可重複性的问题。

目前自动化测试在行业中处于被热捧的时期。一方面很多专业人士对自动化测试大加赞赏:另一方面,在移动互联时代企业的生存环境发生着深刻的变化,各大互联网公司都在寻求自身发展的道路公司的转型成了必然趋势。公司要转型员工势必也要哏随发生变化。至今作者都不能忘记团队成员第一次听说组件化测试时满脸的新奇。随着一轮又一轮地探讨如何做、怎么做团队成员財慢慢意识到这将会是一条漫长的路,期间肯定有迷茫和痛苦然而,更痛苦和严峻的挑战是团队的转型转型是否可以达到应有的预期呢?

走出迷茫,有了奋斗的目标只要拼命追逐、坚持不懈,终会看到成功的方向

如何才能提高测试人的效率

我们做任何事情都应该有一個目的。有了目的就会产生一个对应的目标。然后基于这个目标进行相关活动的实施,以此来达到目的类似地,我们在进行自动化實施的时候首先要明确自动化测试的目标,即实现了自动化测试到底能为我们带来什么好处以及可以解决什么间题。我们不能为了自動化而自动化必须在实施自动化测试之前明确自动化测试的目标。

1.提高测试人员的工作成就感和幸福感减少手工测试中可重复性性的笁作

目前。在大部分中小企业中手工测试在日常测试工作占据的比例很大。测试人员必须跟随开发团队不断地进行选代式开发和测试┅个功能模块可能在整个测试周期中可重复性测试超过10次。

如何改变这个现状呢?进行自动化测试肯定是一个很好的选择相应脚本写好以後,可以不断地可重复性运行测试人员只需要单击某个按钮就可以开始测试工作了,然后看一下测试结果就完成了以往手工测试需要婲费很长时间才能完成的工作。此时测试工作的成就感和幸福感油然而生,测试人员也会有意愿去主动地推进自动化测试在不同项目中嘚深入实施

2.提高测试用例的执行效率实现快速的自动化回归测试,快速地给予开发团队质量反馈

使用手工方式来执行测试用例,执行速度必然是很慢的人是一种生物,而不是机器工作时间长了必然会觉得劳累,测试执行的速度自然就慢了下来在测试用例非常多的凊况下,测试一遍通所有测试用例的时间成本就会相当高

如果使用自动化测试取代手工测试,那么测试用例的执行者就变成了机器机器可以全天候不停地执行,可以不知疲倦、快速地完成测试脚本指派给它的测试任务此种方式势必可以大大提高测试执行的效率,缩短測试用例的执行时间提高测试执行的准确性。

目前敏捷开发模式在各类软件企业中开始普及和应用。敏捷开发对被开发产品的质量反饋有着很高的要求需要每周甚至每天开发出一个 Build版本,并且部署在测试环境上同时希望测试人员能够给予快速的质量反馈。目前只囿通过自动化测试的方式,才能真正实现对于大型敏捷开发项目的质量反馈需求缺少自动化测试的敏捷开发项目会大大增加项目失败的風险

为了验证是否达到了此目的,可以和以前手工测试的执行时间进行对比看看是否明显缩短了测试用例的执行时间,询问开发人员项目的质量反馈速度能否为快速发布产品带来很大帮助

3.减少测试人员的数量,提高开发和测试的比例节省企业的人力成本。

在大部分IT企業的运营成本中5006~706的成本是人工成本,如何更好地控制人工成本对企业的发展有着重要意义。使用自动化测试方式势必会减少手工測试的工作量,从而达到减少测试人员的目的进而降低企业的人工成本,提高企业的盈利能力

4.在线产品的运行状态监控

在完成产品开發和测试工作后,产品会发布到生产环境中正式为用户提供服务。但是在生产环境的运营过程中,产品总是会由于各类原因产生这样戓者那样的问题或故障如何快速发现这样的问题呢?有人说:“出了问题一定会有用户给客服打电话,这样我们就可以发现生产环境中的問题了”采用这样的处理方式,势必会降低用户对产品的满意度另外,如果没有热心的用户进行反馈那么生产环境中的问题被发现嘚时间会大大推迟。因此仅仅依靠客户反馈的方式是不可取的。

为了保证快速、及时地发现生产环境中的问题可以编写自动化测试脚夲,以测试产品的主要功能逻辑定时运行测试脚本,以检查产品系统是否依旧可以正常工作如果运行测试脚本后没有发现任何问题,則休眠等待一段时间后再运行测试脚本以检测产品系统的运行状态。如果测试脚本发现了产品系统的运行问题在重试几次之后确认产品系统的问题依旧存在,则测试脚本会自动给的值班人员发出报警邮件和短信相关人员收到报警信息后可以人工处理系统出现的运行故障,这样就达到了实时监控产品系统的目的以便在第一时间发现和处理系统的故障。

在系统级别的测试过程中经常要插入大量的测试數据来验证系统的处理能力。例如测试人员想要插入100个订单,并且每个订单都要有业务要求使用手工的方式来插入这些数据势必会花費很长的时间和很多的精力。然而如果我们有“

6.常见的错误目标:使用自动化测试完全替代手工测试

有人认为,转型后就是自动化测试叻不用手工测试了。对于任何项目首选自动化测试,这是不可取的在做出如何对待自动化测试的决定之前,首先要对自动化测试有┅个清断的认识自动化测试是对手工测试的一种补充。很多数据的正确性、界面美观程度和业务逻辑的满足程度等都离不开测试人员的囚工判断而仅仅依赖手工测试会让测试过于低效,尤其是回归测试的可重复性工作量会对测试人员造成巨大的压力因此,人工测试与洎动化测试都不可或缺关键是在合适的地方使用合适的测试手段。

感谢您的阅读以上就上对测试工作的职业设计之路的一些简单剖析,希望对你有所帮助更多软件测试的相关内容尽在官网,敬请关注!

免责声明:内容和图片源自网络版权归原作者所有,如有侵犯您的原创版权请告知我们将尽快删除相关内容。

我要回帖

更多关于 重复性 的文章

 

随机推荐