68 | 软件工程的宏观视角

2023-12-19

软件工程

今天开始,我们进入第六章,谈谈软件工程。

我理解的架构师的职责其实是从软件工程出发的。也许大家都学过软件工程,但如果我们把软件工程这门课重新看待,这门学科到底谈的是什么?是软件项目管理的方法论?

无论如何,软件工程是一门最年轻的学科,相比其他动辄跨世纪的自然科学而言,软件工程只有 50 年的历史。这门学科的实践太少了,任何一门学科的实践时间短的话,都很难沉淀出真正高效的经验总结,因为这些总结通常都是需要很多代人共同推动来完成的。

为什么说它只有 50 年时间呢?

我们先来看看 C 语言,一般意义上来说,我们可能认为它是现代语言的开始。C 语言诞生于 1970 年,到现在是 49 年。再看 Fortran,它被认定为是第一个高级语言,诞生于 1954 年,那时候主要面向的领域是科学计算。Fortran 的程序代码量普遍都还不大,量不大的时候谈不上工程的概念。

这也是我为什么说软件工程这门学科很年轻,它只有 50 岁。对于这样一个年轻的学科,我们对它的认知肯定还是非常肤浅的。

在这个架构课的序言 “开篇词 | 怎样成长为优秀的软件架构师?” 一上来就做了软件工程和建筑工程的对比。通过对比我们可以发现,二者有非常大的区别,具体在于两点:

其一,不确定性。为什么软件工程有很大的不确定性?大部分大型的软件系统都有几千甚至几万人的规模,而这几千几万人中,却没有两个人的工作是重复的。

虽然大家都在编程,但是编程的内容是不一样的。每个人昨天和今天的工作也是不一样的,没有人会写一模一样的代码,我们总是不停地写新的东西,做新的工作。这些东西是非常不同的,软件工程从事的是创造性的工作。

大家都知道创造是很难的,创造意味着会有大量的试错,因为我们没有做过。大部分软件的形成都是一项极其复杂的工程,它们远比传统的工程复杂得多,无论是涉及的人力、时间还是业务的变数都要多很多。这些都会导致软件工程有非常大的不确定性。

其二,快速变化。建筑工程在完工以后就结束了,基本上很少会进行变更。但在软件工程里,软件生产出来只是开始。只要软件还在服务客户中,程序员们的创造过程就不会停止,软件系统仍然持续迭代更新,以便形成更好的市场竞争力。

这些都与传统建筑工程的模式大相径庭。一幢建筑自它完成之后,所有的变化便主要集中在一些软装的细节上,很少会再发生剧烈的变动,更不会持续地发生变动。但软件却不是这样,它从诞生之初到其生命周期结束,自始至终都在迭代变化,从未停止。

以上这两点都会导致软件工程区别于传统意义上的所有工程,有非常强的管理难度。过去那么多年,工业界有非常多的工程实践,但是所有的工程实践对软件工程来说都是不适用的,因为二者有很大的不一样。

今天如果我们站在管理的视角再看软件工程的话,我们知道管理学谈的是确定性。管理学本身的目的之一就是要抑制不确定性,产生确定性。

比如,开发工期、时间成本是否能确定。比如,人力成本、研发成本以及后期运维的成本是否能确定。

所以,软件项目的管理又期望达到确定性。但软件工程本身是快速变化的,是不确定的。这就是软件工程本身的矛盾。我们的目标是在大量的不确定性中找到确定性,这其实就是软件工程最核心的点。

架构师的职责

如果用 “瀑布模型” 的方式来表达,现代软件工程的全过程大体如下:

从开始的需求与历史版本缺陷,到新版本的产品设计,到架构设计,到编码与测试,到最终的产品发布,到线上服务的持续维护。

贯穿整个工程始终的,还有不变的团队分工与协同,以及不变的质量管理。

更为重要的是,这个过程并不是只发生一遍,而是终其生命周期过程中,反复迭代演进。

