跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

评论专栏: Botzum、Brown 和 Hambrick:为什么非功能性需求很重要?

Keys Botzum, 高级技术人员 , EMC
Keys Botzum IBM Software Services for WebSphere 的一名高级技术人员。Botzum 在大型分布式系统设计方面有着十多年经验,并且专攻安全性问题。他使用过各种分布式技术,包括 Sun RPC、DCE、CORBA、AFS 和 DFS。最近,他着重研究 J2EE 及其相关技术。他拥有斯坦福大学计算机硕士学位和卡内基梅隆大学应用数学/计算机科学学士学位。

Botzum 发表过许多 WebSphere 和 WebSphere 安全性方面的论文。Keys Botzum 的其他文章和演示文稿可以在 http://www.keysbotzum.comIBM developerWorks WebSphere 上找到。他还著有 IBM WebSphere:Deployment and Advanced Configuration 一书(与 Bill Hines 合作完成)。
Kyle Brown, 高级技术人员, EMC
Kyle Brown IBM Software Services for WebSphere 的一名高级技术人员。Kyle 为 Fortune 500 客户提供面向对象的主题和 J2EE 技术方面的咨询服务、教育和指导。他与人合著了 Enterprise Java Programming with IBM WebSphereWebSphere AEs 4.0 Workbook for Enterprise Java Beans, 3rd EditionThe Design Patterns Smalltalk Companion。他还经常在 Enterprise Java、OO 设计和设计模式的主题会议上发言。
Geoff Hambrick, 杰出工程师, EMC
Geoff Hambrick 是 IBM 软件服务部 WebSphere Enablement Team 的首席顾问,居住在德克萨斯州的 Round Rock(在奥斯汀附近)。Enablement Team 通常通过深入的技术讲座及短期概念验证为售前流程提供支持。Geoff 于 2004 年 3 月 被选为 IBM 的杰出工程师 (Distinguished Engineer),他的工作是创建并传播在 IBM WebSphere Application Server 上开发 J2EE 应用程序的最佳实践。

简介: 在您设计解决方案的过程中满足功能性需求当然是很重要的。但是,如果没有考虑非功能性需求,您的解决方案则很难取得实效。

发布日期: 2006 年 1 月 18 日
级别: 初级
访问情况 : 2114 次浏览
评论: 


摘自 IBM WebSphere 开发者技术期刊

不要脱离实际环境

有时,我们会因为读到一篇文章或一本书,或者看到一个感觉不完善的介绍而变得异常偏执。在每种情况下,人们只讨论一些技术、解决方案和选项的某些方面,而忽视了一个至关重要的问题:非功能性需求。

诚然,功能性是非常重要的。毕竟,如果您不能展示您构建的系统实现了您想要的功能,那么谁会有兴趣呢?采取一种新颖、巧妙、更简单、更漂亮或更得体的方法来解决某种问题固然很好,但是如果您没有考虑非功能性需求,则您的解决方案可能无法取得实效

我们都碰到过这样的情况,许多解决方案虽然合理,但是当真正考虑将它们用于大型系统的实际环境,而管理这些系统的人员又非常忙时,它们就变得很荒谬可笑了。造成这些灾难的原因是不重视或忽略了系统的非功能性需求。

非功能性需求是这样一种需求,它不一定解决“我想要我的系统实现这种功能”,而是解决“如何使这个系统能在实际环境中运行”。对于这些实际环境,您很少听到人们提及的一些问题是:

  • 对在线系统的请求过多:用户太多了,全都在一块了!

  • 部署应用程序的管理员负担过大:在实际环境中,管理员对每个应用程序都将部署多次,而在部署之后必须对每一个应用程序进行监视。

  • 管理员会犯错误:毕竟,我们大多数都是普通人!虽然无差错地执行 100 次手动部署步骤在理论上是可能的,但是实际环境中没有出现过。

  • 会有恼人的脚本小子 (script kiddy) 和真正的破解高手攻击我们的系统:安全是多么重要啊!

