一个初学者的云开发心得

举报
menzhugs 发表于 2019/09/06 14:47:07 2019/09/06
【摘要】 云,云计算,企业云,私有云,云盘,等等一个很高大上的技术范畴。云开发是一种基于云特性的在线、水平扩展、低门槛准入和高解耦复用地进行编码并产生云计算能力软件的编程方式。云开发包含两个层面的云,首先是开发方式是云方式,要颠覆和突破传统瀑布模型、敏捷开发、极限编程的个体离线、自下而上垂直堆叠、专业度高和复用度低的方式,并从云计算层面避免传统反面的开发模式;其次是开发出来的软件是云计算品质和能力,即...

云,云计算,企业云,私有云,云盘,等等一个很高大上的技术范畴。

云开发是一种基于云特性的在线、水平扩展、低门槛准入和高解耦复用地进行编码并产生云计算能力软件的编程方式。

云开发包含两个层面的云,首先是开发方式是云方式,要颠覆和突破传统瀑布模型敏捷开发极限编程的个体离线、自下而上垂直堆叠、专业度高和复用度低的方式,并从云计算层面避免传统反面的开发模式;其次是开发出来的软件是云计算品质和能力,即具有水平扩展、分布式、幂等、高度可用性等云计算特点。

开发活动中的核心实践及具体实践

编辑

概述

传统框架、编码乃至极限编程是垂直堆叠,所谓的横向机制基本只是一种尝试(你必须知道如何进行代码垂直堆叠哪怕拦截至少你得关注而云开发则无需知道也能加上),我们需要改变传统开发的思想即把垂直堆叠解耦成水平扩展,为此提出三种创新实现方式为:

一种是增加运行容器,容器中可配置各种运行功能,这里通过增加云计算能力即云计算容器实现,该容器可进一步容纳现有各种容器(如spring等),可以配置各种安全、权限、缓冲、防浏览器缓冲、变量初始化控制、外部接口如cmd或调用外程序的QOS、统一错误码处理、统一日志处理、异常跳转后控制等功能,从而把传统垂直堆叠的功能引入完全解耦,实现水平配置式开发!(参见核心实践四)

第二种就是自定义规范化框架,框架本身的产生可忽略垂直编码,而其中可插入各种功能,这是对传统垂直堆叠模式的抽象,即把层次按规范进行隐藏,使得编码者无需关注,只用关注关键业务的代码编写!(参见核心实践二)

第三种就是指定功能实现标准并通过各种手动如代码向导加强标准的贯彻,实现特定灵活逻辑具体代码规范,实现特定处理的全局工具包,都在这个范畴!(参见核心实践三)

这三种方式离不开高度复用的构件(一种高度可复用充分松耦合可插拔的东西包括框架),且一旦复杂度超出已有范围,将进一步驱动构件的产生、发展和成熟,推进卓越复用和有效战略!(参见核心实践五)

这种创新开发过程,由于联动改变高频度改变整体代码,越是开始越必须在线进行,同样在线的各种活动才能充分发挥其优势!(参见核心实践一和核心实践六)

在线编码无缝协作

提供一种在线开发和协作的环境,确保在线连续设计、开发、集成、测试、交付等开发动作,并让客户、产品、管理乃至更多的人无中断体验产品的全生命过程,从而得到最充分、及时的交流和反馈,自驱动极限迭代开发过程。

[开发]

在线开发-设计、编码、调试、测试...等所有活动均在线进行,任何动作同时其他人在线提示。

集中代码仓库-上面开发的结果,将与标准版本服务器对接,从而进一步支持传统开发活动。

按变化集成、部署和交付-任何开发和改变,只要递交修改,即自动编辑、集成、部署和交付,但可不包括运行时。

[团队]

虚拟团队-开发团队的各种角色均在云上参与,形成贯穿全部软件生命周期的虚拟团队,形式上不在一起,但无时、无地保持紧密沟通;不能限于技术团队、不能限于会议形式,让更多人利用非正式时间同等参与而驱动开发。 [3] 

