《软件方法》读后感三年前端开发的思考,如何有效地阅读需求?腾讯云开发者社区

编程技术水平,我们学的快或慢,只要肯学一定会有提高。但是这些困扰我们的,编程技术之外问题,应该怎么解决呢?

有的开发人员可能会觉得,这是解决不了的问题,因为问题出现的原因并不在自己身上,产品经理提的需求不清晰,产品经理总是变更业务实现,项目经理安排的排期不合理。

确实,缺乏知识经验产品团队,和不流畅的沟通,很容易带来糟糕的开发体验,但是我们技术人员认真剖析自己想一想,我们自己就没有问题么?

如果还是觉得没有,或者问题不大,那我们来好好思考这几个问题:

仔细想想,是不是发现好多时候,我们对需求好坏的判断,都是自己主观的想法,或者基于以往经验的判断,并没有真正的标准和依据。“这个看起来不太清晰...”,“以前不是这么做的...”,这样的说法,显然很难说服产品经理。

有时候我们确实改变不了开发上游的工作规范,但是至少在开发环节,我们能把需求分析这一环节做好,做好了需求分析,我们可以更合理的进行软件的设计,可以避免小变更带来大规模的修改,甚至可以反推产品,补充需求中不完善的路径,预先确认好可能发生的变更点。

结论

很多时候,我们的烦恼,都来前期对需求分析的不充分。

如果想了解如何进行需求分析,不妨接着读下去,一步步去理解,什么是软件开发?什么事需求分析。

长久以来,我们在编程中做的优化,主要的目的就是两个,节省编码的工作量,让软件提供更好的服务。

但依据《软件方法:业务建模和需求》这本书中的观点,我们开发软件,做需求就是为了销售,提高需求的质量,就是为了提升销售额;编码设计就是成本,我们优化编码,节省编码的工作量,就是降低成本。

经营的公式是:利润=收入-成本。

软件开发的公式就是:利润=需求-设计。

我们软件开发的目的,无论是节省工作量也好,提升用户体验也好,最终的目的,都是为了提高利润,这个利润,对我们开发人员来说可能并不直接体现,但也以其他各种红利的形式反馈给我们。

我们开发了一款软件,这个软件是为谁服务的?

这是一个很容易给出错误答案的问题,我们举几个例子:

答:用户,使用移动支付购买的用户。

相信这是很多读者的回答,很遗憾,这个回答不正确。

类似的例子,一个武侠风的RPG游戏,服务的不是大多数的零氪玩家,而是那些真实为游戏充值的人,零氪玩家更像是游戏开发者提供给氪金玩家的玩具。

理解软件真正的目标人群,真正为谁服务,需求分析时,产品提出的很多交互就更好理解了。比如用户集五福的时候,有个痛点,是每张优惠券都需要从福卡翻面去领取,为什么不领到福卡后,就直接把优惠券收到卡包呢?因为集福卡,可不是为了让用户方便,其真实的目的,是让支付宝的商户和品牌有更多的曝光和核销,这一步“繁琐”的操作,就是为了让用户多看一眼领到了什么优惠券,多思考一秒要不要去用这个优惠券。

需求分析的时候,我们常犯的一个错误,就是忽略去思考需求的目标人群,以及我们能为目标人群提供什么样的服务。多思考一下这个问题,我们也就能进一步理解产品经理提出需求的意图,理解意图后,在程序设计阶段,我们就可以设计更合理的架构,为可能出现的需求变更预留好接口。

其实很多的需求变更,都是可以预见的,是“假的需求变更”。理解需求的意图,能提高我们预见变更的能力。

软件出现的bug,一般是什么问题导致的呢?我们经常会在复盘的时候,给bug基于原因做分类,比如前端逻辑错误、后台逻辑错误、需求理解错误等等。

随着开发经验的增加,单纯因为编程设计导致的bug,会越来越少,随着和产品团队的磨合,我们遗漏需求功能点、文档理解错误的情况也会减少。

但是bug依旧存在,而且越来越多的bug,其出现的原因变得“不好解释”,比如下面这个故事。

程序员小张完成了一个抽奖的功能,产品小红体验功能:运气好,抽中了,显示“恭喜获得”;运气不好,没抽中,显示“很遗憾,你运气不好”。貌似一切都没什么问题,于是小张和小红开开心心得把功能上了线。