所以,什么是非功能性需求呢?我们可以找到许多很好的定义,不过,我们首先来看 Software Characteristics 的 ISO 9126 列表;除功能性(这是理所当然的)以外,这些特性包括:

  • 可靠性

    只显示系统可以做某些事情是不够的。如果一个系统不能可靠地运行(例如,在加载时,或者在系统故障时,等等),则它就不能满足客户的需要。

    有一些问题应该自问一下:

    • 即使硬件出现故障,系统也可以可靠运行吗?
    • 复制和故障转移方案是什么?
    • 需要手动干预,还是系统可以自动进行故障转移?
    • 实现可靠性会对性能造成负面影响吗?
    • 实现可靠性的成本有多高?

    可靠性需要考虑的一些具体方面是:

    • 安全性:假设攻击者就在外面。如何知道系统用户就是他们所声称的,并只让他们访问经过授权的功能?如何保护我的系统不受攻击?考虑到网络攻击、机器攻击,甚至从您自己的系统内部发起的攻击。

    • 事务性:如何设计系统来保存工作单元的 ACID 属性?如果在设计中涉及多个独立的子系统(Web 服务和 SOA 就是这种情况),则这一点就显得特别重要。不要假设始终可以进行两阶段提交 (two phase commit)。

  • 可用性

    如果用户不能够从他们可用的渠道(例如 Web)方便地访问您的产品,那么它的好处何在呢?这有时是作为功能性的一部分一起考虑(或者应该在理想的环境下)的,但是常常被忽视,以致于整个项目处于危险之中。这里需要考虑的一些问题是:

    • 您是否为用户带来不适当的负担(例如,需要特殊的浏览器版本)?
    • 系统是否根据模型-视图-控制器 (Model-View-Controller) 体系结构设计以使多用户界面成为可能?如果是这样,如何将它们绑定在一起?
    • 是否界面本来就有状态而功能无状态(反之亦然)?
  • 有效性

    如果没有有效地使用资源(例如处理器、内存和磁盘空间),功能性、可靠性和可用性再好的系统最后都会失败。我们经常发现将有效性划分成两个子范围是很有用的,这两个子范围都应该加以考虑:

    • 性能:这个系统的运行情况有多好?它只是平稳缓慢地运行吗?系统可以达到其响应时间目标吗?应用程序的设计是否符合性能要求?您利用缓存了吗?

    • 可伸缩性:如果系统在小范围内运行看起来相当快,那么当扩展至每秒、每分钟或者每小时几千或成千上万个活动的时候呢?它的设计是否达到吞吐量目标?可以复制系统来实现线性扩展吗?是否存在瓶颈(例如公共数据库)?

  • 可维护性

    这是一个极其重要的需求,因为如果开发人员、管理员和操作人员不能够解决如何管理应用程序的问题,则它在首次发布之前就会夭折。假设您是一位管理员,您承担了解决此问题的任务,那么您如何配置它?如何监视它?如果您一件事情需要执行很多次(例如,安装许多应用程序),那么会怎么做呢?您是否有一个可复制的部署流程呢?您是否可以使重复的任务自动化,使之在大范围内可行呢?

  • 可移植性

    虽然列在最后,但它并非最不重要。例如,如何采用标准来提供某种形式的平台中立性呢?是否计划将应用程序迁移到您的最新和最高版本的应用服务器上呢?如果不打算这样做,则当供应商撤消对该版本的支持时您要怎么做呢?如果您的项目基于开放源代码,则也有类似的问题。如果每当某人有个更好的捕鼠器 (mousetrap) 您就必须重写整个应用程序,则没有人会问津。

在完美的世界中,我们希望每篇文章、论文、红皮书、幻灯片和系统设计都率先解决这些重要问题。它们非常重要。差不多始终都要进行一些折衷,它们应该显式进行以便确定特定的设计是否符合您的需要。如果您阅读的文章没有解决这些问题,将这作为我们的警告——一些重要的东西往往会被忽视。如果您是一位作者,请考虑我们的恳求:不要忽视这些问题!


参考资料

作者简介

Keys Botzum IBM Software Services for WebSphere 的一名高级技术人员。Botzum 在大型分布式系统设计方面有着十多年经验,并且专攻安全性问题。他使用过各种分布式技术,包括 Sun RPC、DCE、CORBA、AFS 和 DFS。最近,他着重研究 J2EE 及其相关技术。他拥有斯坦福大学计算机硕士学位和卡内基梅隆大学应用数学/计算机科学学士学位。

Botzum 发表过许多 WebSphere 和 WebSphere 安全性方面的论文。Keys Botzum 的其他文章和演示文稿可以在 http://www.keysbotzum.comIBM developerWorks WebSphere 上找到。他还著有 IBM WebSphere:Deployment and Advanced Configuration 一书(与 Bill Hines 合作完成)。

Kyle Brown IBM Software Services for WebSphere 的一名高级技术人员。Kyle 为 Fortune 500 客户提供面向对象的主题和 J2EE 技术方面的咨询服务、教育和指导。他与人合著了 Enterprise Java Programming with IBM WebSphereWebSphere AEs 4.0 Workbook for Enterprise Java Beans, 3rd EditionThe Design Patterns Smalltalk Companion。他还经常在 Enterprise Java、OO 设计和设计模式的主题会议上发言。

Geoff Hambrick 是 IBM 软件服务部 WebSphere Enablement Team 的首席顾问,居住在德克萨斯州的 Round Rock(在奥斯汀附近)。Enablement Team 通常通过深入的技术讲座及短期概念验证为售前流程提供支持。Geoff 于 2004 年 3 月 被选为 IBM 的杰出工程师 (Distinguished Engineer),他的工作是创建并传播在 IBM WebSphere Application Server 上开发 J2EE 应用程序的最佳实践。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=102996
ArticleTitle=评论专栏: Botzum、Brown 和 Hambrick:为什么非功能性需求很重要?
publish-date=01182006
author1-email=
author1-email-cc=
author2-email=
author2-email-cc=
author3-email=
author3-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。