公司级的软件过程实践系列文章,请参见连接。
熵
在高中物理中,学热的时候可以学习到熵增原理。将熵增原理推广到人类社会,是一件非常有意义的事情。这里根据熵增原理,一切都将趋于混乱的。所以,在我们所从事的软件研发工作中也经常遇到这样的现象。应该怎样控制这些?
这里我提出《公司级基础设施》,用于减少熵的影响,并规范化操作规范、规范化验收准则。
基础设施
从网上找到的基础设施的介绍:
“基础设施”(Infrastructure)一词又可译为“基础结构”。最早对基础设施给予足够重视的经济学家当推罗森斯坦—罗丹,他在1943年把一国或一地区的社会总资本或社会总投资分为两类:“社会分摊资本”(Social Overhead Capital,SOC)和“私人资本” (Private Capital,PC),前者即指基础设施。赫尔希曼(A.o.Hirschman)将后者又称之为“直接生产性活动”(Directly Productive Activites DPA)。这种分类观点一直为后人所承袭。
还有另外一个解释是:
麦格劳—希尔公司的图书公司1982年出版的《经济百科全书》,进而对基础设施作了比较详细的解释。该书写道:“基础设施是指那些对产出水平或生产效率有直接或问接的提高作用的经济项目,主要内容包括交通运输系统、发电设施、通讯设施、金融设施、教育和卫生设施,以及一个组织有序的政府和政治体制……”。
从上可以看出基础设施就是为了社会、组织提供基础服务的设施,用于提高社会、组织的生产水平、生产质量的。
具体内容
这里分析软件公司的基础设施规范。因为业内有很多类型的软件公司、专业做人员外包的、做解决方案的、运营自有产品的、专做技术支持的等等。这里讨论一般的公司运营自有产品的软件公司。
支撑一个一般的软件公司的基本的基础设施可以分为:工程体系、技术体系。工程体系整体的把控公司在软件方面的产出,技术体系控制软件公司的技术栈统一。工程体系与技术体系相辅相成,缺一不可。在工程体系分析系统的工期时,必须基于现有的技术体系。技术体系的选择,必须能够支撑工程体系中的需求。
在工程体系中又可以分为多个模型,工程体系部分会在之后的文章中陆续介绍。现在我们更主要说明技术体系。
技术体系
从上面一节中可以看到技术方向分很多种,这里还是以一种通用的技术选型进行相关的说明。先上一张图:
这里提供了一个技术基础设施的模板,可以根据不同的技术方向,填入不同的技术。接着说明框架中每部分的意义。
1. 开发
在开发过程中,需要开发人员的开发环境。以免在开发过程中遇到一些环境不统一造成的问题。并且,还要控制运行环境,防止跨平台造成的一些隐藏问题。
开发环境基本上是为开发人员提供集成开发环境。在不同的技术栈上有不同的IDE,我们可以为开发提供比较通用,比较流行的IDE。这样可以提高开发人员融入团队过程。
运行环境中也需要定义好,运行环境中比较重要的是《接口管理》,《指标管理》,《数据库管理》,《其他软件》。主要是为了统一运行环境,在运行过程中各团队之间没有交流障碍。
接口管理现阶段业界开源技术比较流行的有:Swagger,Rap2,Kong等。指标管理有比较好的APM:Zipkin,Pinpoint,CAT等。数据库管理开源的:MyWebSQL,Pinba等。其他软件有:注册中心,配置中心,消息队列,事务控制,WEB服务器,负载均衡等等。
2. 运维
运维需要由专门的运维人员以及运维体系。运维中已经有很好的业务规范ITIL,为我们提供完整的运维规范。可以参照ITIL进行删减即可满足公司的要求。
3. 质量
质量控制也是有比较完善的规范,有专业的职位:QA,Tester,SCM。质量管理不仅管理软件的最终质量,还要管理软件的过程质量。我们可以借鉴三个职位的职责即可完成质量管理。
有时候Tester不会对测试计划进行跟踪以及复盘,我们这个时候就需要专业的Tester Leader进行控制。
4. 其他
除了以上的这些之外,还有涉及到公司内部沟通的基础设施,方便内部人员沟通。以及一些KPI的管理软件。为工程管理提供基础设施。
参考:
基础设施 https://wiki.mbalib.com/wiki/%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD
熵的社会学意义 http://www.ruanyifeng.com/blog/2013/04/entropy.html
ITIL https://baike.baidu.com/item/ITIL/10498690?fr=aladdin