但是没过多久,线上出问题了,许多用户抽了奖,却什么都没显示。小张连夜排查问题,终于发现了,用户抽中了礼包,但是礼包早被消耗完了,于是用户什么也没有看到,于是小张连夜给抽奖代码加上了判断,告知用户“礼包发完,下次再来吧”。

问题复盘的时候,小张需要选择bug原因,虽然觉得有点懵,但确实是改了几行代码问题才解决的,于是,小张恹恹的选了“程序逻辑错误”作为bug原因。

QAQ摸摸小张的头,问题出现了确实有点问题,但至少不能因此就说小张的编程能力不行,就上面的问题来分析,“程序逻辑错误”并不是最本质的原因,我们透过现象看本质,导致问题最本质的原因,是“需求逻辑的错误”,当然这也不能说小张完全没有问题,小张的问题在于没有进行需求分析,没有及时发现功能点缺少的扩展路径。

实际上,我们改的很多bug,本质上都是需求逻辑错误,出现问题的原因是我们没有对需求进行分析。

一个功能点,有基本路径和扩展路径。

基本路径,是用户与软件交互最顺利,最终能达到目的的路径。

比如用户用银行卡到自助取款机取钱,其基本路径是:用户插卡->输入密码->输入金额->取款机吐出现金。

扩展路径,是基本路径外,其他发生意外的路径。

比如还是用户用银行卡到自助取款机取钱,存在的扩展路径有:

用户插卡->输入密码->密码错误;

用户插卡->输入密码->输入金额->用户余额不足;

用户插卡->输入密码->输入金额->取款机没现金了;

···等等。

开发需要进行需求分析,而且不只是浏览需求文档,更重要的是,发现可能存在的扩展路径,及时反馈给产品并一起补齐扩展路径,需求分析做好了,bug自然就少了。

很多时候,我们判断需求写的好不好,都是凭借过往的经验,或者看需求文档里面字多不多、流程图画的多不多,交互图清不清楚。这虽然也有点道理,但是不完全是对的。

你奋笔疾书一个月抄了整本新华字典,不能就直接把曹县的文科状元颁给你吧。

那什么是“好的需求”,具体的判断可以读读《软件方法:业务建模和需求》一书,总结下来,需要有下面这些元素:

这些元素具体的组织格式,在需求中用什么形式给到这些信息,还需要进一步细化。

但我觉得,不管是产品编写需求,还是开发人员分析需求,以这些元素作为checklist,都能有一些意外收获。

其实需求文档的理解成本高、需求分析效果不好,最主要的原因还是在于缺少规范,如果提需求和分析需求,都有一个严格的流程和规范,禁止天马行空,自由发挥,那需求逻辑错误和沟通成本应该会减少很多。

当然,规范的制定和执行也是需要成本的,这块的推进,只能说道阻且长。

但是作为开发人员,我们可以先尝试一下,在需求分析阶段,用规范的建模来理解需求,从而服务于我们的程序设计。

UML图,开发人员都会用,但是在什么时候用呢?

相信很多人和以前的我一样,只有到了需要向别人展示自己的业务实现方案的时候,才会去画各种UML,比如答辩或者项目成果展示的时候。

但这其实违背了UML图设计的初衷,UML图原本的目的是为了辅助程序设计的,而不是先有代码,再来画图。

这种“先代码,后画图”的工作方式,其实就是抛弃了“需求分析”这一环节,这样的工作方式,很容易导致整体设计的不合理,后续功能难以扩展。

UML图使用的另一种误区是,画了一个序列图,却需要展示者先来“讲一讲”,观众才能理解。

UML图是对业务实现的完整描述,是基于软件开发者的一些基本共识产生的。好的UML图,不需要实现者的讲解,也能准确描述具体的业务实现。

UML图是辅助程序设计,实现需求的时候,不要跳过建模阶段,直接开始编码。

UML图的这些基本共识,是开发人员节省沟通成本的关键,所以,画图的时候,还是要严格遵循规范。

软件的目标是业务现状的改进,这种改进,按《软件方法:业务建模和需求》书中的说法,可以分为三种模式。

物流变成信息流,是现在大多数互联网公司在做的事情,比如移动支付,把现金的交易,变成电子货币的交易。

改善信息流转,比如多个系统协作完成的工作,变成只需要一个系统来完成,比如现在很多政务门户app。

封装领域逻辑,比如相机的“笑脸捕捉”功能。