跨部门交互-除开发团队外,产品部门、市场部门、销售甚至客服部门,当然包括非IT管理者等,形成覆盖非开发层面的成员,促进更大范围的交互。 [3] 

远程客户可视化体验-不管是否在现场,也不管什么时候想,客户均可远程访问任何阶段的产品,并以可视化的方式体验,促进客户参与和需求挖掘。

[自动化]

*统一无缝协作空间-确保开发过程中的自动化信息公示、问题标注、交流反馈等能力,并提供开放可扩展的接口以对接其他专业化ALM(软件全生命周期)工具。 [3] 

反馈监管-任何问题提出和交流发起,通过监管确保有效、及时地反馈,从而驱动整个开发的连续进行。

自动化统计分析-可根据各种管理目标反复提升自动化水平,确保客观和效率。

面向截层水平实施和按规范自动化堆叠

从一个业务驱动的截层开始,迅速自动化堆叠其他关联层次和关联活动对象,全员平等、并行的水平推进软件系统的全生命周期,开发变成为一个不用费时效果最大的行为。

[规范标准]

统一层次和框架规范-面向截层统一规范品质管理的自动化模型,框架规范化,编码标准化。

[截层模型]

面向单一业务-截层最大程度贴近业务逻辑本身的驱动,且只关注业务自身,从而将开发集中到产品和业务逻辑设计上;同时截层中每一个截块只面向单一业务,减少截块耦合带来的复杂性,避免传统业务控制可以集中到一个文件而带来的失控。

垂直框架层次自联动-基于截层的变化,实现关联垂直堆叠层(如data、xml、dao、daomain、service、manager、action、...)的自动化生成、修改、清除等自动透明的联动。

关联软件全生命周期活动-截层是软件全过程活动的集中浓缩,围绕截层,从需求驱动代码的自动产生,到单元测试功能测试,到代码检验、自动测试、QOS报告、设计文档、进度监控-redmine、自动培训、规范自检、工作日报..,均能有效关联,从而便于不同层次的并行协作和自动化模型。

脱离具体框架实现-支持极速的代码、语种、框架的快速重构化,哪怕换开发团队和体系;支持全开放源码生成,快速适应当前主流框架,与当前主开发体系技术路线映射一致。

[水平实施]

平等参与-全员对截层进行分块即截块,平等、公开地参与软件开发全程,包括需求、设计、开发、测试和支持。 [3] 

设计即开发-在开发的开始,就是截块的设计,设计就是开发,系统模型在开发过程中不间断完备和完善。

主体代码的水平配置、定义和定制实现-为实现业务截块的代码,从主体骨架开始,通过配置控制云计算容器层功能,通过定义固化框架通用功能,通过定义引入标准代码块或函数实现灵活功能,标准代码中可以注入各种规范控制。

内业务微编码-在主体代码基础上,通过微小的跟业务更紧密相关的编码,实现完整业务逻辑,微小才能控制标准和质量。

水平扩展复杂编码-微编码中达到一定复杂度,则转向定制向导、框架中可复用重构(构件),容器中可可复用构件的横向方式上水平扩展。

面向切面编程-复杂编码自然要求可复用和透明的特点,从而自驱动AOP编程。

业务功能水平重用-各种截块,承担独立的业务功能。可以支持各种独立、水平的重用。

全员并行-截层自动关联衍生各个层次和各种活动,从而打破串式开发过程,全部可以并行推进。

*切入式编程--不是结对了解和提议,而是随时从一个专业度切入,打开所有人的编码切面,提出专业化意见,甚至直接改变。

按需求自驱动开发、测试和跟踪

通过驱动,实现编码简单到粗暴的程度,无专业编程能力的人都可以参与,同时通过自动化测试体系增强软件质量和开发者信心,并能快速发现、跟踪、调试和处理运行时异常。

[自驱动开发]

截层驱动开发-基于需求,转化为截层,这一过程要具备自驱动能力,保证简单、直接、简洁。

