实现质量属性
大作业做的事图书管理系统通用的模式只是简单的实现了功能,但好的系统是对各方面性质都有要求,灵活的使用架构可以提高系统的性能,并为以后的维护奠定良好的基础。质量属性是指影响质量的相关因素,是对质量的描述。最常见的心态质量属性有6个:可用性、可修改性、性能、安全性、可测试性、易用性。
系统质量属性之可用性。当系统不再提供其范围所说的服务时,就出现了系统故障,系统用户可以观察到此类故障。可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的。
a = 平均郑成工作时间 /(平均正常工作时间 + 平均修复时间)* 100%
可用性关注的问题:如何检测故障;发生故障的频度;出现故障时的现象;系统故障排除的时限;如何防止故障的发生;发生故障时的处理。
系统质量属性之可修改性。可修改性的两个关注点是可修改什么和何时以及谁修改。我们的系统不会做好后就一直不变,我们会根据实时需要对系统的功能进行增加或优化。
系统质量属性之性能。性能是指系统的响应能力----即对外部刺激(事件)做出反应时所需要的时间或在某段时间内所处理的事件个数。
影响性能的因素:事件源的数量和到达模式。到达模式:周期性、随机或偶然。
一般用等待时间、处理期限、系统吞吐量、响应抖动(等待时间的变化)、未处理事件(由于系统太忙无法响应)、丢失数据(由于系统太忙)等指标了解系统性能。
系统质量属性之安全性。安全性是衡量系统在向合法用户正常提供服务的情况下,阻止非授权使用的能力,不允许非授权用户进行非法操作。
试图突破安全防线的行为被称为“攻击”。攻击有以下三种方式:未经授权试图访问数据或服务;未经授权试图修改数据;试图使用系统拒绝向合法用户提供的服务。
系统质量属性之可测试性。可测试性是指通过测试揭示软件缺陷的难易程度。特别地,假设软件中至少有一个错误,软件在下次测试运行时不能正常工作的可能性。可测试性的响应度量处理的是测试在发现缺陷方面的效率以及想要达到某个期望的覆盖范围,需要用多长时间进行测试。
实践中的质量属性场景之易用性。易用性关注的是对用户来说完成某个期望任务的难易程度。分为以下几个方面:有效性;错误避免及错误处理;用户自信和满意度;可学习性。
系统质量属性之可移植性。可移植性是系统能够在不同环境下运行的能力,可能是硬件、软件或两者的组合。在构架中对与平台相关问题的封装常采用一个可移植层,它是一组软件服务的集合,使上层应用软件与其环境具有抽象接口,并且在移植时接口不变。可移植层是信息隐藏原则运用的结果。
实践中的质量属性场景之可重用性。可重用性是指要合理地设计系统,使系统的结构或其某些组件能够在以后的应用开发中重复使用,避免多次写相同功能的代码,。这样可以节省很多时间,提高工作效率。
构架的各个组件就是重用的单位,一个组件的可重用程度依赖于它与其它组件的耦合程度。可重用性与构架密切相关,它还可以看作是可修改性或可集成性的特例。这相当于一个硬币的两面:建立的系统可修改导致了系统可重用。
实践中的质量属性场景之可集成性。可集成性是使独立开发的系统组件能够协同运行的能力。集成性依赖于:组件的外部复杂性;组件之间的交互机制和协议;组件功能划分的清晰程度;组件接口的定义是否完整、合理。可集成性表明了一个系统内个组件之间相互协作的能力,而互操作性衡量的则是一个系统与另一个系统的协作能力。
就图书借阅系统而言。用户或系统根据cookie将用户名和密码将输入到输入框,用户点击登陆按钮,系统根据登陆用户的角色进入到相应的界面。
Hibernate的使用可以帮我们方便的连接到数据库,实现账户的增删改查。给我们的系统增加Hibernate能力,并在项目中添加连接,生成与数据库连接的get()、set()类,这样我们就不必每次链接数据库时通过大量的代码实现,只需要在需要链接数据库的类中通过Session ss = HibernateSessionFactory.getSession();生成链接实现操作。Hibernate的使用保证了代码的可移植性,可用性。在图书借阅等一系列操作中需要实例化很多对象,Spring框架中的IoC种植反转机制无疑给我们减轻了很多负担,XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系,抛弃了传统的继承思想采用横向切面式的关系降低了耦合度,可以根据需要在修改对象类时不必更改大量代码,实现了系统的可修改性。Structs2的过滤拦截机制在返回不同值时给出不同的相应,Action 继承了 ActionSupport 类 ,而该类实现了 Action 、Validateable 、 ValidationAware 、TextProvider、LocaleProviderSerializable 接口。就拿图书借阅系统的登陆部分来说,当点击Login.jsp(登陆界面)的提交按钮时,form 将文本框的内容根据action的路径跳转,web.xml将判断并将关于action的链接(action = " action / Login . action " )提交到structs动作(
< filter >
< filter - name > struts2 < / filter - name >
< filter - class >
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
< / filter-class >
< / filter >
< filter - mapping >
< filter – name > struts2 < / filter – name >
< url – pattern > *.action < / url-pattern >
< / filter – mapping >
之后,对应的action类会进行一系列的操作并返回一个值,值会传入structs.xml文件
< package name = "default" namespace = "/action" extends ="struts-default">
< action name = "Login" class = "com.wxx20132990.s2.Login" >
< result name = "Success" >../Success.jsp </result>
< result name = "Error">../Error.jsp</result>
< /action>
</package>
Structs.xml文件会对传回的值进行判断,并进入相应的界面。这样我们就可以保证系统的性能和安全性。