它是一个生命周期往往以数年甚至数十年计的工程。对于传统工程,我们往往也把一个工程称为项目,项目工程。但软件工程不同,虽然我们平常也有项目的概念,但软件工程并不是一个项目,而是无数个项目。每个项目只是软件工程的一个里程碑(Milestone)。

所以,光靠把控软件工程师的水平,依赖他们自觉保障工程质量,是远远不够的。软件工程是一项非常复杂的系统工程, 它需要依赖一个能够掌控整个工程全局的团队,来规划和引导整个系统的演变过程。这个团队就是架构师团队

软件架构师的职责,并不单单是我们通常理解的,对软件系统进行边界划分和模块规格的定义。从根本目标来说,软件架构师要对软件工程的执行结果负责,这包括:按时按质进行软件的迭代和发布、敏捷地响应需求变更、防范软件质量风险(避免发生软件质量事故)、降低迭代维护成本。

因此,虽然架构师的确是一个技术岗,但是架构师干的事情,并不是那么纯技术。

首先是用户需求的解读。怎么提升需求分析能力,尤其是需求演进的预判能力?它无关技术,关键是心态,心里得装着用户。除了需要 “在心里对需求反复推敲” 的严谨态度外,对用户反馈的尊重之心也至关重要。

其次是产品设计。产品边界的确立过程虽然是产品经理主导,但是架构师理应深度参与其中。原因在于,产品功能的开放性设计不是一个纯粹的用户需求问题,它通常涉及技术方案的探讨。因此,产品边界的确立不是一个纯需求,也不是一个纯技术,而是两者合而为一的过程。

以上两点,是架构本身的专业性带来的,在前面五章中已经谈过很多,我们这里不再展开。在本章中,我们更多是从工程本身出发。这些话题是因软件工程的工程性而来,属于工程管理的范畴,但它们却又通常和架构师的工作密不可分。

这里面最为突出但也非常基础的,是贯穿软件工程始终的 “团队分工与协同” 问题、“软件的质量管理” 问题。从 “团队分工与协同” 来说,话题可以是团队的目标共识,也可以是做事方式的默契,各类规范的制定。从 “软件的质量管理” 来说,话题可能涉及软件的版本发布,质量保障的过程体系等等。

从更宏观的视角看,我们还涉及人力资源规划的问题。什么东西应该外包出去,包给谁?软件版本的计划是什么样的,哪些功能先做,哪些功能后做?

看起来,这些似乎和架构师的 “本职工作” 不那么直接相关。但是如果你认同架构师的职责是 “对软件工程的执行结果负责”,那么就能够理解为什么你需要去关注这些内容。

结语

软件工程本身是一个非常新兴、非常复杂的话题。可能需要再花费 50 年这样漫长的时间才能形成更清晰的认知(例如,我们第四章 “服务治理篇” 专门探讨了现代软件工程全过程最后一个环节 “线上服务管理” 这个话题)。

作为架构课的一部分,这一章我们将主要精选部分与架构师的工作关系密切的话题来进行讨论,主要包括:

团队的共识管理;

如何阅读别人的代码;

怎么写设计文档;

发布单元与版本管理;

软件质量管理:单元测试、持续构建与发布;

开源、云服务与外包管理;

软件版本迭代的规划;

软件工程的未来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

