学习软件设计的非功能性需求

    非功能需求是产品必须具备的品质或者它将事情做到了多好,它们可以让产品有吸引力、易于使用、快速、可靠或者安全。通常并不改变产品的功能,功能性需求是让产品工作的需求,非功能需求是为工作赋予特征的需求。所以说,功能性需求和非功能性需求是相辅相成密不可分的。非功能性需求经常被忽略,因为它们不易被发现,发现后不易表达、实现以及测试。其实我们很多时候都将非功能需求不自觉的融入到了功能需求中。软件产品的非功能性需求包括系统的性能、可靠性、兼容性、可维护性、配置、界面、安全性、可扩充性和对技术和对业务的适应性等。

1、观感需求(界面需求):主要描述了对产品外观的期望、情绪和风格。这些需求规定了外观想要达到的目标,它和详细的界面设计还是有区别的,体现的是客户的感觉。作为web服务的一种的网银服务,应该相当重视观感需求,比如网站应该看起来很专业很有权威性、显的很高贵、很精美等。界面需求还包括对控件进行规范和对控件的使用范围进行一个规定等方面的内容。可以考虑借用一个原型来描述。
2、易用性需求:易用性会使产品提高符合用户习惯的能力以及其对使用的期望。它会对用户使用产品的生产效率、错误率以及用户对新产品的接收程度产生很大的影响。
3、执行需求:执行需求是指产品可以在给定的时间或者特定的精确度来执行某些任务,或者在一段时间内的极端状态值。在考虑执行需求时,可以从完成任务的速度、结果的精确度、容量、允许值的范围、单位时间内完成的任务数、资源的使用效率、两次故障间的平均屋故障时间、连续不停机时间等方面入手。它还应该包括对风险的控制内容。
4、操作和环境需求:主要描述产品使用的环境。分为软件环境和硬件环境方面内容。还应包括使用产品时必须要提供的合作软件的内容。
5、可维护性需求:便于后续软件维护、升级等。
6、安全性需求:安全性指产品消除潜在风险的能力和对风险的承受能力。包含、保密性、可靠性和完整性三个子特性。保密性指的是数据不能被授权用户以外的任何人访问的能力。可靠性指的是授权用户可以不受阻止的访问数据、与其它软件的兼容的能力和产品的强壮度。完整性指的是安预期目标完成任务的能力。
7、文化和政策需求:这是一类特殊的需求,由于人的习惯、宗教、语言、禁忌或偏见,可能会导致产品不被接收。
8、满足法律需求:不做违反法规的事。
 
    《系统分析师之路》有如下介绍:

    软件产品的非功能性需求包括系统的性能、可靠性、可维护性、可扩充性和对技术和对业务的适应性等。下面对其中的某些指标加以说明。

1、系统的完整性

  指为完成业务需求和系统正常运行本身要求而必须具有的功能,这些功能往往是用户不能提出的。典型的功能有:联机帮助、数据管理、用户管理、软件发布管理、在线升级,等等。

  并不是所有的系统都必须包括以上所有的功能,而是可以根据产品的使用环境和企业的产品发展决策进行挑选。例如,在线升级、软件发布管理适用于具有因特网或内网环境的软件产品;而数据管理对于产生数据存储的产品则是必须的,设计人员不应假设用户同时是一个合格的DBA,而且系统所产生信息的分布、关系,也不是DBA所应该了解的内容。因此,完整的系统应该包括数据备份、恢复、日志管理、垃圾数据清除等基本功能,哪怕这些功能的核心只是一条语句或命令。用户管理功能是另一项必不可少的功能,它定义哪些用户可以以什么样的功能使用系统。好的用户管理功能不仅可以有效控制用户对系统的使用,使系统处于一个安全、负载合理的运行状况,还能提高系统的应用适应性。

2、系统的可扩充性与可维护性

  指系统对技术和业务需求变化的支持能力。当技术变化或业务变化时,不可避免将带来系统的改变―不仅要进行设计实现的修改,甚至要进行产品定义的修改。好的软件设计应在系统构架上考虑能以尽量少的代价适应这种变化。常用的技术方法有面向对象的分析与设计以及设计模式。

3、技术适应性与应用适应性

  系统的适应性与系统的可扩充性和可维护性的概念相似,也表现产品的一种应变能力,但适应性强调的是在不进行系统设计的修改的前提下对技术与应用需求的适应能力。软件产品的适应性通常表现为产品的可配置能力。好的产品设计可能要考虑到运行条件的变化,包括技术条件(网络条件、硬件条件、软件系统平台条件等)的变化和应用方式的变化,如在具体应用中界面的变化、功能的剪裁、不同用户的职责分配和组合等。

  对以上重要的非功能性需求进行逐一分析后,就可以开始进行产品功能设计了。实际上,非功能性需求定义将反映到系统的功能设计中,表现为系统的架构。下一节中将会描述怎样实现系统的适应性。

时间: 2024-10-25 18:14:37

学习软件设计的非功能性需求的相关文章

软件开发的非功能性需求变更

