软件质量属性简述
Posted jyt123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件质量属性简述相关的知识,希望对你有一定的参考价值。
软件质量属性简述
景宇庭
摘要:概括地说,软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。【1】从管理角度对软件质量进行度量,可将影响软件质量的主要因素划分为多个属性,常见的软件质量属性有多种,例如性能、可用性、可靠性、健壮性、安全性、可修改性、可变性、易用性、可测试性、功能性和互操作性等。
关键词:软件质量,功能,特性,主要因素
中图分类号:TP311.5
Brief introduction of software quality attribute
Jingyuting
Absrtact: Generally speaking, software quality is "the degree to which software is consistent with clearly and implicitly defined requirements". More specifically, software quality is the degree to which software is consistent with the clearly stated functional and performance requirements, the clearly described development standards in the documents, and the implied characteristics that any professional developed software product should have. 【1】 By measuring software quality from the perspective of management, the main factors that affect software quality can be divided into several attributes. There are many common software quality attributes, such as performance, availability, reliability, robustness, security, modifiability, variability, ease of use, testability, functionality and interoperability.
Key words: software quality, function, features, main factors
Chinese Library Classification No.: TP311.5
1引言
开发高质量的软件是一件极具挑战的工作。其中一个重要的原因就是对于“质量”的定义各不相同,变化莫测。而软件架构的设计主要就是围绕满足功能要求和非功能要求,其中的非功能要求就是软件的各种质量属性。为了了解软件的质量是否满足要求,我们必须定义软件的质量属性。同时质量属性也是影响软件架构的重要因素。软件架构主要由需求决定,需求有功能性的和非功能性的,其中非功能性的需求主要就是指质量属性。质量属性种类数量繁多,可以通过其影响和使用场景划分为六个部分特性:功能性,可靠性,易用性,效率,维护性与可移植性。其中功能性包括适合性,准确性,互用性,依从性,安全性;可靠性包括容错性,易恢复性,成熟性;易用性包括易学性,易理解性,易操作性;效率包括资源特性和时间特性;维护性包括可测试性,可修改性,稳定性和易分析性;可移植性包括适应性,易安装性,一致性和可替换性的六个特征及若干子特征。
本文主要关注的是其中的六个非常常用的质量属性:可用性,可修改性,性能,安全性,可测试性和易用性。并会对这六项质量属性做着重分析。
2六大质量属性特性及战术简述
定义概述:
可用性(Availability),可用性是指系统正常工作的时间所占的比例。可用性会遇到系统错误,恶意攻击,高负载等问题的影响。
性能与时间有关。事件发生时,系统必须对其作出响应。时间到达响应有很多特性,但性能基本上于事件发生时,将要消耗系统多长时间做出响应有关系。
安全性是衡量系统在向合法用户提供服务的同时,阻止非法授权使用的能力。
易用性关注的是对用户来说完成某个期望任务的容易程度和系统所提供的用户支持的种类。
可测试性通过测试揭示软件缺陷的容易程度。
,可修改性主要包含两方面,第一是修改什么(什么可以修改),第二个是何时以及由谁进行修改。
2.1可用性特性及战术:
可用性和有效性是对正确性和和有效性的一个综合,一个正确而有效的软件,才是可用的软件。如果在一段里,一个软件总能在有效的时间里给出正确的结果,那么这个软件在这段时间里就是可用的。而高可用,就是说一个软件可以在相当长的时间里保持可用性。然而系统在运行过程中会不可避免的出现故障,可以说出现故障是绝对的,而故障的次数是相对的。故障事实上是无法避免而可用性战术目的就是通过各种方式控制故障至少能够把故障的影响限制在一定范围内,从而使系统恢复成为可能。
可用性战术包含三个方面:1.错误检测——用来检测故障的某种类型的健康监视;
2.自动恢复——检测到故障时某种类型的恢复;
3.错误预防——阻止错误演变为故障。
首先说一下错误检测,我们常常用到的try和catch就是一种异常捕获,同时也是一种错误检测机制,通过它我们可以知道程序是否出现错误,同时会给我们抛出异常信息,让我们可以更快的去解决问题。而信号与响应方面,我们经常会在代码中加一些控制台输出语句,用来判断程序每个阶段运行的是否成功,是程序完成阶段式的验收防止出现大段的错误。
try {
Class.forName("com.mysql.jdbc.Driver");//加载驱动
conn = DriverManager.getConnection(db_url, db_user, db_pass);//连接数据库
} catch (Exception e) {
e.printStackTrace();
}
我们常用的异常抛出
错误恢复的战术包括表决、主动冗余、被动冗余、备件、状态再同步等等。这些都比较好理解,日志,备份。我们平时多多少少也都有接触,大多都是通过备份数据回滚的方式完成的错误的恢复
错误预防的战术包括:从服务中删除、事务和进程监听器。其中从服务器删除,我认为就像是mysql连接完成,使用用完成后再进行关闭或者说像是有些函数给数据开辟空间后又会自动销毁防止数据冗余,都是对某些错误的一种预防;关于事务:若是我们在数据库操作中定义一个事务,那么其中包含的语句全部执行或者全部不执行,操作的所有部分一起成功或者全部失败并恢复;治愈进程监听器,我平时接触到的监听器比较少基本上就是web方面的,所以以web为例介绍一下:web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HttpSession,ServletRequest的创建和销毁;变量的创建、销毁和修改等。可以在某些动作前后增加处理,实现监控。
这是一段通过监听器实现的一个对在线人数的监控
public class MyListener implements HttpSessionListener{
private int userNumber = 0;
public void sessionCreated(HttpSessionEvent arg0) {
userNumber++;
arg0.getSession().setAttribute("userNumber", userNumber);
}
public void sessionDestroyed(HttpSessionEvent arg0) {
userNumber--;
arg0.getSession().setAttribute("userNumber", userNumber);
}
}
2.2性能特性及战术:
一句话简单来说,性能就是软件快不快。当然客观来看我们可以通过以下多种参照量如:效率、响应时间、吞吐量、负载来客观的评价性能的好坏。
效率
在完成相同的计算任务时,软件占用越少的CPU时间越少的内存空间等计算资源,性能越高。换句话说,在相同的计算资源的条件下,完成的计算任务越多,效率越高。效率就是软件利用计算资源的能力。
响应时间
响应是软件对用户操作作出回应的速度。用户使用软件时,犹如和人交流,快速的响应,犹如和用户对答如流,会让用户更加的开心。比如,点击开始按钮后,出现一个显示计算进度的进度条,要比立刻全屏锁定,不让用户做任何操作要好多了即使后者可以更快的完成所有的任务。
吞吐量
单位时间内,软件能处理的数据量,或任务量。比如,一个网络服务器,单位时间内内够处理的http请求,和生成的html的数据量。吞吐量侧重于从输入输出上衡量软件的性能。
负载
负载是软件能承受的访问压力的能力。同样以网络服务器举例,能同时支持越多的用户访问,负载能力就越强。负载和吞吐量不完全相同。吞吐量很高,比一定能支持很多人访问;相应的,负载很好,单位时间内的输入输出可能并不高。
性能战术目标:对一定时间限制内到达系统的时间生成一个响应,这些事件可以是消息到达、定时器到时,系统状态的变化。
性能战术主要分文资源需求、资源管理和资源仲裁。资源需求1.减少一个事件流所用的资源2.减少处理事件的数量,减小频率。3.控制资源的使用
资源管理:1.引入并发2.维持数据或计算的多个副本3.增加可用资源这个受硬件影响较大
资源仲裁1.先进先出2.固定优先级3.动态优先级:轮转,时限时间最早优先4.静态调用
2.3安全性特性及其战术
软件保护重要资源免受非法访问或恶意攻击的能力。安全性对于某些软件来说是非常重要的。
对于另外一些软件来说则不那么重要。安全是一个复杂的工程,往往和整个软件运行环境相关。
安全性战术分为:与抵抗攻击有关的战术、与检测攻击有关的战术以及从攻击中恢复有关的战术。打个比方,给门上锁就是在抵抗攻击,在房子中放个监视器监视查看是否有可疑人员就是在检测攻击.给房子买一份保险就是从攻击中恢复过来。
抵抗攻击有关战术:1. 对用户进行身份验证,保证用户的合法身份,比如在设计系统时,我们通常会加入登录注册帐号的环节,这就是为了检测用户的身份。 2.对用户进行授权。授权能够保证经过了身份验证的用户有权修改数据或服务,比如用户和管理员的分流登陆,包括我们学校的系统中的学生老师的区分,。3.维护数据的机密性。应该对数据进行保护,以防止未经授权的访问。4.限制暴露的信息比如密码的*号显示
限制访问。可以对网站的访问次数和访问在线时间等进行把控。
检测攻击检测通常通过“入侵检测”系统进行。此类系统的工作方式是比较网络通信模式与数据库系统。在误检测的情况下,将通信模式与已知攻击的历史模式进行比较。在 异常检测的情况下,将通信模式与其本身的历史基线进行比较。通常,必须对数据包进行 过滤,以进行比较。可以根据协议、TCP标记、有效负荷大小、源或目的地地址以及端口 ,进行过滤。
比如这是一个登录的相关代码:
public User login(User loginUser) {
//编写SQL
String sql = "select * from user where username = ? and password = ?";
//调用query方法
try {
User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class),
loginUser.getUsername(), loginUser.getPassword());
return user;
} catch (DataAccessException e) {
e.printStackTrace();
return null;
}
}
从攻击中恢复:
恢复:检查点/回滚:检查点就是使状态一致的同步点,它或者是定期进行,或者是对具体事件做出响应。当在两检查点之间发生故障时,则以这个一致状态的检查点(有快照)和之后发生的事务日志来恢复系统(数据库中常使用)。
识别攻击者:作为审计追踪,用于预防性或惩罚性目的。
2.4易用性特性及战术:
易用性与用户完成期望任务的难易程度以及系统为用户提供的支持种类有关,简单来说,易用性是面向用户的,如何让用户轻松愉快的使用是实现本属性的关键。而在其战术体现上就为用户提供适当的反馈和协助,这是易用性战术的核心。
总的来说,易用性战术分为三类,哪三类呢:第一类叫做分离用户界面,也就是将用户分离出来,这一步至关重要,也就是说至少要做到让用户拥有一定的自主权利,可以在一定的范围内做出修改,但又不影响核心内容
这一点体现在代码中重构方面我们可以选择给他加一个页面跳转来或者说插入一些无感紧要但提升修饰属性的内容来使自己的程序丰满起来。
//触发一个函数跳转
<script>
function jump(){
window.location.href="http://blog.sina.com.cn/mleavs";
}</script>
<input type="button" value="我是一个按钮" οnclick=javascrtpt:jump()>//或者在button标签中加上onclick属性,赋值为javascript
<input type="button" value="我是一个按钮" οnclick="javascrtpt:window.location.href=‘http://blog.sina.com.cn/mleavs‘">
完成跳转的方法还有很多,这里不再赘述了,这样的话在此页面上用户做些改动并不影响整体系统,因为他们之间并没有固定联系
第二类叫做运行时战术(Runtime tactics)。运行时战术是提供给用户系统正在做什么的反馈信息和为用户提供诸如帮助、撤销,取消等易用性命令的能力。有点上学期讲的人机交互的那方面意思,很相近的。
(2)系统相应的反馈信息比如说点击反馈方面,赋予点击反馈的效果,如高亮,闪烁等或是其他的一些点击效果。
咱们常用的echarts中有很多类似的显示效果,比如点击高亮,点击放大缩小
第三类战术名字叫做系统主动战术,系统主动战术细分的话又可以分为小的三类,分别是用户模型,任务模型,系统模型三种分别来说哈:用户模型就是预测用户的使用,通过预测来方便用户的操作,也就是体会用户的心情,比如说比如输入法会预测拼写,当输入词组或句子的首字母时,输入法会“联想”相应词组或句子提供给用户参考。以及减少用户的错误,比如设置输入要求限制用户的输入。
对输入有所要求,比如要求必须输入中文,不得输入特殊字符,长度不小于
比如时间上的选定,默认为当前时间。登录时记住密码等等。
账号:<input type="text" id="user">
密码:<input type="password" id="pwd">
记住密码:<input type="checkbox" id="remember">
<button οnclick="fn()">登录</button>
var user = document.getElementById(‘user‘),
pass = document.getElementById(‘pwd‘),
check = document.getElementById(‘remember‘),
localUser = localStorage.getItem(‘user‘) || ‘‘; //获取到user的值并保存
localPass = localStorage.getItem(‘pass‘) || ‘‘; //获取到pwd的值并保存
user.value = localUser;
pass.value = localPass;
if (localUser !== ‘‘ && localPass !== ‘‘) {
check.setAttribute(‘checked‘, ‘‘);
}
function fn(){
if (check.checked){
localStorage.setItem(‘user‘, user.value);
localStorage.setItem(‘pass‘, pass.value);
} else {
localStorage.setItem(‘user‘, ‘‘);
localStorage.setItem(‘pass‘, ‘‘);
}
}
还有就是任务模型:任务模型就是用于确定上下文,了解用户意图,如完成任务的进度最后就是系统模型了,系统模型:确定了期望的系统行为,以便为用户提供适当的反馈,例如提示功能,进度条的使用等。总的来说,就是将系统看成一部分,引导用户完成整个系统的内容。
(6)最简单的方法是写用户使用手册,指引用户使用系统
可以引导用户使用的方向
错误提示,比如没有填写完整时的返回
(8)提示信息,标注需要用户注意的内容等等
2.5可测试性特性及战术
可测试性概念
软件可测试性是指通过测试(通常是基于运行的测试)揭示软件缺陷的容易程度。软件的开发和测试是并行的,这就需要测试人员尽快找出软件的关键bug并且快速的修复他,这就需要程序员提高软件的可测试性,让软件在测试阶段更加方便明了的被测试,而不是结构混乱,难以测试,难以维护。可测试性战术的目标是允许在完成软件开发的一个增量后,轻松地对软件进行测试。
可测试性的具体实现:
管理输入输出:1、记录/回放:将模块的输入事件和响应事件储存起来,作为模块的输入输出的测试数据。 2、将接口与实现分离:将接口与实现分离允许实现的代替。占位实现允许在缺少被占位组件时,对系统的剩余部分进行测试我们常用的Servlet调用Service层方法,Servlet是接口,Service是实现。
3、特化访问路线/接口:特化访问路线/接口:具有特化的测试接口允许通过测试工具并独立于其正常操作,来捕获或指定组件变量的值组件可以根据内部状态实现战术,以支持测试过程。比如我们简单有编程时使用的get,post获取数据的方法,复杂的有使用插件时,插件方要求的参数规格。如:echarts.js(数据可视化插件)
2.6可修改性特性及战术:
当需求发生变更或者环境发生变化时,系统是否可以快速得到调整,就体现出系统的可修改性。好的系统要求可以方便快速修改。
系统的任何部分都是可修改的,需要关注的是修改的成本
由此可见可修改性战术的目标是控制实现、测试和部署变更的时间和成本。
可修改性可以分为三大类:
(1)局部化修改一目标是减少由某个变更直接影响的模块的数量
1、维持语义的一致性。2、预期期望的变更。
(2)防止连锁反应一一目标是限制对局部化的模块的修改,以防止对某个模块的修改间接地影响到其他模块
1、信息隐藏 。2、维持现有的接口。添加接口。 3、限制通信路径。4、使用仲裁者。
(3)延迟绑定时间一一目标是控制部署时间并允许非开发人员进行修改
1、运行时注册 。2、配置文件。3、多态。4、组件更换。 5、遵守已定义的协议
3.总结
六大质量属性介绍到此就全部介绍完成,篇幅有限,内容做不到十分精细。不过质量属性的核心内容及其相关的战术内容介绍还算完备。通过这篇论文也是让我重新认识了一次六大质量属性,无论是对内容的理解,还是对使用方面的掌握都获得提升,还是很有收获。
参考资料:《搜狗百科》
《百度百科》
《知乎》
《一线架构师实践指南--温昱》
《基于本体的软件密集型系统架构知识管理研究--张纯》
以上是关于软件质量属性简述的主要内容,如果未能解决你的问题,请参考以下文章