目前大多数软件,都是基于模式一、模式二做的改进。

其实除了互联网产业,其他产业的改进,很多也是遵循着三个模式的。

当我们面对一个流程或者项目,找不到可以优化的点的时候,可以循着这三个模式,寻找可优化的点。

通过需求分析,掌握了需求的来龙去脉后,在设计阶段,我们怎么更好地去设计需求的实现呢?

代码设计涉及到很多具体的知识和经验,这里是讲不明白的,lucio依旧还是只分析一些从书中学到的,对lucio有帮助的方法。

《软件方法:业务建模和需求》一书,提到了一个叫“阿布思考法”,就是遇到一个问题是,先假设自己拥有充足的资源,我会怎么实现这个需求?然后在回到现实中,用自己有限的资源,去山寨这个理想的方案。

这个思考法,可以帮助我们突破自身环境的限制,找到真正合理的解决方案。

知识的诅咒(Curseofknowledge)是一种认知偏差,指人在与他人交流的时候,下意识地假设对方拥有理解所需要的背景知识。

这也是开发人员和产品沟通的时候,经常犯的错误,我们不能假设产品同学或甲方了解我们代码实现的全部细节,就像我们不能直接拿着UML图和非开发人员讨论方案。

我了解的,别人不一定了解,这很正常,正确的沟通方式是,面对不同的人,采用对方可以理解的沟通方式去沟通需求,代码实现上的限制和难点也要尽量转换为更通俗的方式来解释。

《软件方法:业务建模和需求》潘加宇

本文的大多数观点,是基于这本书的思考,这本书对分析需求和工作方式有很大的指导作用,但是也存在一些缺点,比如一些专业名词,和大家共识里面的名词不太统一,但是多读几遍,还是不影响理解的。

《UML和模式应用》拉曼

《编程原则:来自代码大师MaxKanat-Alexander的建议》马克斯·卡纳特-亚历山大