需求变更本应是客户的权力,如果确是需要变更,当然要满足客户需要.但问题是不能让变更权力滥用,把一些无关痛痒的非功能性需求变更宠惯养成堂而皇之的变更.对于非功能性需求客户总会有新的想法,项目好像总没有办法终结.以前当出现这种情况时,我总觉得很沮丧,觉得自己非常不幸,怎样会碰上这样的客户.可在读了<设计模式精解(Design Patterns Explained)>一书的一段话后,我恍然大悟,这不是我的错,世界原来就是这样子的啊,永远不变的就是变化. 令人烦恼的非功能性需求变更 在软件开发中,大家

影响架构决策的非功能性需求

在软件工程中,非功能性需求(nonfunctional requirements,简称NFRs)与软件架构(software architectures,简称SAs)之间存在着紧密联系.早在1994年,Rick Kazman和Len Bass就肯定地说过,软件架构与实现非功能性需求之间存在密切联系.这一想法在软件开发领域已经流行很多年,它也解释了为什么开发项目要在实现非功能性需求方面做大量投入. 当我们认识到软件架构的概念如何从简单的结构性表示演变为决策视角时,这个笼统的观点就显得更加具体了.

如何写软件设计文档

软件设计的不同模型:瀑布式.快速原型法以及迭代式 自从1968年提出"软件工程"概念以来,软件开发领域对于借鉴传统工程的原则.方法,以提高质量.降低成本的探索就从未停止过.而在这个过程中,提出了许多不同的软件开发模型,典型的有:瀑布式,快速原型法,以及迭代式开发等. 瀑布式模型 是由W.W.Royce在1970年最初提出的软件开发模型,在瀑布模型中,开发被认为是按照需求分析,设计,实现,测试 (确认), 集成,和维护顺序的进行. 快速原型法 快速原型模型的第一步是建造一个快速原型,实现

如何扩展ArchiMate元模型来构建一个非功能性的模型扩展

本文展示如何扩展 ArchiMate 元模型来构建一个非功能性的模型扩展,可以从业务架构扩展到http://www.aliyun.com/zixun/aggregation/9942.html">技术架构.本文还提供了一个简单定制的下载,使您可以在 Rational System Architect 中使用新的元模型扩展. 本文主要关注 IT 系统非功能性方面的图形和形式表示,我们以非功能性需求(NFR)开始,因为这些表示是由架构师执行的. 在展示一些可用符号以及如何在 The Open

怎样在家自学软件设计

问题描述 怎样在家自学软件设计 我是一名高中生,但什么都不懂,想在家自学软件设计,请问各位大神,买什么书籍好? 解决方案 http://www.ed2000.com/ShowFile.asp?FileID=221694 可以下载视频,资料很全 解决方案二: 你想学什么,或者想写那类型的软件.最好先看下计算机基础,再看下网络基础.最好能先看看数字电路.8008cup指令集...如果想学习网页方向的,直接学html,或者直接上手网页三剑客... 解决方案三: 先从C语言学期吧,至少知道什么是编程,编

由学习《软件设计重构》所想到的代码review(二)

前言 对于一个程序员来讲如何来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我经常接触的一些程序员来看,他们买了很多技术重构类书籍,但是看完后代码编写能力并没有显著提高.有人说可以用代码review工具啊,但是像市面上的这些代码review工具,只能帮助我们解决表面的bug和规范点,还无法帮助我们发现更深层次的设计问题. 上一篇<由学习<软件设计重构>所想到的代码review(一)>我结合<软件设计重构>这本书谈谈在进行代码review的

由学习《软件设计重构》所想到的代码review(一)

前言 对于一个程序员来讲如何来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我经常接触的一些程序员来看,他们买了很多技术重构类书籍,但是看完后代码编写能力并没有显著提高.有人说可以用代码review工具啊,但是像市面上的这些代码review工具,只能帮助我们解决表面的bug和规范点,还无法帮助我们发现更深层次的设计问题. 下面我将结合<软件设计重构>这本书谈谈在进行代码review的时候,需要关注的哪些点. 一.技术债务 何为技术债务? 技术债务是有意或无意的做

用户体验设计:研究客户的需求观的20个法则

网页制作Webjx文章简介:如何有效收集与分析客户需求? 在项目开发中,所有的项目风险承担者都对需求分析阶段备感兴趣.这里所指的风险承 担者包括客户方面的项目负责人和用户,开发方面的需求分析人员和项目管理者. 对商业用户来说,他们后面是成百上千个 供货商,前面是成千上万个消费顾客.怎样利用软件管理错综复杂的供货商和消费顾客,如何做好精细到一个小小调料包的进.销.调.存的商品流通工作,这些都是商业企业需要信息管理系统的理由.软件开发的意义也就在于此.而弄清商业用户如此复杂需求的真面目,正是软件开发

学习网页设计必知的20个教学资源站

  好在伟大的互联网让全世界苦逼的互联网er都联合起来,一起解决问题.在线课程社区正是在这种情况下诞生的,应对不同需求的在线社区为需要学习的用户们提供了大量的辅助学习资料以及名师们的课程视频和文字教程,在社区中,你会发现一些传统经典的问题的解决方案,还能找到新兴技术和趋势的深度解读. 这些网站里有大量的第一手的学习资料,只要你用心学习,它们绝对不会让你失望. 1. Udemy Udemy是一个在线学习平台,如果你是技术大牛,可以在此销售自己的教学视频;如果你想在此学习技术,可以购买符合自己需求的