如何实现基于ssh框架的投票系统的的质量属性
通过对系统的六个质量属性制定战术,进行实现。
1、 可用性(Availability)的战术
首先需要知道什么是可用性?可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的。
制定可用性战术是为了使系统的错误通过该战术,尽可能的减少或者屏蔽、修复;
恢复和修复是可用性的重要方面,为了阻止错误发展成故障,至少能够把错误限制在一定的范围内,从而使修复成为可能。维持可用性的所有方法包括某种类型的冗余,用来检测故障的某种类型的健康监视,以及当检测到故障时某种类型的恢复。有些情况下,监视或恢复是自动进行的,有时需要手动。
我们事先考虑错误检测,然后分析错误恢复,最后讨论错误预防。
错误检测(用于识别错误的3个战术是信号/响应、心跳和异常)
信号/响应:用户发出一个投票的相应,可以通过投票网站主页,进行多次投票,查看投票结果是否正常,显示结果数据是否准确;
心跳:系统后台设置时钟,实时更新,检测时钟是否实时更新或出现暂停情况,以此查看后台工作是否出现异常。
异常:当网站出现404错误或者500错误时,就知道网站哪里出错了,为了保证网站的可用性,使用抛出异常语句,当系统出现异常错误时(比如抛出500错误),网站将跳转到异常网页,提示操作失败。比如,当登录时,如果登录成功,则跳转到主页面,如果失败,则跳转回登录页面。比如,删除投票信息时,如果删除失败,将抛出异常,同时提示错误信息。
错误恢复
检查点/回滚:使用mysql数据库,网站操作失败后,通过数据回滚,找回正确数据。
备件:大幅度修改程序前,进行程序备份,记录程序目前情况,如果修改失败,可使用备份数据,重新进行操作。
2、 可修改性(Modifiability)的战术
可修改战术的目标是控制实现、测试和部署变更的时间和成本。把可修改性战术根据其目标进行分组。一组可修改性战术目标是减少由某个变更直接影响的数量。这组称为“局部化修改”。另一组可修改战术的目标是限制对局部化的模块的修改。这组称为“防止连锁反应”。两组之间的差别是有直接受变更影响的模块(那些调整其责任来完成变更的模块)间接受变更影响的模块(那些责任保持不变,但必须改变其实现来适应直接受影响的模块)。第三组战术的目标是控制部署时间和成本。我们把这组战术叫做“延迟绑定时间”。
可修改战术是为了当出现变更请求时系统可以按要求完成修改。
局部化修改
目标是在设计期间为模块分配责任,以把预期的变更限制在一定范围内。其战术有:维持语义的一致性、预期期望的变更、泛化该模块、限制可能的选择。
维持语义的一致性:当在后台编辑某一个投票时,仅可单独修改该投票信息,不会影响到其他信息;利用spring架构,对系统代码解耦,当某一项功能改变时,不会影响其他功能;
限制可能的选择:为用户制定一定的投票流程,采用傻瓜式操作,防止用户出现不正常的操作方式,从而导致错误的发生。
防止连锁反应:每个功能模块进行独立,添加对应的接口,通过接口联系,防止代码更改是出现连锁反应。
3、性能(Performance)的战术
性能战术的目标就是对在一定的时间限制内到达系统的事件生成一个响应。事件到达后系统或者对该事件进行处理,或者由于某些原因处理被阻塞。
性能战术是为了当时间到达时,系统可以在规定时间内做出反应。
限制执行时间:当系统用户登录后,长时间未操作,系统将会注销用户信息;
限制队列大小:网站内的投票信息,不允许过长,为保证系统反应时间,文字信息保持在一定字数内。
4、安全性(Security)的战术
安全性战术分为:与抵抗攻击有关的战术、与检测攻击有关的战术以及从攻击中恢复有关的战术。给门装锁就是在抵抗攻击,在房子中放一个运动传感器就是在检测攻击,给房子上保险就是从攻击总恢复。
对用户进行身份验证:登录时,系统后台进行身份验证。每个用户仅允许进行一次投票,防止刷票;每投票一次,记录一次用户投票时使用设备的ip信息。
对用户进行授权:管理员权限授权。一般用户只有投票权限,通过管理员身份登录后,授予管理员权限;
维护数据的机密性:对用户的密码进行md5加密,防止密码泄露;通过struts框架,进行数据的跳转控制,防止数据在URL出显示;
限制访问:仅允许局域网内的用户访问;
从攻击中恢复:一旦遇到攻击,可通过数据库备份以及网站备份进行恢复重启;
5、易用性(Usability)战术
易用性与用户完成期望任务的难易程度以及系统为用户提供的支持种类有关。有两种类型的战术支持易用性,每种战术所针对的是两种类别的“用户”。第一类是运行时,包括那些在系统运行期间支持用户的战术。第二类基于用户接口设计的迭代特性,它在设计时支持接口开发人员。
通过易用性战术,是为了给用户提供适当的反馈和协助。
运行时战术:当进行投票时,有提示信息提示“正在投票”或显示投票环节;是正常人能明白正确的投票流程。
6、可测试性(Testability)战术
可测试性战术目标是允许在完成一个软件开发的增量后,轻松地对软件进行测试。我们对两类用于测试的战术进行讨论:提供输入并捕获输出;内部监视。
可测试性战术是为了允许在完成软件开发的一个增量后,较轻松地对软件进行测试。
将接口与实现分离:将接口与实现分离允许实现的代替。利用spring框架,实现结构与实现的分离;