什么是软件?
从组成成分的角度看软件(“写的对”):
- 代码+文档,什么是代码?
- 算法+数据结构,什么是算法?什么是数据结构?
- 数据元素之间的逻辑结构与物理结构
- 有穷明确可行的指令集+计算平台,什么是计算平台?
- 编译器+操作系统,或操作系统+硬件
从问题求解的角度看软件(“写对的”):作为一种复杂的信息制品,软件是对客观事物的深度抽象与建模,且同时包含了对复杂客观世界的问题空间与解空间的具体描述。
互联网产品的持续进化(2015-2022 之后呢?)
问题空间-解空间与(互联网+时代)软件系统/产品有啥关系?
- 共享单车、团购(最受欢迎的是书和光盘)
- 垂直社区
- 手机游戏
问题域与解系统
- 问题的产生地:当现实的状况与人们期望的状况产生差距时,就产生了问题。
- 要解决问题,就需要改变现实当中某些实体的状态或改变实体状态变化的演进顺序,使其达到期望的状态或演进顺序。
- 这些实体和状态构成了问题解决的基本范围,称为该问题的问题域(Problem Domain)
从问题域背景出发,结合涉众主观意愿,设定系统目标,制定开发任务,细分系统交互。
软件解决问题的基础:模拟与共享
软件系统能够与问题域进行交互和相互影响的原因在于,软件系统中的某些部分对问题域中的某些部分的具有模拟特性。
- 软件系统当中含有问题域某些部分的模型(或模拟),常见的模型包括数据模型、对象模型、处理模型等。
- 问题域中的某些信息能够和模型中的信息建立映射关系
这些通过映射建立的共同知识,就是问题域和解系统之间的共享现象。
- 利用数据表模拟库存与金额,坐标模拟位置,账户登录模拟开锁或授权,像素模拟图形,流数据模拟音频视频,状态机、规则或 ai 模型模拟智力。
- 游戏中的 PVE 与 PVP 互动,支付软件中的转账与支付,各种匹配、调度与推荐算法(游戏、商品、打车、短视频、信息流、熟人)
最后将解系统的模型操纵与计算结果用于指导现实世界的问题解决:搜索&推荐、规划路线、游戏对抗设备授权等等
需求的两个维度
需求(要求,问题域端):
- 信息、娱乐、社交、服务
- 直接需求、间接需求
- 不切实际的期望
需求规格说明(解系统端):
- 数据:现实世界的模型
- 功能:对模型的操作,将结果反馈回现实世界,(辅助)解决问题
- 过程式分析:以功能分解为核心
- 面向对象分析:以封装的数据与对数据的操作为核心
需求的四个基本概念:问题域、需求、解系统、需求规格说明
需求的定义
IEEE:
- 用户为了解决问题或达到某些目标所需要的条件或能力;
- 系统或系统部件为了满足合同、标准、规范或其它正式文档所规定的要求而需要具备的条件或能力;
- 对 1. 或 2. 中的一个条件或一种能力的一种文档化表述。
需求的重要性 - 90 年代起的软件生产状况调查[^Standish Group]
365 家公司的 8380 个项目:
- 成功项目 Success:在预计的时间之内,在预算的成本之下,完成预期的所有功能
- 问题项目 Challenged:已经完成,软件产品能够正常工作,但在生产中或者超支,或者超期,或者实现的功能不全
- 失败项目 Impaired:因无法进行而被中途撤销,或者最终产品无法提交使用
1994 | 1996 | 1998 | 2000 | 2004 | 2006 | 2008 | 2010 | 2012 | |
---|---|---|---|---|---|---|---|---|---|
成功(%) | 16 | 27 | 26 | 28 | 29 | 35 | 32 | 37 | 39 |
问题(%) | 53 | 33 | 46 | 49 | 53 | 46 | 44 | 41 | 43 |
失败(%) | 31 | 40 | 28 | 23 | 18 | 19 | 24 | 21 | 18 |
需求错误的高代价性
一个错误在不同阶段纠正所花费的代价
排序 | 2010 年度 | 2012 年度 | ||
---|---|---|---|---|
影响因素 | 指数 | 影响因素 | 指数 | |
1 | 用户参与 | 20 | 高层管理支持 | 19 |
2 | 高层管理支持 | 15 | 用户参与 | 18 |
3 | 清晰的业务目标 | 15 | 清晰的业务目标 | 15 |
4 | 情感成熟度(Emotional maturity,即项目氛围) | 12 | 情感成熟度(Emotional maturity,即项目氛围) | 12 |
5 | 最优化(Optimization) | 11 | 最优化(Optimization) | 11 |
6 | 敏捷过程 | 11 | 敏捷过程 | 9 |
7 | 项目管理技能 | 6 | 项目管理技能 | 7 |
8 | 有技能的员工 | 5 | 有技能的员工 | 5 |
9 | 执行力 | 3 | 执行力 | 4 |
10 | 工具与设备 | 2 | 工具与设备 | 1 |
90 年代的软件生产状况调查 —— 影响因素[^Standish Group 1995]
需求因素:
- 用户参与(用户输入)
- 高层管理支持
- 清晰的需求说明
- 切合实际的期望
- 清晰的目标和前景
- 需求变化
- 额外的无用功能
综合来看,需求因素:
- 对成功项目的影响指数为 53.9%
- 对问题项目的影响指数为 55.6%
- 对失败项目的影响指数为 60.9%
既然需求如此重要,为何在当前的软件实践中很少看到需求规格说明一类的文档?
需求是否过时?能否忽略?
当前需求的重要性[^Are requirements alive and kicking]
03 年时,需求专家尚未意识到敏捷开发带来的颠覆式变革:
- 系统复杂性升高,开发迭代加快,软件维护成为最主要的开发活动
- 正式的需求文档、需求归约说明(SRS)逐渐较少出现
然而,需求依然是沟通客观世界与计算机世界的唯一渠道:
- 需求依然存在于其它类型的系统功能文档中:“shall” statements, use cases, sketches, user stories, acceptance tests, formal logic, goal models, state charts,release notes,issues,commit logs
- 只要人类还试图掌握程序运行的方向与原因,需求就无法被忽略。“从未叛逃”的 Moss:你礼貌吗?
主流开发方式变化使需求开发与管理愈发困难:
- 分布式开发与外包导致团队交流困难
- 代码自动生成、自适应软件、安全攸关软件对需求质量的高要求
- 每次功能迭代都必须考虑新功能对已有系统功能与实现的影响
如何有效地管理需求设计的过程?
需求工程的概念
学生容易忽略需求工程重要性:“写的对”本身已经足够有挑战。
但是:“开发软件系统最为困难的部分就是准确说明开发什么。最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难。”[^brooks1987]
是软件工程的一个分支:
- 它关注于软件系统所应予实现的现实世界目标、软件系统的功能和软件系统应当遵守的约束
- 同时它也关注以上因素和准确的软件行为规格说明之间的联系
- 关注以上因素与其随时间或跨产品族而演化之后的相关因素之间的联系
- 与人力工程、硬件工程一起组成系统工程
需求工程的基本活动与实质
需求工程活动的困难性
问题域、目标、任务、交互的相互转化(广义的设计)是创造性的活动:
- 每个案例都有其独特性,不可复用,接近于艺术
- 需要对问题所在的领域有着深刻的认识,从而帮助解决问题域中的问题
- 需要掌握完整的设计思维方法论,并系统、持续地运用(意味着作业)
编程与设计方面的能力不能直接用于需求分析 :
- 设计和编程都有构建高质量(健壮性、可维护性、适应性等等)软件的共同目标,而且使用相同的概念和组织机制保证了从设计到编程的平滑过渡,所以,结构化与 OO 思维在设计领域也取得了成功
- 但是需求工程除了拥有构建高质量软件的目标之外,还有一个更加重要的目标是理解现实中的非技术性和社会性因素(离开了计算机世界)
文档撰写、功能验证、基线管理需要丰富的开发与管理经验:
- 资(nian)深(mai)程序员与新(nian)手(qing)程序员最大的区别
实践中的需求工程:非技术性和社会性因素带来的需求工程困难
以“企业”为中心的软件反映了软件规模日益扩大 :
- 张贺:“所有的公司都将成为软件公司”(海尔公司的组织形式)
- 这要求软件必须能够帮助解决企业内组织机构、业务流程、利益获取与分配的各种问题,最终实现降本增效
- 一个可持续发展的公司必须追求用户、技术、商业三者的平衡
互联网+时代对需求工程的影响
当你看到“(移动)互联网”、“软件”、“IT 技术”、“手机 APP” 等概念,你第一反应给出的代表性词汇是什么?
信息技术(IT),人类近四十年唯一高速发展的科技,在进入到互联网+时代后,为人类社会贡献了什么?
- 我的答案:使尽可能多的人在尽可能多的时间内以尽可能低的成本相互联系:人人互联成本无限接近于零
- “我们需要能飞的汽车,但结果得到 140 个字符(Twitter)”[^Peter Thiel]:问题在于,“140 字”真的没价值吗?
大幅降低人人互联成本的意义?
事实上,在互联网+时代,人类社会的组织形式已经发生了巨大的改变(交往、政治、企业)
- 2020 年 12 月底,我国网民总数突破 9.89 亿
- 交往:朋友圈,扩列,知乎,B 站,小红书…
- 政治:共青团-B 站,党组织学习-学习强国(基于钉钉的改编?),政务平台-微博(公安、内宣、征兵),官方影像渠道-抖音
- 商业(企业与单位)?
做到以“140”为代表的移动互联网需要:“ABC,AI,Big Data,Cloud Computing”:智能设备、移动/固定网络、微服务架构、DevOps、SaaS、各类机器学习技术等热门技术与概念,都是为上述目标而服务。
《需求工程》与其它课程的关系与自身不足
- 如何令解系统取得社会、技术、商业三方面的平衡与可持续发展?
- 如何准确描述问题域?
- 如何应对变化的客观世界?
- 如何利用变化创造新价值?
商业模式对互联网+时代需求工程的必要性与原理
将商业模式引入软件设计的必要性:
- 商业上可行意味着产品本身是有领域价值、可持续发展的
- 新技术与相应的社会变革导致商业模式上大量“以旧换新”,从面向确定的业务转向“人”
商业模式定义:一个商业模式描述的是一个组织创造、传递以及获得价值的基本原理,其本质在于价值的流动。
价值创造与流动过程:
- 企业或组织通过提出的产品或服务主张某种价值(问题解决),并寻找到愿意为该价值主张的“付费”的客户群体。
- 价值主张传导到客户需要建立渠道通路并维持客户关系
- 价值主张往往需要“上游”的核心资源和关键合作(成本来源)
商业模式画布概览
从左到右实现价值的构建、主张与传递:
- 左侧构建价值,产生成本,代表理性
- 右侧主张价值,获取收益,代表感性
围绕商业模式的基本活动
- 画布:基本模型与工具
- 类型:利用画布分析常见的商业模式
- 设计:商业模式的构建手段
- 战略:商业模式的环境、评估、规划、管理
- 流程:完整的商业模式设计流程
需求设计也需要掌握商业模式设计
需求开发也需要一套可以简单描述和操控的商业模式分析工具,并具备商业模式思维(即价值的流动)
- 通过建模分析工具全面、系统、准确地刻画问题域。为后续目标、任务、交互的逐层转化以及相应的归约描述、验证、管理服务。“比全栈更全栈”
- 更好地做到以“人”为中心的设计,平衡用户、技术、商业三者的关系,实现企业或组织的可持续发展。创新创业、互联网产品设计、开发团队内部沟通:倒下的小蓝、小黄(ofo)、小橘(摩拜)。
- 应对愈发成熟的信息科技加速下沉到传统业务领域所带来的挑战与机遇:
- 软件逐步成为所有公司的核心,并围绕软件开发设置组织部门(新岗位)
- 总部在南京的百亿美元市值 IT 公司:满帮集团(运满满与货车帮) —— 货车版滴滴
- 追求“设计思维” :以人为根本,构建功能性与情感意义兼具的创意。提升产品“质感”与“情怀”,“人民追求更高水平生活”,供给侧改革
《需求与商业模式创新》课程内容
流程中的软件也可替换为产品设计、组织机构、客户调研、科研选题等多种任务,本质上是一种设计思维(小写的 d)。
课程目标
这门课程希望培养学生如下几种能力:
- 理解商业模式及其各个活动,掌握常用的商业模式设计流程,能够初步地完成各项商业模式设计工作,并将相应的成果与思维带入后续的需求工程工作;
- 了解需求工程在整个软件生命周期中的定位,及需求工程师(业务分析师)的角色;
- 理解需求工程及其各个活动,掌握常用的需求工程技术,能够组织并完成复杂系统的各项需求工程工作;
- 理解以需求为代表的、描述系统功能的软件文档对于软件日常开发任务的重要性,有效的维护需求(系统功能)基线并发挥其作用。
这门课程无法培养,却又极度需要的能力:对未知世界的求知欲,对业务领域的深入探究,对新事务、新技术的热情、个人知识体系的构建、对他人的共情与同理心、对更好设计的执着、团队合作与团队精神…
上次课程重点关注的互联网产品
瑞幸:“民族之光”
- 股市暴雷,业务照常
- 消费数据加持下的开店、选品、运营(私域流量)
社区团购:“发力不设上限”2020 年秋季
- 人民日报批评、疫情期间新常态 —— “计划换价格”
- 滴滴收缩/美团发力、每日优鲜退场
B 站:“用爱发电”与商业化之路
- 花火 —— 恰饭平台
- PDD 后花园
本章小结
- 从 20 世纪 60 年代末期软件工程产生起,需求分析就一直是软件开发的重要主题
- 20 世纪 90 年代的调查状况表明,单纯的需求分析已经不能很好的解决软件生产中的“需求”问题
- 应用型软件的模拟性和一系列的技术原因表明软件生产需要进行一个比需求分析更加复杂和完整的需求工程,新时代对需求工程提出了更高的要求
- 需求工程是软件工程当中一项重要和复杂的活动,需求工程需要具备一定的知识和技能才可以很好的执行需求工程活动
- 与非计算机/软工专业学生比最大的优势之一
信息技术如何改变世界 —— 构造场景
人类社会的整体视角 —— 人人互联的“小小世界”:
- “六度分离”现象的背后 —— 任何一种人人互动都会形成网络/群体,群体的局部行为会导致全局性的结果
- 移动互联网 —— 低成本互联下的“更小世界”
单个网民视角 —— 通过场景连接到不同群体
场景的定义:
- 原定义:影视用语,指特定时间、空间内发生的行动,或指由人物关系构成的具体画面,是通过人物行动来表现剧情的一系列特定过程
- 互联网定义 —— 与互联网行为相关的,通过支付完成闭环的应用形态,包含以下两类典型场景:
- 超级入口:触发用户沉浸式体验或长时间停留的应用形态(游戏、社交、购物等)
- 支付场景:应用移动支付完成交易的场景
场景的连接:
- 基于场景的(构建产品)思维方式:将(移动)互联网视为连接不同个体制造场景的工具,以及完成连接的高效率方法
- 从而达成:形成(产品)体验、促成(客户)消费、创造个体生存意义
被互联网定义的“新”场景
- 以人为中心的体验细节 —— (不同时段的)在线视听、公开社交(真人秀)、线下打造线上种草的网红地、知识获取与分(tai)享(gang)
- 广泛的连接方式 —— 扫一扫(二维码、实物)与商品、私域流量(社区、群聊、朋友圈)与各类活动、O2O、微信与其它 APP
- 价值交换与新生活方式 —— 红包&打赏、各种智能设备
- 场景构成 —— 时间、地点、人物、事件、链接方式
- 通过何种会议软件在何时与哪些人进行视频会议
- 晚七点佩戴运动手环开启 keep 去公园跑步,结束后发朋友圈
- 事实上,场景本身没有新旧之分,其差异在于能否(通过移动互联网)使场景参与者沟通诠释出新的价值与情感
- 结合客户洞察描绘出独特、具体的场景
- 在这些场景中用户决定选择特定产品而放弃其它产品
共享单车
共享单车 2017:Ofo 与 Mobike
Ofo:快速占领市场
- 押金与租金低、单车成本低、数量多、易骑行
- 劣势:忽略了 GPS 锁的不可或缺性
- 优势:目前市场占有量大(?)
Mobike:稳扎稳打
- 单车质量高、维护成本低、品牌形象好
- 劣势:推广速度慢,忽略了市政容纳能力有限
- 优势:品牌形象好,易于向国外推广(?)
共享单车 2018:Hellobike
Hellobike:
- 与永安行做技术合作、支付宝免押金、转做大集团入口而非大集团
- 大集团的“玩具”:网易云音乐,qq 音乐
- 回避一切暴露的错误,后发优势
- 如何持续?
共享单车 2019:青桔与美团单车
- 青桔单车:滴滴的玩具,还魂的 bluegogo,与 ofo 相爱相杀
- 美团单车:蜕变的摩拜,新车限用美团 APP 扫码,黄色车身
- 哈啰单车:运维进一步精细化(零件分配、更新的故障上报、售后支持)、单车业务盈利、顺风车、视频合作账号、二线城市电单车业务、按季节与频次设置月卡价格
[^Standish Group]: Standish Group 1995-2012 [^Standish Group 1995]: Standish Group 1995 [^Are requirements alive and kicking]: Are requirements alive and kicking? YES 2010 [^brooks1987]: Frederick Brooks [^Peter Thiel]: Peter Thiel