数据模型驱动开发-从数据设计开始即可进行快速开发。

功能代码块向导-支持各种基本功能的向导封装,从而可以简单到粗暴驱动代码编写,并面向非编程人员推出更加高效、透明地无编码开发的定制模式。

功能水平实现辅助-支持各种典型复用功能的构件可以更容易引入和配置的辅助手段。

表现层驱动开发-需求以原型的形式直接表达,支持可见即可得的调整,甚至支持表现层从零开始的搭建能力和工具,此时表现层定义必须足够简单清晰而不能用太复杂方式,尤其前期表达时。

业务层驱动开发-如流程/表单驱动开发,支持多种无编码的可视化截层工具如流程、表单等驱动无代码开发。

跨文件重构工具--支持多种快速重构工具如重命名,无逢重构并自动保持不同版本运行代码。

[自驱动测试] [4] 

自动化用例录制-代码运行依托模板化进行输出,并对结果按照匹配规则自动进行检测,并允许手动确认结果,这个过程本身将自动形成典型测试用例,特定情形如代码变动、部署升级、系统重构时要求输入输出完全可以重演。

自动单元测试代码生成-在用例录制过程中,按照接口引用、功能复用、间接访问、内部函数以及标识疑点等自动生成单元测试代码(实例)。

按功能自动化测试-代码递交时进行按功能的功能测试和单元测试,发现bug驱动开发。

部署全自动化测试-产品部署时进行全部功能的功能测试和单元测试,发现缺陷驱动开发。

极限测试和自动缺陷发现工具-自动放大用例中的条件,乃至程序中的变量,进行极限测试,以自动发现缺陷;后者,针对各种逻辑不完备和异常,均可能发现。

跨框架(语言)自动化比对测试-可发现一些框架、语言层的问题。

[自驱动跟踪]

单一条件日志-支持单一行为、单一人员、单一输入参数的运行时日志分离。

按行为命令行调试-支持特定行为的运行时的命令行模式的调试跟踪。

*异常运行自动报警和容错-支持非稳定期运行时的自动报警、自动容错。

标准化提炼高复用的专业构件

按照标准建立构件集,指导开发过程中对可复用功能的充分解耦、广泛使用,提炼高度专业化但是又通用的构件,通过成熟的东西的高品质,真正保证实现卓越运营和有效的战略。

[标准]

以标准化的接口形式提供服务-不允许命令行等,不允许操作文件系统,不允许控制资源等!

标准错误、异常和日志记录能力-复用构件的日志、错误返回和异常处理机制的截层接入控管

基本接口可简单快速实现-通用构件的设计,要简单到为开发者把握了解和把握,从而确保可以快速实现

可快速更替-开发者可对通用构件进行松耦合调用,从而快速更替无缝更换,以彻底改造一些核心构件性能,甚至吸收更多的其他优异构件来替换,完成关键能力的飞升

保持异构能力-因为标准接口,同时可快速替换,就松耦合模式,确保异构耦合...

[构件集]

建立常用处理方法的构件集-工具集

建立框架规范对应的构件集

建立云计算容器中的构件集-构件支持云计算容器即可以独立挂载到云计算层提供独立分离、前置处理和可检测服务==云计算层次的标准(如过滤拦截截面)等高模式外的云计算代理及服务等全面彻底解耦,是对传统框架的一种集中云计算解耦区,使得各层充分解耦,适应云计算特点,从而确保开放包容!

建立快速驱动开发的构件集-为非普通业务逻辑代码块建立通用化路线

[提炼] [5] 

"微代码"开发驱动构件重构-复用构件的任何变化将驱动所有参与者的交流和反馈

迭代路线跟当前所属系统保持同步

累积叠加跨项目的单元测试代码

跨项目追踪的复用重构协同-从简单和完备的持续重构-提升代码质量,驱动重用重构,重构本身处理过程的推进,需要及如何促进代码重构?根据QOS率驱动重构!

多版本容错-构件的改变容易引起根本问题看,所以保持容错!

