Google软件工程:什么是软件工程
文章目录
- 编程≠软件工程
- 软件工程的3个特性
- 时间与变化
- 海勒姆定律(Hyrum’s Law)
- 目标不是“没有变化”
- 规模和效率
- 左移思维
- 权衡和成本
- 最后
已剪辑自: https://mp.weixin.qq.com/s/GhYfH3ndRsOWHFyAnFVvPQ
没有什么东西是建在石头上的,一切都是建在沙子上的,但我们必须把沙子当做石头来建筑。— Jorge Luis Borges
编程≠软件工程
编程:编程是生产代码的直接行为。
软件工程:软件工程是一组必要的原则、实践方法和工具,使得代码在跨团队协作和使用时能更加的有效。
编程和软件工程的三个关键差异点:时间,规模和权衡。
- • 首先,对于一个软件工程,工程师需要更多的关注时间的流逝和可能的需求变更。
- • 其次,软件工程需要更多的关注团队规模和集体效率,无论是其使用软件的组织,还是生产软件的组织。
- • 第三,软件工程师,需要做出更多复杂且高风险的决策,通常是基于对时间和增长的不精确的预估。
软件工程的3个特性
软件工程不是编程,软件工程是随着时间而不断集成的编程工作。
软件工程在时间、规模和权衡3个维度上的表现特性分别为:
软件工程的可持续性:在软件的预期生命周期内,在业务和技术的双重发展中,都需要有能力做出对有价值的变化的有效反应,这就是软件的可持续性。
软件工程的规模性:软件工程师一项团队工作,团队的协作,包裹更多人的参与,甚至多个团队的协作,都会到来新的问题。在规模增加时,如何能够更好的交付有价值的系统。
软件工程的复杂性:随着组织的成长和项目功能的扩展,软件系统的生产是否能够变的更加高效,持续交付的成本是否可控。
时间与变化
在软件的预期生命周期上,在低点和高点之间显示某个地方出现了一个转变:某个项目必须开始对不断变化的外界做出反应。
对于任何一个一开始就没有计划升级的项目,这种变化可能是非常痛苦的,原因主要有三点:
- \1. 正在做的一项任务,还没有完成,但已经有更多的隐含的假设被注入程序之中。
- \2. 尝试进行升级的工程师机会不太可能有此类任务的相关经验。
- \3. 升级的规模往往比平时要大,一次进行累计了几年的大升级,而不是渐进式升级。
一个系统,不但要完成第一次大的升级,且要达到能够可靠地一直保持这种持续的最新状态,才是其长期可持续性的根本。
可持续性要求对所需变更的影响进行持续的规划和管理。
海勒姆定律(Hyrum’s Law)
海勒姆定律:
当一个API有足够多的用户时,在约定中你所承诺的已不再重要:所有在你系统里被观察道德行为,都会被一些用户所依赖。
这是软件系统的熵增:随着时间的推移,对变化和维护的讨论,必须要意识到海勒姆定律。
根据热力学第二定律,熵永不减少,但并不意味着我们不应该去尝试提高功效。
在软件工程中,我们不能完全的避免海勒姆定律,但我们可以去减轻它。
目标不是“没有变化”
对于大多数系统,在足够长的时间内,系统的所有内容都可能会发生变化。
规模和效率
左移思维
一个事实:在开发工作流程中,越是在早期阶段发现问题,越是能降低成本。
譬如,在一个功能的开发作业流程的从左到右的时间线上,从概念和设计开始,到代码实现、评审、测试、提交、金丝雀部署和最终的生产部署等。在这个时间线上,将问题的发现移动到更早的左边,会比等到更晚阶段在发现,成本要低很多。
安全性检测不能推迟到开发过程结束才开始,这被称为安全左移。道理很简单,如果产品的安全性问题在产品发布之后才被发现,那这个问题带来的损失可能会更大更多。
没有一个流程或工具是完美的,我们只有假设一个纵深的防御方法,来尽可能早的发现更多的问题。
权衡和成本
成本不仅仅是资金上的,成本更多是为软件成功所做的努力,可能涉及的主要因素有:
- • 财务成本(金钱)
- • 资源成本(CPU时间)
- • 人员成本(工程工作的人员投入)
- • 交易成本(采取行动的成本是多少?)
- • 机会成本(不采取行动的成本是多少?)
- • 社会成本(这种选择对)
所有的成本总结为:一个组织的健康,不仅仅是看账户里面有多少钱,还要看组织成员是否感到有价值和富有成效。
对于像软件工程类似的,高创意、高收益的领域,“人”才是限制性的因素。让工程师(创意型人才)保持快乐、专注和投入所带来的效率很容易影响其他的因素。
最后
3个起发点:
- • 编程不等于软件工程。软件工程是在时间、规模和权衡决策上的系统性工程;
- • 软件工程的三个特性:可持续性、规模性和复杂性;
- • 软件工程中的2个法则:海勒姆定律 和 左移策略。
Google软件工程:什么是软件工程相关推荐
- 北京大学 软件工程1 软件 软件工程 软件开发 软件工程框架
软件的定义 重新定义软件 新一代信息技术 区块链 创造性思维 软件的特点 软件的种类 支撑软件:VC++,PyCharm等 应用软件:QQ,微信 软件工程的起源 软件开发的三个阶段 软件工程概念的提出 ...
- 浙江大学计算机学院的软件工程和软件学院的软件工程哪个好,软件工程专业最强十校,浙大第二、清华第五,这所师范类院校很意外...
软件工程专业是2002年国家教育部新增专业,主要随着我国互联网行业的快速发展,以及社会的经济建设的需求,这个专业也是成为一大热门,许多知名院校都相继开设了此专业,作为一大热门工科专业,毕业出来的薪资都 ...
- 女孩学计算机软件工程,女生学软件工程好吗 就业方向有哪些
软件工程是一个很热门的专业,男生学该专业的人数比较多,但是不少女生听说软件工程好就业也心动了,那么女生报考软件工程好不好呢,毕业后能做什么工作呢? 女生适合学软件工程专业吗 软件工程专业之所以适合男生 ...
- 现代软件工程讲义 1 软件工程概论
现代软件工程讲义 1 软件工程概论 几乎所有程序员都知道 "数据结构+算法 = 程序 " 这句名言.但是在实际的学习和工作中,也有不少人产生了疑问. 例如: 1. 我写 ...
- 从《构建之法:现代软件工程》走进软件工程的学习
什么是软件工程 什么是软件工程?它跟一般的计算机学科有什么不同?BarryBoehm的定义是:运用现代科学技术知识来设计并构造计算机程序及为开发.运行和维护这些程序所必需的相关文件资料.可见软件工程更 ...
- 软件工程学习笔记——软件工程基本原理
美国著名的软件工程专家B.W.Boehm于1983年提出了软件工程的7条基本原理: 用分阶段的生命周期计划严格管理 这条基本原理意味着:应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划 ...
- 【细说软件工程】《软件工程》Software Engineering
<软件工程>60' 一..软件过程 1.软件过程的概念 答: 1)**软件过程描述为为了开发出客户需要的软件,什么人.在什么时候.做什么事以及怎么做这些事以实现某一种的具体目标.**ISO ...
- 『软件工程12』软件工程实践方法——软件测试
软件工程实践方法-- 软件测试 一.软件测试概述 1.软件测试的目的 (1)从用户和开发者角度 (2)Myers软件测试目的 2.软件测试的原则 3.软件测试的对象 4.测试信息流 5.测试与软件开发 ...
- 计算机软件工程专业,计算机软件工程专业
下面是由普林斯顿评论发布的2011年美国大学研究生计算机软件工程Computer Software Engineering专业排名的信息,这是隶属于工程及应用科学Engineering and App ...
- 四川大学计算机学院软件工程期末,四川大学软件工程期末复习ppt
PPT内容 这是一个关于四川大学软件工程期末复习ppt,主要介绍Multiple choices (only one is correct) 20*1'.Fillment 25 (8Item).Exp ...
最新文章
- 大赛归来的你们,仍是那个少年--少了游移、多了自信,少了软弱、多了坚强...
- HTML之垂直居中问题
- 徐波 博士 计算机,徐波教授:医工联合促进智能肿瘤学发展——探秘肿瘤精准治疗中的AI技术...
- hdu1213 How Many Tables-并查集
- java第一阶段知识_第一阶段 Java语言(下)
- python中的with open读取表格文件_python 使用 with open() as 读写文件
- java倒计时跳出窗口_java倒计时弹出框
- jQuery学习-显示与隐藏
- 解决Mysql数据库提示innodb表不存在的问题
- Cent OS 6/7 中通过yum安装软件时提示cannot find a valid baseurl...的解决方法
- 斐讯K1、K2、K2P 刷机、刷入Breed@重庆网吧电竞酒店维护小哥
- 制作一个简单HTML个人网页网页(HTML+CSS)web前端大作业
- synaptics触摸板_使用Dell Synaptics触摸板修复Firefox滚动问题
- C++for循环经典九九乘法表打印
- 魔兽世界阿拉索人数最多服务器,魔兽世界8月国服人口普查 2019wow各服务器阵容比例汇总...
- 突发奇想!自动化测试在测试过程中该怎样提升效率?
- linux中括号 美元符号怎么打,键盘输入美元符号
- AD参数微分非线性(DNL)与积分非线性(INL)
- DotNet 资源大全(转)
- 2019依图科技笔试题