文章目录
- 前言
- 🌟功能性需求
- ⭐⭐⭐系统应该做什么?或者应该提供什么功能?⭐⭐⭐
- 🫰举例
- 🌟非功能性需求
- ⭐⭐⭐系统应该在哪些条件下能执行这些功能,且执行的很好。⭐⭐⭐
- ❤️🔥质量属性(Quality Attribute, QA)
- 🫰举例
- ❤️🔥约束(constraint)
- 🫰举例
- END
前言
软件开发的根本目的就是满足客户的需求。这个客户可以是一个人,一个企业,甚至是你公司内部的另一个部门。
但绝大多数客户往往无法准确表达自己希望的需求,这时就需要软件架构师去挖掘功能。
一般来说软件功能可以分为功能性需求和非功能性需求。
🌟功能性需求
⭐⭐⭐系统应该做什么?或者应该提供什么功能?⭐⭐⭐
功能并不总是不影响架构。
但是有的功能在实际落实下决定了解决方案的设计。特别是一些必须且明确满足的功能。会涉及到架构击毙重量需求(Architecturally Significant Requirement, ASR)。
🫰举例
作为一个<角色>,我想要<功能>,带来<好处>。
- 作为用户,我想在点击➕按钮后立即将该物品添加到购物车。
- 作为用户,在web端输入账户密码后直接按回车就进行登录(不用按登录按钮)。
- 当我确认注册,我想看到一个弹窗或者短信或邮件来告诉我是否注册成功。
- 作为老师,我想直接修改某位学生的期末成绩。
- 等等
🌟非功能性需求
⭐⭐⭐系统应该在哪些条件下能执行这些功能,且执行的很好。⭐⭐⭐
非功能性架构总是能影响架构。
在设计过程中,需要非常明确的确定非功能性需求。一些模糊的非功能性需求会在开发后期产生难以预估的影响。
❤️🔥质量属性(Quality Attribute, QA)
- 性能
- 可维护性
- 用户友好性
- 等等
🫰举例
- (信息安全)网站不会存储你当前输入的密码。
- (完整性)软件更新时,若更新失败不会使旧版本无法使用。
- (性能)该AI可以在5分钟内处理10份2mb大小以内的pdf文件。
- (跨平台)在华为,小米,苹果手机都能够使用这个app。
- 等等
❤️🔥约束(constraint)
- 在交付项目时必须遵守的不可协商的决策
- 设计决策
- 技术决策
- 政治决策
- 时间约束
- 预算约束
- 等等
🫰举例
- 该系统必须使用vue3作为前端技术,Django作为后端技术。
- 乙方在合同签订后3个月内完成软件的出版交付,5个月内完成终版的交付。
- 甲方在终版交付时间点前违约或终止交易,则不返还定金。
- 等等
END
关注我,学习更多C/C++,算法,计算机知识
B站:
👨💻主页:天赐细莲 bilibili