跨语言工具包调用容器-跨语言包--可选多种语言工具包,支持随需而变的整合和对接...,所有流行跨语言工具包无缝使

推进开放独立的云运行容器

云运行容器作为一张重要构件,设计简洁,确保快速起步,稳定、自主和独立的推进其向云计算支撑能力的靠拢。

落实运行时云服务支持

云服务能力从一开始的在线连续即进行了建立,这种能力必须进一步对客户标准化,并按需落实、依用收费。

云开发的活动和过程


在上述实践下的开发由传统各种串行活动集中到编码活动中,其他环节通过自动化、驱动等方式弱化,从而使得开发过程变为从单一截层出发的并行。 [6] 

活动

1.简洁需求定义

概括场景,提出关键点设计等,明确路线图;无需等待和反复论证,无需传统详细需求定义、页面设计等细化需求。

2. 快速设计

选定框架(浓缩了规范和标准),明确截块化和分工;避免传统的详细设计、解决方案和数据模型设计等,甚至完备的数据表定义、业务流定义,这些都将变成编码开发的一部分,并自动产生各种设计文档。

3. 自驱动的编码

各种适合不同能力和定位的人员的自驱动开发模式,包括制作即开发-页面制作、设计即开发-数据设计、页面即开发-如页元需求驱动、接口驱动开发、流程驱动开发、表单驱动开发、逻辑微编码-简单到粗暴编码到构件提炼开发等。

4. 覆盖式跟踪调试

支持浏览器下调试和测试,支持在线代码的在线命令行跟踪,集中版本获取可离线可视化跟踪--以上均为代码模式当然可以断点运行跟踪的调试和崩溃汇报模式,当然也支持浏览器监控模式,兼容传统线下编程和调试,块编码提示能力很强。

5. 自动化测试

全自动透明化单元测试和功能测试(并行测试--性能测试--安全测试)。

6. 不中断的集成、部署和交付

连续交付,云计算容器运行,并进行容错处理--自动调度将实现负载正确的新线路,新回路不对将自动切向正确的运行版实现容错。

7. 运行时云支持服务

进行云监控和云服务。

8. 连续交互体验驱动极限迭代

无极交流和反馈,反复驱动重构==重构必须反复进行,但必须自动化驱动重构?我不想亲自做那些冗余的事包括库设计-html导入-逻辑块=但能否构建功能测试QOS率并报警,我似乎也没有更好的办法监管这些代码的品质并反复重构提升=只要单元测试日志等地方就将给出报告并引起关注,从而量化优化控制。

9. 云品质要求驱动重构

自驱动重构机制-并行解耦重构而进化。

过程

  • 从截层出发;

  • 并行开发-传统受[模块黑盒子+串行设计+垂直堆叠]的限制,云开发则把模块内部都进行了横向切割,大家全部以并行参与,全员平等并行设计;

  • 灵活专业切入-替代原来的评审;

  • 驱动模式-面向截层水平自动驱动,从而使得测试、重构等内部驱动力加大,更快向高质量产品演进;

  • 无缝变革式飞跃-松耦合机制确保可替换,松耦防干扰,版本共存,自动容错,定向版本,质量演进;

  • 管理自动化-自动产生各种统计报表分析开发状态的监控和管理。

