软件属性分为功能属性和质量属性,
功能属性指的是软件可以做什么,可以实现什么功能。
质量属性指的是软件怎么样,比如好不好用,稳不稳定。
质量属性为何重要?
早年同时用过诺基亚手机和苹果手机的人都知道,论功能,诺基亚手机其实比苹果多很多,当年苹果刚出来时,凡是苹果有的功能,诺基亚都有,可每一个功能,苹果都更好用,在易用性上,苹果完胜诺基亚,于是最终结果大家都知道了。
对于一套软件系统,质量属性甚至比功能属性更重要。
实现一个功能可能会有很多方式,不同的方式,功能一样,质量却大不相同。系统架构设计,就是在软件设计大的层面上做出选择,以实现软件系统的质量属性需求。
质量属性都有哪些?
软件系统都有哪些质量属性呢?主要有如下这些,
可靠性
可靠性,也叫可用性,是指软件可长期稳定运行的能力,一般用一段时间内故障时间与正常运行时间比来评估。可靠性高的系统,能够长期不出错,或者出错后可以快速从错误中恢复。可修改性
当需求发生变更或者环境发生变化时,系统是否可以快速得到调整,就体现出系统的可修改性。好的系统要求可以方便快速修改。性能
指系统的在用户发出指令后响应的时间,及单位时间内处理事务的数量。性能好的系统,可以快速响应用户的指令,能在单位时间内完成更多的事务处理。简单来讲,就是要快。安全性
指系统不会被无关人员滥用,系统数据不管在存储还是传输过程中都有得到妥善的保护。可测试性
指系统方便被测试,以验证系统的业务逻辑确实与系统规格要求一致。易用性
指系统方便使用,可以很快上手,使用过程中不用操作复杂的步骤,没有需要记忆的隐蔽的功能点。一个字来形容,就是要让用户用起来爽。
实现质量属性有哪些常用方法
要实现这些质量属性,在软件架构设计时,是有一些方法,或者说套路可以使用的。
- 可靠性
要提高系统的可靠性,可以从错误检测,错误恢复,错误预防三个方面下功夫。
- 心跳设计,是一个错误检测机制,让系统定期向另外一套检测系统发生固定信息(类似心跳),当检测系统在固定时间内没有收到信息时,即可以判断对方系统发生了故障,即刻启动恢复或者报警程序。
- 冗余设计,冗余是属于一种错误恢复机制,即提前准备好一套备用方案,当主方案发生错误时,系统自动按照预先设计好的备用方案执行。
- 事务设计,属于错误预防机制,即绑定一系列密切相关的步骤,要么全部成功,要么全部不成功,避免数据不一致的情况发生。最典型的一个例子就是银行转账,一个账号出,一个账号进,不能把钱在路上转丢了。
- 可修改性
提高系统可修改的方法,包括局部化修改,防止连锁反应,推迟绑定时间。
- 局部化修改,即设计期间,按照责任分配模块,将预期的变更,限定在一定范围内。
- 防止连锁反应,比如尽可能对接口编程,且维持接口规格不变。每个模块对外公开尽可能少的信息,隐藏一切不必要的信息。
- 推迟绑定时间,就将有可能的修改,尽量用配置文件,或者其他后期让非开发人员可调整的方式实现。
- 性能
提供性能,可以通过减少资源的消耗,或者改善资源的管理及调度实现。
- 改善算法,以减少资源的使用,提高计算效率
- 引入并发,几个任务同时进行,减少用户等待时间。
- 分配不同任务不同优先级,比如在视频会议系统中,优先保证语音的传输,以改善系统整体性能体验。
- 安全性
提高安全性,可以采用的方法有,抵抗攻击,检测攻击和从攻击中恢复。
- 对用户身份进行校验,增加校验码输入 等都是抵抗攻击的方法
- 通过对访问的来源,频率检测,检测可能发生的攻击行为是抵抗攻击的一种方式
- 攻击中恢复即在检测到攻击行为发生后,按照预先设计好的方案执行动作
- 可测试性
可以通过输入输出和内部监控的方式来提高可测试性。
- 记录/回放,捕获跨接口的调用信息,作为测试软件的输入信息
- 内部监控,激活监视器,将事件记录下来以供测试检查使用
- 易用性
包括即时提供系统辅助信息,提供用户操控性
- 比如在特定界面,预期用户接下来的行为,告知用户可以做什么操作及如何操作
- 在系统执行过程中,提供用户主动取消等操控功能
好的系统一定是质量好的系统
好的系统与差的系统,可以天差地别,用户一用便知。就如乔布斯所说,客户也许不知道自己想要的是什么,但是如果你同时提供两套系统给客户,客户会知道如何选择,好的系统一定是质量好的系统,而不是功能多的系统。架构设计师,应该要在质量属性上下功夫。特别要注意的是,有些质量属性之间是互相冲突的,比如安全性与易用性,安全性提升了,易用性可能会降低,架构设计时还需要拿捏平衡。