THE END
1.软件系统吧本吧热帖: 1-在企业管理系统的IT软件人力外包服务方面,哪些公司能实现降本增 2-哪些软件开发公司能真正帮助企业实现高效的数字化发展? 3-北京java软件开发工程师有哪些外包公司人才资源充足 4-项目外包和软件开发人力外包服务公司中的达普信软件能力怎么样? 5-8年web开发https://tieba.baidu.com/f?kw=%E8%BD%AF%E4%BB%B6%E7%B3%BB%E7%BB%9F
2.代驾APP小程序系统开发平台主营产品 系统开发,软件开发,APP开发,源码搭建,定制软件,社交电商,云电商,新媒体电商,O2O,F2C,B2C,B2B2C,F2B2C,C2B,B2C2N,S2B2C,微商城,App,手机网页,PC商城,小程序,微商管理系统,扫码红包,质量追溯,分销系统, 全返系统,分红系统,拼团系统,农场养殖系统,养殖游戏系统,直播系统,苹果+安卓app,H5网页,小程序,二级https://shenzhen.11467.com/info/8156456.htm
3.软件开发股吧软件开发分析讨论社区软件开发吧(bk0737) 排序: 评论时间 全部 热帖 发新帖 阅读标题作者最后更新 420正宗国产软件有自信的凝星冷812-06 17:48 640老庄从头坏到脚!!!金银成金得无崖子12-06 09:56 530正宗欣慰的庄麦克112-06 01:24 30411A股:今日指数继续维持震荡,尾盘高标情绪分歧,两市股Y49191112-05 16:02 http://gubaf10.eastmoney.com/list,bk0737.html
4.?软件开发既要敏捷又要安全?来看看DevSecOps吧年度行业研究开源网安成立于2013年,致力于让企业交付更安全的软件,为软件安全开发提供全方位的服务,包括咨询、培训、解决方案、专业工具及安全服务等。公司当前为客户提供软件安全开发生命周期 (S-SDLC?) 解决方案、DevSecOps?解决方案、拥有“自主知识产权”的软件安全开发工具链(IAST、SAST、SCA、FUZZ、RASP?)和软件安全开https://36kr.com/p/973102938222855
5.低代码开发工具的先驱Delphi再次引领软件开发的未来delphi低代码平台我有一些好消息要告诉你,软件开发的未来已经到来!好吧,准确地说,软件开发未来可能发生的下一件大事就在这里……又一次。 随处可用,只需添加 RAM内存 我对Eiection电子这个名字有这种心理障碍。我不完全确定为什么会这样,但是每当我试图记住这个无处不在的 Web 框架的名称时,我的灰色小单元格都会大喊“Eclipse”,https://blog.csdn.net/xyzhan/article/details/119341837
6.Linux编程软件下载Linux编程工具Linux程序开发工具下载华军纯净下载提供国内外最新Linux编程软件下载,其中包含Linux编程工具、Linux程序开发工具、数据库工具等软件下载。想了解Linux编程软件下载更多内容,尽在华军应用软件下载!https://soft.onlinedown.net/sort/171-hot/
7.其他开发软件项目开发软件免费下载Qua rt us ii 13 .0 破解版 是一款 综合性 的PLD/FPGA开发软件 ,内置 强大 的合成器 和模拟器 ,支持 原理图 、VHDL、Veri log HDL、AHDL等各种 设计 文件 的输入 ,可以 轻松 完成 从设计 输入 到硬件配置 的整个 PLD设计过程。quartus软件安装说明:将压缩包解压,双击QuartusSetup-13.0.0.156.exe应用程序https://www.yutu.cn/popsoft_442.html
8.创梦科技软件app开发/盲盒小程序开发/趣步app软件模式开发苹果安卓app开发 阅站漫画app武汉开发手机app公司 阅站漫画APP是一款界面清新、内容厚实的在线漫画阅读软件。它提供多种类型的漫画资源,知足差异阅读偏好的用户需求。用户可轻松搜索并加入书架,支持调治亮度和音量键翻页,提供缓存功效以便… 2024年4月12日000 https://www.chuangmengapp.com/
9.「买菜吧怎么样」广州八斗软件科技有限公司广州八斗软件科技有限公司是一家致力于企业软件技术培训及软件定制开发、咨询、互联网服务于体的高新技术公司。公司聚集了一批优秀的拥有国内顶尖IT企业多年从业经验的软件研发人员,有丰富的软件开发经验和行业产品的经验。 展开 信息为全网搜索整合加工而来,可能并不精确,仅供参考。 信息有误?认领后修改 买菜https://www.jobui.com/company/11914190
10.电脑软件下载手机软件手机游戏单机游戏下载热门软件 手机必备 网购必备 办公必备 开发必备 游戏必备 WinRAR解压缩软件 下载 ADBlock广告过滤大师 下载 微信电脑版 下载 快玩游戏盒 下载 腾讯电脑管家 下载 360安全卫士 下载 格式工厂 下载 百度输入法 下载 谷歌浏览器 下载 企业微信 下载 QQ浏览器 https://www.xiazaiba.com/
11.软件开发如何入门?一、自学开发的过程 在学习早期,认识同频一起学习的朋友非常重要。一开始选择语言是非常头疼的事情,https://www.zhihu.com/question/19731276/answer/3187479670
12.QCon北京2025全球软件开发大会暨智能软件开发生态展本专题将深入探讨 AI 技术如何融入软件开发全生命周期的各个环节,从本地 IDE 到领域特定智能代码生成工具的转变,以及智能云开发环境如何使未来的开发流程更加智能化和高效。 大模型产品创新与探索 本专题将实实在在地深挖 AI 在原生产品设计里的那些最佳实践以及通过智能技术提升现有产品功能和用户体验的案例,帮产品开https://www.qconbeijing.com/
13.济南软件开发,山东软件开发,软件定制公司软件开发 小程序开发 定制软件开发 282024-05 青岛定制开发小程序(青岛微信小程序开发公司) 青岛定制开发小程序小程序是一种应用程序,可以在微信、支付宝等平台上运行。随着移动互联网的快速发展,小程序已成为企业推广和服务的 + 232024-04 软件开发网络app机构(网络软件开发公司排行榜100) 如何选择合适的https://www.zlxk.net/
14.社交软件的分类好处与坏处开发运营成本社交软件的分类_好处与坏处_开发运营成本_怎么赚钱知识 摘要:社交软件如今是我们日常生活中与人交流,了解外界资讯和动态的重要工具。根据不同的功能和作用,社交软件分为好几种不同的类型。社交软件给我们的生活带来许多方便,改变了交流的方式,也增加了娱乐内容,但过于依赖也会容易与现实生活脱节。下面本文从社交软件的https://www.cnpp.cn/focus/4336.html