云开发的效果和优势


  1. 建立以用户体验和产品质量为中心的团队,极限迭代,缔造新型的软件交付模式:连续协作促进产品用户体验-->不能连续无缝进行产品代码质量交流反馈--产品体验和品质不能开放式交流反馈监管--连续在线协作推进沟通交流和管理;截层开发进一步作为开发模式的核心是一种创新,保证了质量、极限,进一步保证了服务就是开发的交付;传统开发对开发人员和团队规模有要求,不能真正做到无缝的极限迭代--简单粗暴页元驱动开发!-全面提升其产能;高度重视云服务的新型交付模式,不但反过来促进产品本身的进化,更重要的是创造产品本身的连续商业价值;

  2. 加强规范和标准的统一,减少轮子的重复制造,确保云计算的卓越品质:自动垂直堆叠加强框架规范,而面向截层开发编码标准控制;统一了很多其他层和本层常用功能的轮子,同时通过复用性的驱动机制,大大减少重复制造轮子;质量保证... 同时对可复用的地方经常动易导致变乱而质量风险,使得软件质量存在累积叠加的可控性隐患,各种通用技术技巧全靠重复手动而无法标准引用;按云计算的要求来解耦,复用带来的卓越的云计算的品质保证,降低风险;

  3. 避免重复工作,快速提升,专注于核心价值的贡献:提炼原有价值,避免沟通反馈的消耗而只用关注业务的开发;

  4. 统一在线开发,自动全程跟踪,建立云软件全生命周期监管模型。

云开发的特点

的开发;

  1. 有典型的简单到粗暴的驱动式开发模型和工具:整个开发过程,必须有各种的工具支持,能做到无编码开发,且其中的概念不能太多太专业;

  2. 具备独立云计算能力的运行时容器:云开发的前置条件就是同时能提供默认的云服务框架和环境,能迅速把上述开发成果转化成云软件、云应用和云服务;

  3. 提供了典型的专业构件集:常规软件中包含的一些专业核心软件技术,如全文检索、自然语言、统一用户等,必须变成专业的SaaS,供开发者快速整合;

  4. 开放兼容传统开发过程和技术积累:既然是开发,除了不懂编码的人可控外,更应该让有编码能力人感到强大、灵活和可复用,从而要求云开发过程其可兼容传统编程语言;要有充分的开放性,作为开发方式,当然能够看生成全部开发的源码,可以选择各种框架甚至自己定义的框架,同时还能够与各种开放框架耦合;

  5. 从在线开发开始通过连续交互驱动开发:驱动模式的开发。

多种开发方式和云开发方式的区别比较


团队规模要求

所有开发,都需要完整的团队,从瀑布到极限,强调团队小微化,使得更加灵活,而云开发首先创造了虚拟团队和自动角色扮演...

成员门槛

直到极限,对成员的要求都是非常高的,只有云开发,首先实现了模型驱动的开发模式,确保真正的简单!

编程和项目速度

迭代之后都强调在较短的开发周期提交软件,但依次缩短,但由于项目周期制约太多因素,往往不好直接评估,但可以通过"简单"的程度来判断...

代码规范和质量控制

敏捷和极限的规范和质量均依赖统一规范、代码评审以及结对编程,在某种程度上提出了一些理念,但是否行动则不同团队表现不一样;而云开发通过截层开发,第一次实现了规范和质量的自动化。

产品体验感

传统无沟通,敏捷和极限也不鼓励沟通,导致不牛叉无认可,而云开发第一次提倡无缝沟通、交流和反馈,...;从传统到极限,产品和开发往往相对队里,但逐渐强调引入客户参与...而云运行第一次让程序员只关于产品逻辑,第一次要求产品客户角色必须提前参与...

对变化的适应

瀑布式的主要的问题是它的严格分级导致的自由度降低,项目早期即作出承诺导致对后期需求的变化难以调整,代价高昂。瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。相对来讲,敏捷方法则在几周或者几个月的时间内完成相对较小的功能,强调的是能将尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强。而对变化的适应应该是越来越强,极限提出“拥抱变化”,而云开发提出了“变化驱动驱动变化”!

运行品质

云开发第一次用云计算特点要求应用软件的运行品质...

适用项目规模

传统可适应可预见的大项目,而极限更多适应不可预见的普通项目,而云开发则可实现云规模的项目!

可实施性

传统完全依赖文档,敏捷等更多依赖观念的贯彻,云开发第一次把理念和工具进行结合...,并全面兼容有缘的完全源码、源码共享、代码可控、标准框架、SVN检出、自动化文档设计等传统习惯!

可管理

第三方应用用各种语言是好事,但如何管理?也没人思考!未来一定出上叙类似问题!


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。