68 | 软件工程的宏观视角 的相关文章

  • [管理与领导-68]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 评估你与老板的八字(向上管理之二)

    目录 前言 一 定位你与上司的关系 二 向上管理的三种误区 三 向上管理的关键点 四 向上管理的关键 预期管理 4 1 预期管理概述 4 2 如何控制上司的预期范围 4 3 如何了解你自己的预期 五 向上管理的关键 预期管理 六 什么样的上
  • 【软件工程期末复习内容】

    前言 时不可以苟遇 道不可以虚行 一 软件工程的概念 软件是计算机系统运行的 指令 数据 和 相关文档 的集合 即软件等于程序 数据 加上文档 程序 是事先按照预定功能性能等要求设计和编写的指令序列 数据 是使程序正常处理信息的数据结构及信
  • 软工导论知识框架(六)面向对象分析

    前言 绘制各种类型的图是重点 对于面向对象建模中需要绘制的图总结在第五期中 软工导论知识框架 五 面向对象方法学 一 分析过程 1 获取需求 与用户交谈 向用户提问题 参观用户的工作流程 观察用户的操作 向用户群体发调查问卷 与同行 专家交
  • 目前支持CUDA的nVIDIA的显卡型号 驱动及其 修改过后的 inf文件

    下载169 21 forceware winxp 32bit english whql exe NVIDIA Driver for Microsoft Windows XP with CUDA Support 169 21 我们在运行它的时
  • 【论文阅读-ICSE-2021】CodeShovel: 构造方法级别上的源代码历史信息 Constructing Method-Level Source Code Histories

    CodeShovel Constructing Method Level Source Code Histories Conference ICSE 2021 Github https github com ataraxie codesho
  • 使命、愿景、价值观到底有什么区别

    以前的企业都是在发展到一定成熟阶段 才开始考虑这三个问题 但今天人们越来越多的意识到 哪怕在企业发展的初期 对于创业企业来说 确定公司的使命 愿景和核心价值观也是非常重要的 明确的使命 愿景和核心价值观对于企业的好处在于 形成统一共识目标方
  • 软件工程毕业设计题目100例

    文章目录 0 简介 1 如何选题 2 最新软件工程毕设选题 3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题 难度适中 适合作为毕业设计 大家参考 学长整理的题目标准 相对容易 工作量达标 题目新颖 1 如何选题 最近非常多的学
  • JAVAWEB编程题

    1 登陆验证代码
  • 软件项目管理

    目录 前言 项目管理概述 项目与软件项目 项目管理与软件项目管理 项目管理知识体系 过程管理与软件项目管理的关系 软件项目管理过程 项目初始 项目确立 项目立项 项目招投标 项目授权 敏捷开发总结 scrum模型 迭代式增量软件开发过程 术
  • 软件质量保证与测试技术实验报告(二)黑盒测试用例设计

    1 实验名称 黑盒测试用例设计 2 实验目的 学会用等价类划分法和边界值法设计测试用例 进行功能测试 3 实验内容 题目1 NextDate程序的功能是按年 月 日的顺序输入一个日期 输出为输入日期后一天的日期 请使用等价类和边界值法对Ne
  • 什么是决策表?什么是决策树?

    决策树 是在已知各种情况发生概率的基础上 通过构成决策树来求取净现值的期望值大于等于零的概率 评价项目风险 判断其可行性的决策分析方法 是直观运用概率分析的一种图解法 这种决策分支画成图形很像一棵树的树干 故称决策树 它是一种树形结构 每个
  • Go 语言输出文本函数详解

    Go语言拥有三个用于输出文本的函数 Print Println Printf Print 函数以其默认格式打印其参数 示例 打印 i 和 j 的值 package main import fmt func main var i j stri
  • 【车载开发系列】FlashMemory基本概念

    车载开发系列 FlashMemory基本概念 车载开发系列 FlashMemory基本概念 车载开发系列 FlashMemory基本概念 一 FlashMemory的特征 二 常见的FlashMemory 1 NOR FlashMemory
  • 软件工程期末复习+数据仓库ETL

    一 软件工程 请用基本路径测试方法为下列程序设计测试用例 并写明中间过程 第1步 画出流程图 1 菱形用于条件判断 用在有分支的地方 2 矩形表示一个基本操作 3 圆形是连接点 第2步 计算程序环路复杂性 流图G的环路复杂度V G 定义为
  • MES系统工单进度查询:提升生产控制与监控

    在MES系统中 工单进度查询是一个至关重要的功能 它为企业提供了实时 准确地追踪和监控生产工单进度的能力 一 MES系统工单进度查询的重要性 1 实时监控生产进度 通过工单进度查询 企业能够随时了解每个工单的进展情况 包括已完成的工序 正在
  • thinkphp+vue教学互动课程资源网站

    软件工程课程建设通篇文章的撰写基础是实际的应用需要 然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程 以软件工程课程建设的实际应用需要出发 架构系统来改善现软件工程课程建设工作流程繁琐等问题 不仅如此以操作者的角度来
  • 68 | 软件工程的宏观视角

    软件工程 今天开始 我们进入第六章 谈谈软件工程 我理解的架构师的职责其实是从软件工程出发的 也许大家都学过软件工程 但如果我们把软件工程这门课重新看待 这门学科到底谈的是什么 是软件项目管理的方法论 无论如何 软件工程是一门最年轻的学科
  • 【软件测试】学习笔记-脚本与数据的解耦 + Page Object模型

    本篇文章介绍GUI测试中两个非常重要的概念 测试脚本和数据的解耦 以及页面对象 Page Object 模型 测试脚本和数据的解耦 GUI自动化测试适用的场景 尤其适用于需要回归测试页面功能的场景 如果在测试脚本中硬编码 hardcode
  • C# 介绍、应用领域、入门、语法、输出和注释详解

    什么是 C C 发音为 C Sharp 是一种由 Microsoft 创建的面向对象的编程语言 运行在 NET Framework 上 源于 C 家族 与流行的语言如 C 和 Java 相近 首个版本发布于 2002 年 而最新版本 C 1
  • 深入了解 Python MongoDB 查询:find 和 find_one 方法完全解析

    在 MongoDB 中 我们使用 find 和 find one 方法来在集合中查找数据 就像在MySQL数据库中使用 SELECT 语句来在表中查找数据一样 查找单个文档 要从MongoDB的集合中选择数据 我们可以使用 find one

