在开发产品时,你是否考虑过关注功能性需求与非功能性需求的工作量?如果没有,那么你可能应该关注下了,本文将告诉你为什么。

作者 | Chris Horsnell

译者 | 梁蕊

责编 | 仲培艺

出品 | CSDN(ID:CSDNNews)

什么是功能性需求?

简单说来,就是特性。

这是你的 App、程序、系统、项目、产品等的核心——功能/特性使其得以工作,确保其实现了预期的目的。

可以说,这些功能会让你的用户想要使用它,而没有功能,你的产品就不复存在了。

尽管这是真的,并且非常重要,但是我经常看到非功能性的需求被完全忽略,这是非常危险的!

什么是非功能性需求?

1. 文档、评论、编码规范、自动化测试、构建自动化等。

2. 使你的产品更易读、更具有弹性和可持续性。

作为一名开发人员或一个团队,这是你对代码库所做的所有与产品/项目不直接相关的事情。在这一点上,向那些了解到功能需求实际上可能只是总工作负载的一部分的读者致敬。

对于那些说“好吧,还有什么?”的人来说,根据我的经验,这是一个相当普遍的反应,所以不要感到难过。也不是每个关注非功能性需求的人都会做得很好。如果某件事值得做,就值得把它做好,对吧?

基本上,你对产品所做的任何与功能无关的事情都是重要的。想花更少的时间构建?自动化。想要确保提交的代码质量?进行同行审查。想要确保审查你代码的人能够阅读它?添加注释,而且不仅仅是添加一些注释,你需要考虑它是做什么的,它是如何做的,它为什么这样做,等等。

这样的例子不胜枚举,实际上听起来工作量很大是吗?但选择这样做当然有其原因。

为什么非功能性需求很重要?

如果没有它们,你的产品基本上就是一个纸牌屋,随时可能被“微风”击倒。

没有它们,你就会产生短期或长期的技术债务。

我们都有过这样的经历,把自己关在家里几天或几周,进行一场编码风暴,直到最后,才意识到自己创造了一个怪物。现在,在个人/业余项目中,这可能不是世界末日,但如果你是为客户而建,他们给的报酬也很可观,或者你是为你自己的业务而建,那么这可能就会是一个大问题。

企业可能希望在 2 到 10 年之间合理地使用此代码,他们也可能想要添加东西,修复错误,将它部署到不同的地方。他们甚至可能不喜欢你的脸,想让别人/另一家公司来接管。

当上述情况之一发生时,最好的情况是你必须亲自动手去做这些改变,或者最坏的情况是向某人解释原因。

为什么被忽视?

“我们没有时间。”

我听到的第一个借口是团队/开发人员没有时间。这是目光短浅且危险的,将直接影响到产品的可持续性和可维护性。如果不提前投入这些时间,总有一天会因此陷入麻烦——新员工会挣扎,现有的开发人员会忘记他们头脑中曾经新鲜的东西,你会失去几天或几周的时间来做那些可以自动化的事情,并且你现在正在浪费时间和金钱,而这本来是可以通过你的洞察力来避免的。

一般来说,这是缺乏技术领导的结果。面对现实吧,开发人员想要编写代码并解决问题,文档化、注释、确保代码覆盖等,与客户刚刚要求的新功能相比,这些并不是很吸引人。对于经验不足的开发人员来说尤其如此,他们还没有经历过忽视可持续发展意味着什么。

高级开发人员、技术总监、CTO、Scrum Master、产品所有者、顾问都应该意识到忽视非功能需求的危险。当团队和产品理解这些非功能性需求的必要性时,所有这些角色都为他们提供了更多的价值。

如果没有这些决策者的战略规划或至少施加压力,很难吸引技术人才。如果不拿出丰厚的奖金,任何有经验的开发人员都不会愿意接近你。这意味着你只能得到那些没有经验的人,然后不断重蹈覆辙。

为什么软件项目需要可持续和可维护?

软件是一种资产,它需要具备业务可行性。

有所期望是相当合理的。如果你构建了什么,就相当于在为一项资产投入时间和精力。它需要有修改的潜力,迭代反馈,修复 bug,确保在没有不合理开销的情况下进行修改。

