论软件体系架构之质量属性
论软件体系架构之质量属性
摘 要:开发高质量的软件是一件极具挑战的工作。其中一个重要的原因就是对于“质量”的定义各不相同,变化莫测。本文将从设计编码实现六种质量属性战术,即可用性、可修改性、性能、安全性、可测试性、易用性,以及为什么这样设计,解决什么问题,实现的过程,难度是什么等方面进行具体解析阐述。
关键词:质量属性;软件;开发;设计;架构
1.可用性
可用性是指系统正常工作的时间所占的比例。可用性会遇到系统错误,恶意攻击,高负载等问题的影响,面临的问题主要有:物理层失效、恶意攻击、软件的设计问题或BUG、升级或日常维护。针对这些问题,为了增加可用性,我们可以设计故障转移,可以使用冗余来消除系统中的单点故障,例如分布式系统,这也是实现的难点。我们要设计在线升级,由于存储设备有两个同时工作的单元构成,所以升级的过程简单说就是先升级第一个单元,然后再升级第二个单元,这个过程是非常繁琐的,需要在升级前进行很多的健康检查,确保可以正常升级。还有就是遇到异常问题如何处理,我们总会在系统中发现许多问题,我们需要时刻记录日志,通过分析问题日志来确定问题、解决问题。
2.可修改性
可修改性通俗地讲就是代码在不影响整个系统的基础上,代码可以进行一些方面的修改,达到希望得到的效果。我们需要考虑两个方面:1.可以修改什么?2.何时进行变更和由谁变更?通常我们可以修改系统的任何方面,最常见的就是系统计算的功能、系统存在平台、系统运行的环境、系统所展示的质量属性以及其容量。最常见的就是修改源代码。也就是说,开发人员必须修改代码,对修改后的代码进行测试,然后将其部署在新版中。然而,现在不仅仅是何时变更的问题,而且还有由谁进行变更的问题。
3.性能
性能是指软件及时提供相应服务的能力。具体而言,性能包括速度(平均响应时间)、吞吐量(单位时间处理的交易数)和持续高速性(保持高度处理速度的能力)三方面的要求。一般而言,计算机提供了许多的资源,包括CPU,内存,硬盘等等,提高性能的核心就是充分利用这些资源。要保证对资源的使用是正确和有效的。我认为在编写代码的过程中要尽量降低算法的时间复杂度和空间复杂度,并且要兼顾好时间复杂度和空间复杂度的关系,不能偏向任何一边,要保持一定的平衡性。根据自己的经验,尽量使用高效率的方法,不要在设计编写时贪图省事。例如系统数据库中没有的资源需要实时从网络资源上进行爬取这个功能,如果让用户等待时间过长,用户就会感觉系统反应时间太慢,留下不好的印象,所以需要在用户关注点多下功夫研究,把这些地方的性能一步一步做的更好。
4.安全性
安全性指软件同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。安全性既属于技术问题又属于管理问题。一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、风险等多种因素)高于得到的好处,那么这样的系统就可以认为是安全的。在被攻击并产生了影响后,我们要尽快地从异常情况中恢复:1.恢复状态:采用提高可用性的一些手段,如备份等,提高恢复速度2.攻击者的识别:找出并确定攻击者,震慑潜在的攻击者。一个好的系统或者软件必须具备良好的安全性,这样才能得到用户的信任,保证用户的利益。
5.可测试性
可测试性战术的目标是允许在完成软件开发的一个增量后,轻松地对软件进行测试,在测试程序时,首先使用了单元模块测试方法,测试的时候是对每个方法的功能进行输入测试。测试很重要,因为软件错误可能很昂贵甚至很危险,一个bug越长越不被发现,它就可能带来更大的隐患。此外,如果测试团队错过了准确详尽地捕捉或识别风险和软件问题,会导致一些灾难发生,那么就需要付出昂贵的代价来检测bug,所以软件漏洞或是bug可能会导致货币和人员的损失。我们学过设计模式后,都知道我们编码的五大原则:单一职责原则;开放/封闭原则;里氏代换原则;接口分离原则;依赖反转原则。尤其是单一职责原则,每一个函数,对象都完成单一的职责。主函数只对其进行调用,或者传参。这样我们的可测试性就会大大的提高。
6.易用性
易用性与用户完成期望任务的难易程度以及系统为用户提供的支持种类有关。对于这个方面,主要是为了尽可能满足用户的需求,让系统尽量达到用户所期望的样子,因此在呈现的界面风格方面,应设计网页平铺显示,界面简约,让用户可以明确的看到期望的功能。在呈现信息方面,应设计分页显示的表结构,让相应的功能集中显示,让用户清楚哪个功能是干什么的。在操作方面多使用按钮控件进行页面之间的跳转,这样方便又快捷。
7.总结
软件的质量属性还有很多,但是最重要也是最常用的就是可用性、可修改性、性能、安全性、可测试性、易用性,一个软件或者系统好用不好用取决于其质量属性的综合评价,作为一个开发者,我们也需要在日常的开发中将各个质量属性尽量做到最好,增强系统的稳定性,同时也保证好自己用户的利益。