软件属性小结
一. 功能属性
1. Use Story和Use Case
2. 功能的三个要素
①. 参与者
用户、角色、用户和角色的关系
②. 流程
整体流程、页面操作流程
③. 表单(UI)
3. 正确性(精确性)
二. 决定与架构
1. 权衡软件质量属性
2. 架构元素
①. 架构(决定)过程
②. 架构(决定)产物
3. 架构(架构元素集合)
三. 质量属性(非功能性属性)
1. 开发期质量属性
①. 易理解性和可读性
所有烦人工作成果(如需求文档、设计文档、code等)易读、易理解,可以提高团队开发性率,降低维护成本
考虑的因素:拒绝啰里啰嗦、复杂问题简单化、拒绝学术化、严格遵守codestyle(一旦定下来,团队所有成员必须无条件遵守!!!)
②. 可扩展性
可扩展性是软件适应变化的能力,在软件开发过程中变化时司空见惯的,如需求、设计、算法的改进,程序的变化的等等。
考虑的因素:增量开发、小型大型软件、是否有下一个版本
③. 可重用性
重复利用软件的中某一个组件(如文档模板、架构框架、代码)的能力
考虑的因素:架构(框架)重用、模块重用、重用与分层
④. 可测试性
软件测试的难易程度,软件的可测试性是指软件发生故障并隔离、定位其故障的能力特性,以及在一定的时间和成本的前提下,进行测试设计、测试执行的能力,例如Controller层不要和request、response等耦合、表单等要有Id(为了自动化测试)等
⑤. 可维护性
可维护性是指理解、改正、改动、改进软件的难易程度,影响可维护性的因素有:可理解性、可测试性、可扩展性
改正性维护:软件在使用中发现了隐藏的错误后,为了诊断和改正这个隐藏错误而修改软件的活动
适应性维护:为了适应变化了的环境而修改软件的活动,如:数据库、操作系统、服务器网络带宽等
完善性维护:为了扩充或完善原有软件功能或性能而改动软件的活动
预防性维护:为了提高软件的可维护性和可靠性,为未来的进一步改进打下基础而修改的活动
⑥. 可移植性
是指软件不经修改或稍加修改就可以运行于不同软硬件环境(CPU、OS)的能力,主要是代码的可移植性
考虑的因素:硬件之间、数据库之间
⑦. 兼容性
不同软件或新老版本之间交换信息的能力
考虑的因素:版本之间的兼容、软件之间的兼容,例如:老的客户端能否调用新的服务器版本的API,office和wps兼容性问题(这个存在强势问题,例如微软比较强大、用户比较多,我们就可以不兼容你们金山)
2. 运行期质量属性
①. 性能
性能通常是指软件的“时间-空间”效率,而不是软件的运行速度。人们总希望软件的运行速度高些,并且占用资源少些,一言以蔽之:既要马儿跑得快,又要马儿吃得少,即性价比最高。
性能优化的关键是:找出限制性能的瓶颈,原则是:管理好自己,控制好别人,那么自己是谁?别人有是谁呢?自己一般是进程(拥有)、内存(分配给自己的)、程序;别人一般是:数据库、文件、其他系统、网络。
控制别人,对外资源(数据库连接、文件流、socket等)一定要关闭,而且在finally里面关闭,当然一些连接可以使用池的概念。
管理好自己,数据库调优、JVM调优、堆栈内存大小的设置等这是一个很大的概念,希望将来能有一篇专门的文章来写这个,其实关于这个网上的资料也挺多的,大家可以自己搜一些来自学一下
②. 安全性
这里的安全性是指信息安全,英文原文是指:security而不是safety,安全性是指防止系统被非法入侵的能力,即属于技术问题又属于安全问题。那么什么样的系统是安全的呢?一般的,如果黑客为非法入侵花费的代价(时间、费用、风险等等)高于得到的好处,那么这样的系统可以认为是安全的
考虑的因素:同源策略、SQL输入、跨站脚本攻击、跨站请求伪造、加密解密技术、API安全性,这些每一个都是一门学问,大家可以自己都一些资料,自己去学习一下
③. 易用性
用户(是指最终用户)使用软件的容易程度,最终用户并不关心软件是怎么实现的,他们只关心UI、操作的方便性、流程的简易程度
④. 可用性
这个比较难描述,只要出现问题就是不可用的,例如:银行系统,A用户向B用户转账,A的钱扣了,B却没收到等等
⑤. 可伸缩性
代表一种弹性,在系统扩展成长的过程中,软件能够保证旺盛的生命力,通过很少的改动甚至只是硬件设备的添置,就能实现整个系统处理能力的线性增长,实现高吞吐量和低延迟的高性能。
考虑的因素:数据库是否支持集群、web服务器的集群(session本地问题、文件本地化问题)
⑥. 互操作性
一般是指对外提供API的调用难易,例如一些开放平台
⑦. 可靠性
在给定的条件下,在给定的时间内,系统不发生故障的概率,可靠性问题一出现一般是很难发现的,他出现无规律,时隐时现
⑧. 健壮性
是指在异常情况下,软件能够正常工作的能力
异常:与预期产生不同结果都叫异常,预期:和用户的预期、QA的预期、需求文档的预期(主要是这个,即运行结果和需求文档描述不一致)
例如:用户注册输入一个已存在的用户名,怎么做?(应该提示用户,不能抱一个505错误)、数据库宕机、网络慢等情形下该怎么做?
容错能力:异常发生后,软件能否正常运行,例如:数据库主从备份、多服务器集群,用户输入错误的数据,能提示用户
恢复能力:例如数据备份,当一个数据库宕机之后,另一个备份数据库能自己立马启动,接下宕机服务器的任务继续工作
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/130
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
近期评论