随机推荐

  • 基于vue2+海康威视web开发包3.2 无插件版本开发的监控系统

    文章目录 前言 一 插件准备 二 使用步骤 前言 项目最终效果为 可以预览 并且可以使用云台控制 购买的海康威视摄像头必须可以开启websocket 一 插件准备 插件下载地址 下载WEB无插件开发包V3 2 并加入到vue项目中 下载后解
  • Dubbo 动态代理策略有哪些?

    Dubbo 是一个高性能 轻量级的 Java RPC 框架 它支持多种动态代理策略 以下是 Dubbo 支持的一些动态代理策略 JDK动态代理 这是 Java 动态代理的基础 通过代理接口生成代理类 当调用远程服务时 Dubbo 会根据接口
  • Volta简单介绍

    Volta是一款强大的JavaScript工具管理器 它简化了命令行工具的安装和管理 通过Volta 开发者可以轻松地在多个项目中切换和配置Node js npm以及其它JavaScript工具版本 提高开发效率和环境一致性 什么是 Vol
  • 亚信安慧AntDB 数据库:超融合数据库引领实时计算新时代

    近期 亚信科技成功举办了以 数智驱动 全栈赋能 为主题的2022年度系列产品发布会的 数据库专场 在这次发布会上 亚信科技发布了AntDB V7 2数据库 这是一款 超融合一体流式引擎 的重要产品 并分享了在通信 交通等行业中的应用实践 当
  • Dubbo 容错策略

    Dubbo 是一款高性能 轻量级的开源 Java RPC 框架 它提供了多种容错策略以应对网络通信过程中的各种异常情况 以下是 Dubbo 的一些常见容错策略 Failover 失败自动切换 当服务调用失败时 自动切换到其他可用的服务提供者
  • 归一化的作用,请举例说明?

    归一化是将数据缩放到一个标准范围的过程 其目的是使得数据具有统一的尺度 有助于提高机器学习模型的性能和训练稳定性 以下是归一化的作用以及一个简单的例子 归一化的作用 消除尺度差异 不同特征的取值范围可能不同 这样可能导致某些特征对模型的影响
  • 短视频账号矩阵系统3年独立开发正规接口源码搭建部署开发

    一 矩阵系统源码主要有三种框架 短视频账号矩阵源码的框架有很多种 以下列举其中几种 1 星图矩阵 星图矩阵是抖音官方向商家提供的短视频广告推广平台 是抖音官方的赚钱工具 商家可利用星图矩阵进行广告推广 同时短视频创作者也能通过星图平台获取收
  • 说说 Dubbo 工作原理

    Dubbo 是一款高性能 轻量级的开源 Java RPC 框架 用于构建分布式系统 它提供了一种简单而灵活的解决方案 用于服务之间的远程调用和通信 Dubbo 的工作原理主要涉及以下几个关键组件和流程 组件说明 服务提供者 Provider
  • Java版直播商城规划:电商源码、小程序、三级分销与免 费搭建全攻略

    saas云平台 打造全行业全渠道全场景的saas产品 为经营场景提供一体化解决方案 门店经营区域化 网店经营一体化 本地化 全方位 一站式服务 为多门店提供统一运营解决方案 提供丰富多样的营销玩法覆盖所有经营场景 助力商家成功 系统稳定压倒
  • equalsIgnoreCase() 和 equals() 方法

    qualsIgnoreCase 方法用于将字符串与指定的对象比较 不考虑大小写 实例 equals 会判断大小写区别 equalsIgnoreCase 不会判断大小写区别 public class Test public static vo
  • PropertyUtils工具类的使用场景

  • 定制Electron窗口关闭行为,阻止默认事件与自定义逻辑

    当在Electron应用中开发时 你可能会碰到需要定制窗口关闭行为的情况 Electron提供了 close 事件 允许你在窗口关闭时执行自定义逻辑 然而 为了完全掌控关闭过程 你需要阻止默认的关闭事件 阻止默认关闭事件 在Electron
  • 小程序双向滑动组件双向slider滑动微信小程序组件slider组件

    使用说明 第一步 将zyslider和utils两个目录放在zjlist里面 如下图 第二步 在需要使用的页面json中引入组件 如下图 第三步 在wxml代码中写入以下代码 第四步 参数解析
  • 2023年度IT168技术卓越奖名单:亚信安慧AntDB数据库

    信创卓越贡献奖 湖南亚信安慧科技有限公司 一句话点评 亚信安慧的核心交易数据库AntDB具有应用时间久 15年 运行节点多 2000 数据规模大 PB级 产品稳定可靠 500 项目验证 等特征 助力客户率先实现行业内的多项 首个 突破 信创
  • 亚信安慧AntDB数据库成功助力通信业务核心转型

    账务数据库扮演着通信运营商业务支撑系统的核心角色 负责处理亿万用户资料同步 充值缴费和账务记录等重要任务 在5G建设逐渐普及的趋势下 5G业务规模也逐步扩大 面对5G业务的新特点 账务系统对数据库的高并发和高可用性提出了更高的要求 在这一挑
  • 数据库的增删改查

    库的基本管理 列出有哪些库 查询当前 MariaDB 服务器上有哪些库 选择库 管理库中的表格之前 可以先进 到 标库 创建新库 增加指定名称的新数据库 删除库 将指定名称的数据库从服务器上移除 表的基本管理
  • Linux-----14、vim

    vim Linux平台下的 文本编辑器 emacs nano gedit vi vim vi visual editor 编辑器通常被简称为vi 它是Linux和Unix系统上最基本的文本编辑器 类似于Windows 系统下的记事本 学会它
  • 【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用(更新中)

    波形叠加极限学习机
  • Matlab论文插图绘制模板第131期—函数等高线图

    在之前的文章中 分享了Matlab 函数折线图 的绘制模板 函数三维折线 图 函数网格曲面 图 函数曲面 图 进一步 再来分享一下 函数等高线 图 先来看一下成品效果 特别提示 本期内容 数据 代码 已上传资源群中 加群的朋友请自行下载 有
  • 68 | 软件工程的宏观视角

    软件工程 今天开始 我们进入第六章 谈谈软件工程 我理解的架构师的职责其实是从软件工程出发的 也许大家都学过软件工程 但如果我们把软件工程这门课重新看待 这门学科到底谈的是什么 是软件项目管理的方法论 无论如何 软件工程是一门最年轻的学科