质量属性

浅析系统架构之质量属性
张宏伟
石家庄铁道大学,信息科学与技术学院,信1805-3班
摘要:架构是一个系统的基本组织结构,涵盖所包含的组件、组件之间的关系、组件与环境的关系,以及指导架构的设计和演进的原则等内容。随着技术的不断革新,需求的不断增长,对于良好的系统结构有了更多的要求,为了满足对结构更好的设计,本文将对质量属性进行探讨,提供一些战术来提高系统结构要求。
关键词:软件质量,软件质量战术
On the quality attribute of system architecture
Zhang Hongwei
Shijiazhuang Tiedao University, College of Information Science and Technology,Xin 1805-3 class
Abstract: Architecture is the basic organizational structure of a system, including the components, the relationship between components, the relationship between components and environment, and the principles guiding the design and evolution of architecture. With the continuous innovation of technology and the growing demand, there are more requirements for a good system structure. In order to meet the better design of the structure, this paper will discuss the quality attributes and provide some tactics to improve the system structure requirements.
Key words: Software quality, software quality tactics
本文旨在系统了解质量属性,探究质量属性战术所发挥的作用及其意义。
什么是架构?
架构实际上就是指人们根据自己对世界的认识为解决某个问题,主动的有目的的去识别问题,并进行分解、合并,解决这个问题的实践活动。如何去理解架构、设计架构,从程序员成长为一名架构师呢?那便不得不提架构需求,所有的进步来源于需求。
架构需求之质量属性
在Simon Brown的《程序员必读之软件架构》一文中,做出了很有意义的划分“功能需求与非功能需求(质量属性)”,功能独立于结构,大部分的工作时间中,我们往往专注于功能需求而轻于非功能需求,结果往往是在生产宕机中付出更惨痛的代价。如何选择结构、实现质量属性间的交互成为设计架构的重中之重。
什么是质量属性?
质量属性来源于约束,对非功能约束的决策后,本身所具备的特性。可简单分为性能,可用性,易用性,安全性,可修改性,可测试性。如何进行架构设计也围绕上述展开。
质量属性战术之性能
性能:性能首先是一种指标,表明系统或构件,对于其及时性要求的符合程度,其次才是产品的一种特性,可用时间进行度量。主要表现为三个方面,速度、吞吐量、持续高速性。早期的12306抢票软件,就曾因多人抢同一张票出现问题而导致系统故障,造成了无法挽救的损失。性能战术的目标就是对一定时间限制内到达系统的时间生成一个响应,大抵有三种方式,资源需求,资源管理以及资源仲裁。
资源需求:事件流是需求的源,自身具备两个特性,资源六中事件之间的时间间隔
资源管理:引入并发,支持数据或计算的多个副本,增加可用资源
资源仲裁:当存在资源争用时,对资源进行调度。
质量属性战术之可用性
可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的。侧重于系统故障发生的频率,预防故障发生。
进程监视器: 一旦检测到进程中产生错误,监视进程就会删除非执行进程,并为该进程创建一个新的实例。我们在windows系统中常见,比如用word打开一个pdf文件卡住的时候,可以打开任务管理器,强制关闭这个进程,然后重新打开。
事务:对进程中发生错误的步骤及时发现并撤销,防止数据收到影响。这个在开启和数据库的连接和关闭的时候需要注意,进行操作前,需要判断连接是否打开或关闭。
质量属性战术之易用性
可用性针对的是系统,可用性,顾名思义,是系统能不能使用,当一个系统可以上线时,说明其具有了一定的可用性。而易用性针对的是用户,描述的是系统好不好用,这两个概念有一定的区别,可用性是能不能用,易用性是好不好用。
质量属性战术之安全性
安全性指软件同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。安全性是软件重要的方面。信息系统安全架构需要包含以下几个方面:保密性、完整性、可用性、认证、授权、不可否认性。
常见的安全漏洞:溢出错误(缓存溢出、算术溢出、整型溢出)、未经验证或验证不当的输入、不当的访问控制、加密问题、使用HTTP而没有使用HTTPS、不安全的认证、弱密码的使用、安全散列或秘钥的重用、弱加密技术、无效或过期的证书/秘钥、信息泄露、服务器的元信息、开放的索引页、开发的端口、静态条件、系统时钟漂移、不安全的文件(文件夹)操作等
Python中常见的四种安全问题:读取输入、表达式求值、溢出错误、序列化问题。
Web应用中的安全问题:服务器端模板注入、服务器端模板注入-回避、服务拒绝、跨站脚本攻击等
安全编码的策略:输入验证、最简原则、最小特权原则、清理数据、授权访问、进行有效的测试、多层防御实践、定义安全需求、模型威胁、安全策略的架构和设计
安全性既属于技术问题又属于管理问题。一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、风险等多种因素)高于得到的好处,那么这样的系统就可以认为是安全的。
质量属性战术之可修改性性
可修改性修改软件的内容通过修改花费的时间,金钱,人力等数据衡量修改是否足够简单方便低成本。可修改性越高,让修改所影响的软件范围尽可能小,具体方法有:高内聚低耦合,让软件模块化,每次只修改一个模块。通过尽可能地借助中间件可以达到这个效果、预先考虑到可能的修改、让模块通用,这样修改时不需要修改许多模块,只需要修改通用的模块、隐藏信息,借助面向对象中隐藏信息的思想,让外界访问修改程序只能通过特定的接口、保持接口不变,否则修改一个模块之后要再去修改与这个模块通过该接口交互的模块、配置文件,让系统每次运行都根据配置文件改变状态,这样就可以避免直接修改代码、发布订阅模式、多态,用不同的子类实现不同的功能。
质量属性战术之可测试性
可测试性是指软件系统通过执行基本的测试来暴露其错误的难易程度。
软件测试包括:功能测试(白盒测试、黑盒测试)、性能测试(负载测试、压力测试、可扩展性测试)、安全性测试、可用性测试、安装测试、可访问性测试。
结语
软件系统架构设计中,非功能需求不仅是架构师知识结构中的重要组成部分之一,也扮演了重要的角色,甚至会直接决定架构的组成。非功能需求主要分为质量属性与约束,且来自于多方。质量属性、约束和功能需求之间能相互作用,并最终在架构设计中体现,软件质量属性对于架构设计的重要性可见一斑。

参考文献
[1] naughty,软件中的质量属性(一),https://my.oschina.net/taogang/blog/224658
[2] naughty,软件中的质量属性(二),https://my.oschina.net/taogang/blog/225513
[3] 《程序员必读之软件架构》

posted @ 2021-04-12 13:11  爱笑的加油怪  阅读(204)  评论(0编辑  收藏  举报