2009年5月20日星期三

Architect_001:优秀软件的七大特性(翻译+整理)

这里所说的软件特征指的是非功能性需求(non-functional requirement ),如质量、兼容性、稳定性,对应英文后缀“-ilities”。
比如对于学生管理系统软件,登录、选课、添加成绩是功能需求;而系统要求能够允许1000个人同时登录,这就属于非功能需求。
客户经常会要求我们实现这些非功能需求,因此在设计时,我们必须考虑这些因素。
仅仅满足功能的软件是远远不够的,还必须满足其它的特性。这里总结了七大特性,它们最终决定了一个软件的成与败。

1. 易用性 Usability
软件的易用性可以使用户高效地完成工作。以下问题可以检验易用性:
(1)是否需要借用其它事物来模拟说明用户界面?
(2)最常用的操作使用起来是否如鱼得水,方便快捷?

(3)用户能否很快地上手操作而不需要帮助?
(4)验证或错误提示信息是否合理?

2. 可维护性 Maintainability
软件的可维护性用来衡量系统应对变化的能力。增加新功能或修改原有功能,是否可行,且对系统其它功能影响甚小。
以下问题可以检验可维护性:
(1)整个项目团队是否理解代码架构,是否有标准的文档备案?
(2)所有代码是否可以进行回归测试?
(3)修改的工作量能否按人天精确估算出来?


3. 可伸缩性 Scalability
软件的可伸缩性用来衡量系统应对压力变化的能力。当某一时刻用户超预期地急剧增多时,系统性能并没有明显下降。以下问题可以检验可伸缩性:
(1)系统所能承受的最大峰值负载是多少?
(2)How many database records can create until critical operations slow down?
(3)提高可伸缩性的主要方法是横向的“scale out”还是纵向的"scale up"(即增加多个点还是增强每个点的能力)?

4. 高可用性 Availability
软件的高可用性用来衡量系统平均正常运行的时间(两次失败之间的运行时间,Mean Time Between Failure (MTBF))

以下问题可以检验高可用性:
(1)系统要求最低正常运行时间是多少?
(2)系统可接受的最长宕机时间是多少?
(3)能否按计划安排宕机的时间、次数?


5. 可扩展性 Extensibility
软件的可扩展性用来衡量系统改变的能力。以下问题可以检验可扩展性:
(1)数据库Schema是否适应改变?
(2)系统是否允许依赖反转Inversion of Control (IoC)?
(3)最终用户是否可以扩展系统(脚本,用户自定义字段)?
(4)第三方软件能否方便地加入你的系统?

6. 安全 Security
软件的安全性是用来衡量系统的抵抗非法入侵者的能力以及为合法用户提供服务的能力。以下问题可以检验安全性:
(1)系统是否有基于角色的安全机制?
(2)Does code access security need to occur?
(3)哪些操作需要加以保护?
(4)如何管理用户?

7. 可移植性 Portability
软件的可移植性是用来衡量系统运行在多个平台的能力。以下问题可以检验可移植性:
(1)数据能否移植到其它系统?
(2)你的Web应用支持哪些浏览器?
(3)应用可以运行在哪些操作系统上?

当然,还有很多没有列在这里的特性,比如向下兼容性、互操作性、复用性等等。
您的“-ilities”列表包含哪些特性?按优先级排列,顺序如何?

参考文献:
1. 《The 7 Software “-ilities” You Need To Know

没有评论: