【摘要】软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略文档通常是篇幅较长、文字为主的形式,编写成本较高,并且写完了很少有人去看,形存实亡。本文介绍可视化的方式,将软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略用图来表达,并且在一页纸上搞定,这样的策略图非常清晰,关键信息一目了然,并且提供更大的讨论空间,防止僵化,真正能够发挥策略的作用。
本文首发于「IT技术分享社区_编程代码交流平台」,转载请参考版权声明。
“软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略是什么样的?”
“软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略嘛,还不是包括#&~+-=~*-+$这些…”
“你们项目的策略有什么特别的吗?”
“我们项目嘛,软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的内容有点多,从哪说起呢?”
前面那个场景有没有似曾相识?你是否清楚目前你们正在使用的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略是什么样的?
01. 常见软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的内容与形式
我们都知道,软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略包括以下两方面的内容:
- 测什么(What)?测什么是指质量需求是什么、需要关注质量的哪些方面,比如应用的功能范围、性能、安全、易用性等非功能需求。
- 怎么测(How)?怎么测就是采用什么办法来帮助系统实现质量需求,而不仅仅是手动和自动化的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台方法,也包括一切为质量保障服务的流程、环境、基础设施和人员等。
为了描述清楚要测的内容以及如何来测,软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略通常篇幅较长的文档,包含多个章节;以文字描述为主,只加上少量的配图。
【图片来自网络:http://wenku.baidu.com/view/17b9b03067ec102de2bd89ee.html】
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的痛点
长篇大论的文字给人带来居多不便:
1. 编写困难
篇幅较长的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略文档要写好还真不是件容易的事情,尤其是对于理工科出身的不是那么擅长写作的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台人员来说,更是比较麻烦,成本较高。
2. 不易阅读
长篇大论的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略文档,要从中快速找出关键信息可没那么容易,可能一不小心错过的细节就是最关键的部分,因为篇幅太长,通常不太重要的信息挺多的。
3. 维护、更新痛苦
策略文档不可能一成不变,这种篇幅较长的文档要更新和维护简直是噩梦。往往刚开始还好,随着时间推移,更新和维护越来越麻烦。
4. 失去了策略的价值
由于不易阅读,也不易维护和更新,事实上团队可能有很多人并不是很清楚策略文档上的内容,这样的策略文档形存实亡,不能真正起到策略的指南作用。
5. 反敏捷
敏捷开发强调的是缩短反馈周期,快速交付高质量的软件产品。花费太多精力编写、维护一份不能起到策略作用的长篇幅文档,显然是不利于敏捷的,也是非常痛的。
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的重要性不言而喻,是否可以找到一种更好的表达方式,让软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略不那么痛呢?Jamie McIndoe在Testing Stuff - A One-Page Test Strategy中首次提出可以把软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略图视化,用一页纸来搞定。
我们都知道,图示化的表达方式直观、清晰,容易识别关键信息,并且易于记忆。如果能够用图示化的方法将软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略在一页纸上搞定,一定非常棒。
下面一起来看看图示化表达的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略是什么样的。
02. 图示化软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略
一页纸搞定
顾名思义,图示化就是用图来描述软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的内容,但并不是把原来文字描述的每个章节直接翻译成图。我们考虑用图来表示软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的各个关键组成部分,并且绘在一页纸上。
当然,一页纸的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略只是将关键信息以图示化的方式呈现出来,并不是整个软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的全部,在一页纸的背后是团队的充分沟通和对策略各个方面达成的一致认识,是需要团队一起来做很多工作的。这种高度简化的呈现形式,是为了给团队更多的讨论空间,一页纸也更易于修改,从而更能适应变化,真正满足需求。
基于Jamie McIndoe的可视化软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略思想,我建议的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略图包含下列信息:
- 指导性原则:团队为质量负责
- 如何测:软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台左移、精益软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台、软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台右移,涵盖软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台流程、软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台类型、软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台方法等
- 测什么:包括功能、性能和安全等
下面将以蓝鲸项目为例来介绍这几个部分的内容。关于蓝鲸项目,是一个历经10年的离岸交付项目,采用的是敏捷开发的模式,每四到五周一次发布,遵循敏捷开发的各种实践。
例如,蓝鲸项目的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略如下图所示(文末有中文版一页纸软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略图):
各部分详细介绍
下面,我们来看看该软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略各组成部分的具体含义。
1. 指导性原则
蓝鲸项目采用的是敏捷开发模式,质量不是某个单一角色的事情,团队为质量负责是项目质量保障的指导性原则,需要所有团队成员对此有一致的认识,人人都要有关注质量的意识。更多关于团队为质量负责的内容,请参考我的博客文章说好的团队为质量负责呢。
2. 软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台左移与质量内建
敏捷软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台最关键的两点就是尽早软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台和频繁软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台(Test early, test often),也就是软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台左移与质量内建的思想。
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台左移要求在需求分析阶段开始对需求本身的合理性进行验证,不仅要正确的构建产品,更重要的是构建正确的产品,这就需要把好源头需求这一关。因此,我们可以看到策略里的流程是从需求分析开始的。
质量内建则是在软件开发生命周期的每个阶段都有质量相关的活动,把质量融入到开发的每一个步骤,通过CI/CD等方式获取快速反馈,做好软件缺陷的预防,以减轻缺陷暴露太晚带来的大量修复成本。
蓝鲸项目的开发生命周期主要体现在下图的七个环节,每个环节都有相应软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台活动的开展,并且每个活动都有不同角色的参与。
3. 精益软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台
精益软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台可以理解为以业务价值为目标,以尽量少的成本交付高质量的软件,也就是说软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台要测在能体现价值的点上,要做到有效覆盖、减少浪费。蓝鲸项目的策略图里有两个框架帮我我们更有效的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,分别是软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限和软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台分层。
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限
在Lisa Crispin和Janet Gregory合著的书籍《敏捷软件软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台:软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台人员与敏捷团队的实践指南》中,我们看到了敏捷软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限的介绍。由于该象限框架所起到的作用不仅局限于敏捷的环境,我在这里称之为软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限。
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限矩阵一共四个部分,称为四个象限。下侧是面向技术的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,上侧是面向业务的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台;左侧是支持团队的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,右侧则是评价产品的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台。
1) 支持团队的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台
支持团队的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台是用来告诉团队要写什么代码,起到明确需求、辅助设计的作用。其中,第一象限是面向技术的支持团队的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,主要是TDD,帮助构建产品的内部质量,也就是代码质量的保障,比如单元软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台和API软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台等;第二象限则是面向业务的支持团队的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,从更高层次以业务专家可以理解的方式确定系统期望的行为,做到产品外部质量的保障。
这两个象限的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台能够快速提供反馈信息,并确保快速的解决问题,既指导了功能的开发,又提供了防止重构和新代码的引入而导致不期望行为发生的安全网。
2) 评价产品的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台
程序员编写的代码可以使得左侧面向业务的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台通过,但也可能没有产生客户真正想要的东西,因此还需要第三、第四象限的评价产品的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台。
第三象限是面向业务的评价产品的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,通过模仿真实用户使用应用的方式,帮助确认是否构建了真正需要的产品;第四象限是面向技术评价产品的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,主要采用工具和相应的技术来评价产品的性能、健壮性和安全性等非功能特性,并且在开发周期的每一步都要考虑这些软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的开展。
这两个象限的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台中产生的信息应该反馈到象限矩阵的左侧,并用于创建新的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台来驱动下一步开发,形成良性的增强环路。
3) 软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限的使用
象限的顺序跟软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台执行的顺序无关,敏捷开发往往开始于客户软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台(面向业务的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台)。与软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台执行时机相关的因素通常有:
- 产品发布的风险
- 客户方对产品目标的要求
- 是基于遗留系统的开发还是从零开始构建的新系统
- 可利用的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台资源等
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限提供一种需要哪些软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台来保障质量的思考框架,可以根据项目具体情况,结合考虑以开展对应的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台。策略图所示蓝鲸项目的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限体现的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台类型跟Lisa书里介绍的就不太一样,这是根据项目当前跟客户的合作方式、业务需求、质量要求等来确定的当下需要执行的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,比如其中的安全软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台就分为业务部分和技术部分。
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台分层
关于软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台分层的思想,大家可能比较熟悉的是软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台金字塔,主要是针对自动化软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,根据软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台所能覆盖的范围分成不同的层。金字塔的含义是软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台比例的多少,体现为底层单元软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台较多,越往上层软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台比例越少,呈现为金字塔结构。
越往底层的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台越接近代码,编写成本更低、执行速度更快、定位问题也更准确,但是离业务较远,不能很好的体现业务价值;越往上层的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台越接近业务,更能反应业务价值,但有着不够稳定、执行速度慢、实现成本较高的不足。因此,需要权衡利弊,根据项目具体情况,真实的目标来确定每层软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的比例。
至于具体的比例是金字塔结构,还是蜂巢结构或其他,并不是一定的,也不会是一成不变的,可能受到价值目标、痛点、质量要求、技术架构、技能水平等因素的影响。
蓝鲸项目的策略图里的是当前的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台分层结构,类似于蜂巢机构,那是因为基于微服务架构的特点,蓝鲸项目更多的自动化软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台是保障服务间连通性的API软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台部分,而对于单元软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台和端到端软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的比例则都有减弱。更多的关于蓝鲸项目软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的详情,请参考我的博客文章微服务软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的思考与实践。
4. 软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台右移
由于软件系统所处生态环境越来越复杂,技术架构的演进、业务复杂度和数据量的增加、基础设施的发展带来更多的不确定性,软件系统的质量保障在软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台环境已经搞不定了,我们需要把目光右移到生产环境。这就是软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台右移的思想,其实也就是生产环境下的QA(QA in Production)。
生产环境有着不同于软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台环境的特点,生产环境的QA并不是软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台环境的QA的直接后延,而是需要利用其特点通过技术手段收集生产环境一切可利用的数据,包括日志、用户行为、用户反馈等,利用这些数据来分析和优化业务以及开发过程的开发和软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台工作,形成一个开发过程与生产环境信息分析的良性循环系统。
蓝鲸项目在这方面做了不少工作,更多相关的详细内容,请参考我的博客文章生产环境下的QA和QA与Ops通力合作打造反脆弱的软件系统。
5. 测什么
之所以把这个放到最后介绍,是因为前面介绍“怎么测”的各个部分都已经涵盖到要软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的内容,蓝鲸项目的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台内容主要有:功能、性能和安全。
这三个方面的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台类似,都是从需求分析到生产环境每个环节都要考虑相关软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台,做到质量内建、安全内建和持续的性能软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台。关于功能方面的质量内建,前面【软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台左移与质量内建】部分有介绍,对于安全和性能方面的策略,可以参考如下图示,由于篇幅有限,本文不做赘述。
03. 软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略的正确打开方式
一页纸搞定的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略,优势非常明显,比传统策略文档更加简洁、清晰,关键信息一目了然。我们再来看一下软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略图示化以后,还有哪些需要注意的方面。
目标驱动
虽然上网搜索能找到很多软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略模板,但软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略不应该是千篇一律的,不可以死搬硬套通用的模板。软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略受到多种因素的影响,比如:业务价值、质量要求、当时痛点、技术架构、技术能力、工作重心、绩效要求、项目状态等等。
制定软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略需要明确目标,综合考虑各种因素,权衡利弊,找到最适合自己项目当前状态的策略。也就是说,软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略应该是目标驱动的。
演进式
项目处于不同阶段会有不同的质量目标,同时随着架构的演进和业务的发展,对软件系统的质量保障工作也需要随之调整。因此,软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略还应该是演进式的、随需调整的。
图示化的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略是高度精简的,具有更大的讨论和发挥空间,在防止僵化、保持演进方面的优势明显。
04. 总结
软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略举足轻重,内容很重要,需要以价值目标驱动,持续度量,并根据项目特定情况适时调整、演进。策略文档不要拘泥于形式,利用图示化的方法,直观、清晰的表达,是非常好的组织形式,能有效克服常规文字为主的文档所带来的痛,推荐大家使用。
最后,附上更新的通用一页纸软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略图,供大家参考:
05. 延伸阅读
- Jamie McIndoe的Testing Stuff - A One-Page Test Strategy:http://making.stuff.co.nz/testing-stuff-a-one-page-test-strategy/
- 说好的团队为质量负责呢:http://www.gdyhsys.com/2019/07/14/everyone-is-responsible-for-quality/
- QA in Production:http://martinfowler.com/articles/qa-in-production.html
- 蓝鲸项目软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台策略之微服务软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的思考与实践:http://www.gdyhsys.com/2018/06/28/microservices-testing/
- 生产环境下的QA:http://www.gdyhsys.com/2016/06/13/qa-in-production/
- QA与Ops通力合作打造反脆弱的软件系统:http://www.gdyhsys.com/2018/10/15/qaops/
本文首发于「IT技术分享社区_编程代码交流平台」,转载请参考版权声明。
通告:软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台类型 - 与ChatGPT pair完成的软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台类型清单 - IT技术分享社区_编程代码交流平台
通告:敏捷团队的质量保障赋能 - Thoughtworks洞见
通告:QA的关注点 - 一颗石榴给QA带来的启示 - IT技术分享社区_编程代码交流平台
通告:质量实践 - 软件质量保障关键实践集 - IT技术分享社区_编程代码交流平台
通告:软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台部门职责 - 软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台部门的职责定位 - IT技术分享社区_编程代码交流平台
通告:软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台金字塔不是万能的 - Thoughtworks洞见
通告:Holistic testing - Janet的Holistic Testing(全面软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台) - IT技术分享社区_编程代码交流平台
通告:Agile testing quadrants - 关于敏捷软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台象限的“秘密” - IT技术分享社区_编程代码交流平台
通告:「质量三人行之不止软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台」直播问题集 - IT技术分享社区_编程代码交流平台
通告:组织级软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台体系 - 构建软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的体系化思维(高级篇) - IT技术分享社区_编程代码交流平台
通告:软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台体系 构建软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的体系化思维(基础篇) - IT技术分享社区_编程代码交流平台
通告:软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台基本职责 构建软件工程,人工智能,机器学习算法,编程语言,编程代码交流平台的体系化思维(基础篇) - 林子的空间