同样在软件团队中,人们来来去去,但是知识必须留存下来。只把产品的大部分工作知识掌握在某些关键人物的头脑中是没用的,如果他们离开/遭逢意外/中了彩票,你需要确保信息可以被存储和访问。此外,这些信息还需要清晰、简洁,且没什么隐藏内涵。如果谁有疑问,就像对五岁孩子一样为其解释。

如果不经历这些,你将每 1 - 2 年重建一次产品,或者每当你的开发人员更换时就意味着你不再有足够的理解力来有效设计你的产品。

如果不重建,走着走着就容易掉进死胡同,项目关闭,而自己也被炒了鱿鱼。

这也会影响你的声誉,尤其是当你与外部开发团队一起工作的时候,这些开发团队必须使用你蹩脚的 API,或者你发现自己经常收到阻碍,因为系统没有按照设计的那样工作,或者每次部署的时候都会崩溃。

这一切都影响到未来发展的成本。忽略所有这些意味着最终一切都会慢慢停止。即使是最小的改变也会让你付出巨大的代价。但是通过将一些注意力转移到非功能性需求上,您可以持续降低开发成本。这通常是最大的卖点,因为客户可以直接将其与他们所了解的东西——金钱——联系起来。“如果我们忽略这一点,现在可能节省 £20000,但未来两年里可能会因此最终赔上 £100000”。

战略决策

所有软件项目都需要具备可持续性和可维护性。

以下列表都是常识。如果你没有这些,你的项目就会失败。

它可能不会崩溃乃至导致整个公司关门,但软件项目的成功依赖于这些细节,需要允许迭代新特性/修复,并及时这样做。另外,如果你的整个开发团队明天就离开了,你也能借以确保连续性。

  • 文档(代码、部署、平台、架构、约定等)

  • 评论 (文档评论、内容、方式、原因等)

  • 定期在团队/知识库中分享知识

  • 利用正确的编程语言/框架来完成工作

  • 架构/结构/设计模式

  • 坚持风格指南(也许通过 linting 强制)

  • 自动化测试(单元、E2E 等)

  • 安全性和性能测试

  • 自动构建,CI/CD

  • 同行代码审查

  • 版本控制(使用某种 Git Flow 分支策略)

  • 更改日志和语义版本控制

  • 关注点分离

  • API 规范(如果适用)

  • 移情 UX

现在对于一些人来说,这似乎都是显而易见的,但是以我的经验来看,没有这些基本原则的软件团队/工程师的数量是相当可怕的。

显然没有人是完美的,并非所有项目都有时间或预算来处理所有这些事情(特别是如果你从头开始做)。在这些情况下,解释一下忽视这些事情会对最终产品及其投资回报产生什么影响——将关键涉众的决策结果告知他们。

如果你将这些概念添加到你的流程中,提高你的标准,并追求卓越,就会有好事发生。

原文:https://medium.com/@chrishorsnell/the-problem-with-developers-only-focusing-on-functional-requirements-bbef26d3a4b1

本文为 CSDN 翻译,如需转载,请注明来源出处。


 热 文 推 荐 

☞ 极客头条

☞ 平均年薪 70 万!刚刚,这类程序员又涨薪了!?佩服!

☞ 鏖战九载,Google 是否会因 Oracle 而弃用 Java?

☞ 小心!你的脸正在成为色情片主角

☞ iPhone曝严重漏洞,用户接听FaceTime前或被“监听”!

☞ 聊聊云计算:为什么构建网站时常会用到负载均衡

☞ 年度大戏!以太坊大神怒怼智能合约之父,尼克·萨博到底做错了啥?

☞ 嫁人当嫁程序员

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

喜欢就点击“好看”吧!

当开发人员遇上非功能性需求相关推荐

  1. 软件开发的非功能性需求

    The functional requirement is describing the behavior of the system as it relates to the system's fu ...

  2. 软件开发的功能性需求和非功能性需求

    功能性需求,一般是我们显性易见的,就是一般实现了什么功能,提供了什么服务,大体我认为问题中提到,或者我们日常所说的:"看起来复杂不复杂",基本上都会是针对功能性需求而言的.如果拿g ...

  3. 影响架构决策的非功能性需求

    英文原文:Non-functional Requirements in Architectural Decision Making 本文由<IEEE Software>杂志首发,现在由In ...

  4. 功能性需求和非功能性需求

    功能需求 (functional requirement规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求.功能需求有时也被称作行为需求 (behavīoral requ ...

  5. 为什么非功能性需求很重要?

    不要脱离实际环境 有时,我们会因为读到一篇文章或一本书,或者看到一个感觉不完善的介绍而变得异常偏执.在每种情况下,人们只讨论一些技术.解决方案和选项的某些方面,而忽视了一个至关重要的问题:非功能性需求 ...

  6. 软件设计——质量属性(非功能性需求)

    当你在收集需求的时候 人们会很乐意给你一个愿望清单,写满了他们想要软件系统所完成的事,也有完善的方法以用户故事.用例.传统的需求规格书.验收标准等形式来捕捉这些功能需求 但是那些讨厌的非功能性需求呢? ...

  7. 非功能性需求_更好的开卡,来聊聊非功能性需求

    工作这么几年来,见得最多的场景是 QA 小伙伴满办公室追着开发报 bug,有时候开发会不乐意,"当时可没说要 XXX,要做 XXX." 好像 QA 小伙伴永远比开发多一点心眼,即使 ...

  8. 非功能性需求之性能需求分析

    非功能性需求包括性能.可修改性.可用性.易用性.安全性.环境要求等,在最初的需求方案分析阶段很容易被忽略,而这些内容的考虑往往会影响到产品的实现,包括功能架构.操作方式.界面展现.后台处理方式.数据库 ...

  9. 学习软件设计的非功能性需求

    非功能需求是产品必须具备的品质或者它将事情做到了多好,它们可以让产品有吸引力.易于使用.快速.可靠或者安全.通常并不改变产品的功能,功能性需求是让产品工作的需求,非功能需求是为工作赋予特征的需求.所以 ...

最新文章

  1. java 跨域_springboot解决跨域CROS问题,用注解@CrossOrigin
  2. os模块中的shutil的使用方式与方法
  3. AI理论知识基础(19)-线性变换(1)
  4. Java Enum 使用
  5. Spring 钩子之BeanFactoryPostProcessor和BeanPostProcessor
  6. 关于 Apple Metal API 的一些想法
  7. 破解缝隙之谜[转载自 http://learning.artech.cn/]
  8. ModelSim6.3 使用教程By Sunev
  9. python for 格式化字符串 list.count
  10. 因果推断笔记——python 倾向性匹配PSM实现示例(三)
  11. python 利用递归求阶乘
  12. AE、PR视频压缩导出mp4、mov格式插件:AfterCodecs1.6.1汉化破解版
  13. 基于MATLAB的数字信号处理(2) 时域采样和频域采样
  14. 如何正确、高效地进行论文阅读和批判性思考
  15. 判了!国内「最牛删库跑路事件」程序员被判6年,公司损失近亿
  16. python制作模型排放清单_机动车尾气污染物排放模型研究综述.pdf
  17. 宝宝起名神器小程序源码_支持多种流量主模式
  18. java中关于json传图片的方法
  19. linux for 迅雷,关于迅雷for linux
  20. Mysql循环插入语句

热门文章

  1. pytorch测试用例(查看tensor维度)
  2. 退出android app时界面残留影响,【Android】App 或 Activity 销毁重建的状态恢复对回调带来的影响...
  3. 关于数组表示的二叉结构中,下标乘除法对应关系的理解
  4. 中国内容广告行业市场供需与战略研究报告
  5. 异步发电机 matlab仿真,基于MATLABSIMULINK异步电机矢量控制系统的仿真.pdf
  6. final finalize finally比较
  7. 感谢3G,告别3G:开启移动互联网时代的“功臣”退出历史舞台
  8. 特斯拉、华为等竞争升级,国产芯片实现突破,自动驾驶过去这一年
  9. 对话阿里云李飞飞:数据库迎来开源新时代 | 《新程序员》
  10. 没有lrzsz,怎么传文件到服务器?