软件工程分析与设计
软件工程中的需求分析与设计

软件工程中的需求分析与设计软件工程是一门关于软件开发和维护的学科,其中需求分析和设计是非常重要的环节。
需求分析是指开发团队与用户进行沟通,确保软件开发的目标和用户需求一致。
设计则是在需求分析的基础上,将用户需求转化为可行的软件架构和设计方案。
本文将详细介绍软件工程中的需求分析和设计,以及其在项目开发中的重要性。
一、需求分析在软件开发的初期,需求分析起到了至关重要的作用。
需求分析的目标是确定是否有必要开发新的软件以及软件的功能和性能需求。
以下是需求分析的几个关键步骤:1.1 需求获取与定义需求获取是指开发团队与用户进行沟通,了解用户的需求和期望。
通过面对面的交流和讨论,开发团队可以收集到用户的需求,并根据这些需求来定义软件的功能和性能要求。
1.2 需求分析与规范在需求获取的基础上,开发团队需要对用户需求进行分析和整理,并将其规范化。
需求分析的目标是找出需求之间的关联性和优先级,确保所有的需求都得到了准确的表达和定义。
1.3 需求验证与确认在需求分析完成后,开发团队需要将需求与用户进行确认和验证。
这个过程通常包括用户验收测试和用户确认,以确保开发团队理解和表达了用户的需求,并且软件能够满足这些需求。
二、设计需求分析完成后,接下来的步骤是软件系统的设计。
设计的目标是将用户需求转化为可行的软件架构和设计方案。
以下是设计过程中的几个关键步骤:2.1 架构设计架构设计是指确定软件系统的整体结构和组件之间的关系。
在架构设计过程中,开发团队要考虑系统的可扩展性、可维护性和性能等方面的问题,确保软件系统具备良好的架构设计。
2.2 模块设计模块设计是将软件系统拆分为若干独立的模块,每个模块负责完成特定的功能。
在模块设计过程中,开发团队需要确定每个模块的输入、输出和接口定义,保证各个模块能够相互协同工作。
2.3 数据库设计如果软件系统需要使用数据库来存储和管理数据,那么数据库设计就是非常重要的环节。
数据库设计需要考虑数据的结构和关系,以及对数据库的操作和访问方式的定义。
软件工程的需求分析与设计

软件工程的需求分析与设计在软件开发过程中,需求分析与设计是最为关键的环节之一。
它们奠定了项目的基础,决定了软件开发过程的方向和目标。
本文将就软件工程的需求分析与设计进行探讨,介绍其重要性以及常用的方法和工具。
一、需求分析需求分析是软件工程中的第一步,它涉及对用户需求的调查、组织、协调和定义,旨在为软件开发过程提供一个清晰的目标。
在需求分析阶段,开发团队与用户之间需要进行沟通和协商,以确保对需求的准确理解。
需求分析的过程中,可以采用的方法包括面谈、问卷调查、原型设计等。
面谈可以深入了解用户的实际需求,探讨用户的期望和意见;问卷调查可以收集到大量的用户反馈,以便对需求进行总结和分析;原型设计则可以帮助用户更好地理解和确认需求。
在需求分析过程中,需要明确需求的功能性、非功能性以及约束性需求。
功能性需求是指系统提供的具体功能,例如某个模块需要实现的功能;非功能性需求则是指系统的性能、安全性、可用性等方面的要求;约束性需求是指外部条件对系统设计和实现的限制。
二、需求设计需求设计是在需求分析的基础上,根据需求确定系统的整体结构、功能模块以及内部数据与网络的安排。
需求设计是过程设计的一部分,它将需求转化为可行的解决方案,以满足用户的需求。
在需求设计阶段,可以采用的方法和工具包括结构化分析方法、数据流图、用例图、系统建模等。
结构化分析方法通过建立层次化的功能模型,将系统的各个功能模块分析和定义,以便于后续的详细设计;数据流图可以描述系统中数据的流动和处理过程,从而帮助设计师理解和定义系统的输入、处理和输出过程;用例图则可以用来描述系统和用户之间的交互,以及系统的各种用例场景。
同时,在需求设计过程中,还需要考虑系统的可扩展性、可维护性、可测试性以及安全性等方面的要求。
设计师需要综合考虑这些需求,并合理权衡各种因素,以得到一个优秀的设计方案。
三、需求分析与设计工具为了提高需求分析与设计的效率和质量,通常会采用一些专门的工具和软件来辅助完成。
软件工程结构化分析与设计

软件工程结构化分析与设计在当今数字化的时代,软件几乎无处不在,从我们日常使用的手机应用程序,到企业内部复杂的业务系统,软件已经成为推动社会发展和提高生活质量的重要力量。
而软件工程中的结构化分析与设计,作为软件开发过程中的关键环节,对于确保软件的质量、可维护性和可扩展性具有至关重要的意义。
首先,让我们来理解一下什么是软件工程结构化分析。
简单来说,结构化分析就是对软件系统进行详细的调查和研究,以确定系统的需求和功能。
这就好比在盖房子之前,我们需要清楚地知道要盖什么样的房子,有多少房间,每个房间的用途是什么等等。
在软件领域,结构化分析的主要任务包括收集用户需求、理解业务流程、识别系统的输入和输出、定义数据结构等。
在收集用户需求时,开发人员需要与用户进行充分的沟通和交流。
用户可能来自不同的背景和领域,他们对软件的期望和需求也各不相同。
因此,开发人员需要具备良好的沟通技巧和理解能力,能够将用户模糊的、不明确的需求转化为清晰、具体的软件功能描述。
比如,用户可能说“我希望这个软件能够快速处理大量数据”,开发人员就需要进一步询问“快速”的具体标准是什么,“大量数据”大概是多少,以及数据的类型和格式等。
理解业务流程也是结构化分析的重要部分。
不同的行业和组织都有其独特的业务流程,软件系统需要能够与之相适应和支持。
例如,在一个电子商务系统中,订单处理、库存管理、支付流程等都是关键的业务环节,开发人员需要深入了解这些流程的细节,以便设计出符合业务需求的软件。
接下来,我们谈谈软件工程结构化设计。
结构化设计是在结构化分析的基础上,将系统的需求转化为软件的架构和模块设计。
这就像是根据房子的设计图纸,确定房子的框架结构、房间布局以及各个部分使用的材料等。
在结构化设计中,模块划分是一个关键步骤。
模块是软件系统中的独立组成部分,具有明确的功能和接口。
合理的模块划分可以提高软件的可维护性和可扩展性。
例如,将一个复杂的系统划分为用户界面模块、数据处理模块、业务逻辑模块等,每个模块都专注于完成特定的任务,并且可以独立地进行开发、测试和维护。
软件工程的需求分析与系统设计

软件工程的需求分析与系统设计软件工程是指将工程的原理和方法应用于开发、维护和管理软件系统的学科。
在软件工程的开发过程中,需求分析和系统设计是非常重要的环节。
本文将重点探讨软件工程中的需求分析和系统设计,并介绍相关的方法和技术。
一、需求分析需求分析是软件工程中非常关键的阶段,它的目的是准确地理解用户的需求,并将这些需求转化为具体的软件规格说明。
需求分析阶段主要包括以下几个步骤。
1. 需求获取:通过与用户的沟通和交流,获取用户对软件系统的需求。
可以通过面对面的会议、访谈和问卷调查等方式来获取需求。
2. 需求分析:将收集到的需求进行整理和归类,分析用户需求的优先级和重要性,确定最终的软件需求规格。
3. 需求验证:验证软件需求规格是否准确、完整和一致。
可以通过原型设计、模型验证和评审等方式进行需求验证。
二、系统设计系统设计是根据需求分析的结果,将软件系统划分为各个子系统,并确定各个子系统之间的接口和功能。
系统设计阶段主要包括以下几个步骤。
1. 架构设计:确定软件系统的整体框架和结构,包括模块划分、组件设计和系统模式选择等。
常用的系统架构包括分层架构、客户-服务器架构和面向服务架构等。
2. 详细设计:对系统的各个模块进行详细设计,包括算法设计、数据结构设计和界面设计等。
详细设计需要考虑系统的性能、可靠性和可扩展性等方面。
3. 接口设计:定义各个模块之间的接口规范,确保模块之间的正确交互和数据传递。
接口设计需要考虑模块之间的解耦和复用性。
三、需求分析与系统设计的关系需求分析和系统设计是紧密相关的,需求分析的结果直接影响系统设计的过程和结果。
需求分析阶段的正确性和完整性决定了系统设计的准确性和稳定性。
在需求分析阶段,我们需要充分了解用户的需求,并将之转化为具体的软件规格。
这些规格要求在系统设计阶段被满足和实现,包括系统的架构设计、模块划分和接口设计等。
系统设计阶段需要基于需求分析的结果,进行各个模块的设计和接口规范的定义。
软件工程结构化分析与设计范文精简版

软件工程结构化分析与设计软件工程结构化分析与设计简介软件工程结构化分析与设计是软件工程领域中重要的一环,它涉及到软件系统的分析和设计阶段。
在软件工程领域,结构化分析与设计是指通过建立准确的抽象层次,将软件系统划分为各个模块,并规定各个模块之间的关系和功能,以实现系统的需求。
什么是结构化分析与设计结构化分析与设计是一种系统性的方法,它利用模块化和层次化的原则,对软件系统进行分析、设计和实现。
结构化分析关注的是系统需求,它通过分解需求,将系统划分为不同的模块,并定义它们之间的关系。
结构化设计则负责将分析得到的模块进行详细设计,并确定模块的功能和接口。
结构化分析与设计的目标是提高软件系统的可理解性、可维护性和可扩展性。
结构化分析与设计的流程结构化分析与设计通常包含以下几个步骤:1. 确定系统需求:定义软件系统的功能和性能要求。
2. 确定模块划分:将系统划分为不同的模块,并定义它们之间的功能和接口。
3. 定义模块内部逻辑:对每个模块进行详细设计,包括设计数据结构和算法等。
4. 确定模块间的通信方式:确定模块之间的数据交换和通信方式。
5. 验证和评估设计:对设计进行评估和验证,确保满足系统需求。
6. 实施和编码:根据设计编写代码,完成软件系统的实施。
7. 和调试:对软件系统进行和调试,确保其功能和性能的正确性。
结构化分析与设计的优势结构化分析与设计具有以下优势:1. 提高可理解性:通过模块化的设计原则,使系统的结构和功能更易于理解和掌握。
2. 提高可维护性:分解模块可以使系统的维护更加简单和方便,减少对其他模块的影响。
3. 提高可扩展性:模块化的设计可以使系统更易于扩展和修改,方便适应需求变化。
4. 提高开发效率:结构化分析与设计明确了各个模块的功能和接口,可以并行开发,提高开发效率。
5. 降低系统复杂性:通过模块化的设计,将大型系统划分为多个小模块,降低了系统的复杂性。
结构化分析与设计的工具和技术在软件工程中,有许多工具和技术可以用于结构化分析与设计。
软件工程实践:需求分析和系统设计

软件工程实践:需求分析和系统设计软件工程是指将工程的原则和技术应用于软件的开发和维护过程中,以实现高质量、高可靠性和高效率的软件产品。
在软件工程实践中,需求分析和系统设计是非常重要的环节。
本文将详细介绍需求分析和系统设计的步骤和方法。
一、需求分析1. 确定项目的范围和目标在开始需求分析之前,需要明确项目的整体范围和目标。
这包括确定软件的功能和特性、用户需求以及项目的约束条件等。
2. 收集需求需求收集是指通过与用户、客户和利益相关者沟通,确定软件的具体需求。
可以采用面谈、问卷调查、用户故事等方法收集需求。
3. 分析和整理需求在收集到需求之后,需要对需求进行分析和整理。
这包括识别和分类需求、厘清需求之间的关系、评估和验证需求的可行性等。
4. 编写需求规格说明书需求规格说明书是指将需求以详细、准确和可理解的方式进行描述的文档。
在编写需求规格说明书时,应该清晰地定义用户需求、功能需求、非功能需求等,对每个需求进行详细描述,并确保需求之间的一致性和完整性。
5. 确认需求需求确认是指与用户和客户确认需求规格说明书的内容。
在确认需求之前,应邀请相关方参与需求评审,确保所有人对需求的理解一致,并进行必要的修改和调整。
6. 管理需求变更在软件开发过程中,需求可能会发生变化。
需要建立一个有效的需求变更管理机制,及时识别、记录和评估需求变更,确保变更的可行性和影响的控制。
二、系统设计1. 确定系统的整体架构系统设计的第一步是确定系统的整体架构。
系统架构包括系统的分层和组件的划分,确定各个组件之间的关系和通信方式。
2. 设计系统的详细模块在确定系统的整体架构之后,需要对系统进行更详细的设计。
将系统按照功能划分成不同的模块,并定义每个模块的职责和接口。
3. 设计系统的数据库对于需要存储数据的系统,需要设计系统的数据库。
包括数据库的结构设计、表的设计、关系的建立等。
4. 确定接口规范系统设计还需要确定系统的接口规范。
这包括定义系统与外部系统的接口、系统内部模块之间的接口等。
软件工程结构化分析与设计

软件工程结构化分析与设计软件工程结构化分析与设计简介软件工程结构化分析与设计(Software Engineering Structured Analysis and Design)是软件工程的重要环节之一,旨在将复杂的软件系统分解为相对简单的模块,从而便于理解、开发和维护。
结构化分析结构化分析是软件工程中的一种需求分析方法,通过对用户需求进行分析,将系统功能划分为不同的模块,以及模块之间的关系和交互。
结构化分析采用基于流程图的图形化表示方法,通常使用数据流图(Data Flow Diagram,简称DFD)来描述系统的功能流程。
结构化设计结构化设计是在结构化分析的基础上,进一步定义每个模块内部的结构和功能。
它将模块细化为更小的子模块,通过设计各个模块之间的接口和通信方式,确保系统能够协调运作。
结构化设计通常使用结构图来表示系统的模块组织结构,其中最常见的就是层次图(Hierarchy Chart)和结构图(Structure Chart)。
优势与挑战结构化分析与设计的主要优势在于可以将复杂系统分解为简单的模块,使得系统的开发和维护更加容易。
结构化分析与设计还能够提高系统的可靠性和可扩展性。
,结构化分析与设计也面临一些挑战。
结构化分析与设计需要面对不断变化的需求,需要具备较好的适应性和灵活性。
结构化分析与设计也需要考虑系统的性能、安全性等方面的需求,以保证系统能够满足用户的要求。
软件工程结构化分析与设计是软件工程中重要的一环,通过将复杂的系统分解为简单的模块,并设计模块之间的关系和接口,实现系统的有效开发和维护。
结构化分析与设计能够提高系统的可靠性、可扩展性和易开发性,但也需要面对需求变化和其他挑战。
希望通过软件工程结构化分析与设计,我们可以开发出更好的软件系统,满足用户的需求。
软件工程结构化分析与设计

软件工程结构化分析与设计1. 简介软件工程结构化分析与设计是软件开发中非常重要的一门课程,通过对软件系统进行结构化分析和设计,可以提高软件的质量、可维护性和可扩展性。
本文将介绍软件工程结构化分析与设计的基本概念和主要内容。
2. 结构化分析结构化分析是软件工程中的一种分析技术,它主要用于对问题域进行分析,确定问题需求和对问题进行建模。
结构化分析主要包括以下几个步骤:确定问题领域和问题域边界;识别问题中的对象和它们之间的关系;划分问题域为子问题,建立问题域模型;确定问题的功能需求和非功能需求。
结构化分析的核心是数据流图,它可以表示问题域中的数据流和处理过程,帮助确定系统功能和数据流向。
3. 结构化设计结构化设计是在结构化分析的基础上进行的,它主要用于确定系统的结构和设计系统的组件。
结构化设计的主要内容包括以下几个方面:系统结构设计:确定系统的模块和模块之间的关系;数据结构设计:设计系统中的数据结构和数据存储组织方式;接口设计:设计系统与其他系统或外部设备之间的接口;过程设计:设计系统中的算法和处理过程。
结构化设计的目标是提高系统的可维护性、可扩展性和可重用性,满足系统的功能需求和非功能需求。
4. 工具与方法在软件工程结构化分析与设计过程中,有一些常用的工具和方法可以帮助完成任务。
其中一些常用的工具包括:UML:统一建模语言,用于描述系统的结构和行为;数据流图:用于表示数据流和处理过程;结构图:用于表示系统的模块和模块之间的关系;状态图:用于描述系统中对象的状态和状态转换。
而一些常用的方法包括:数据字典:记录系统中的数据元素和数据流,帮助理清数据之间的关系;面向对象分析与设计:通过对象的抽象和分类,设计系统的结构和行为;结构化设计方法:采用自顶向下和自底向上的设计方法,将系统划分为模块并确定模块之间的关系。
5.软件工程结构化分析与设计是软件开发中非常重要的一环,它通过对问题域进行分析和设计,帮助构建高质量、可维护和可扩展的软件系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程分析与设计1.1 问题解决和决策在现阶段,介绍杜威在1910年首先阐述的一种解决问题的结构方法是很有益处的。
约翰杜威确定的阶段是:问题是什么?可供选择的办法由那些?那种办法是最好的?你现在应该努力识别杜威的三个阶段与软件生命周期的相似之处。
为了弄清第一阶段的问题定义与我们的需求分析阶段之间的相似之处,在前面我们已经对生命周期介绍得足够多了。
事实上,许多组织使用词汇‘问题’或‘项目定义’而不用‘需求分析’。
后两个阶段同样的被认为相当于我们所提到的设计阶段。
最近(1960),西蒙在有关决策的文章中提出了相应的结构。
西蒙教授对决策阶段作以下分类:信息收集活动,设计活动以及选择活动。
单词‘信息收集’在这里使用其军事方面的意义,也就是,在外界环境中搜索做出决策所需的各种条件。
‘设计’与发明及开发行为可能的发展方向有关。
挑选一个详细的行动方案的活动称为选择。
于是,我们的需求分析对应于信息收集活动。
尽管软件设计员不需要拼命寻找作决定所需的环境条件,但人们通常会在软件设计员的桌子上看到‘需求说明书’。
但是,西蒙所用的单词‘设计’与我们所用的不同。
我们所用的‘设计’同时包括选择的意义,而西蒙的‘设计’用来描述可能的解决方案的产生。
有理由相信问题解决.决策.软件分析和设计共享一个公共构架。
主张前两项活动实际上在效果上是相同的,而最后一项活动恰是这一现象的一个详细实例是有一定道理的。
因此,我们将坚持把软件设计当成解决问题的活动,并这样处理他。
这表示我们必须在产生可能的解决方案和从中选择一个最佳方案两方面投入一定的精力。
1.2 选择规模让我们以非常简单的设计问题开始。
作为一个小家庭的双亲之一,你决定带着孩子和配偶到斯卡伯勒去游玩。
你的设计问题是确定旅行的最好的方法。
你有如下选择:乘火车,坐公汽或驾驶私人轿车。
要做出选择你需要其他一些东西。
除非这三种选择之一能提供一些对你来说分重要的或是最佳的特性,否则你很难决定那种是最好的。
因此,如果你想要把外出的费用减小到最少,根据火车的票价和乘轿车需消耗的燃料,立刻就可以做出决定。
以这样的标准,最少的成本就称作设计标准或设计目标。
类似的,你可以把旅行时间作为设计标准,研究一下旅行时间表和你的轿车的性能立刻就可以做出选择。
顺便提一下,如果花销和旅行时间都很重要,那么做出选择是很困难的。
这一点以后将会讨论。
目前,我们必须专注于选择规模。
1.2.1 组合的爆炸在上述例子中设计问题的价值并不是很高,因为选择是在三个很容易评估的方案中做出的。
但是,回想过去我们要你确定添加三个数字会存在多少种可能的设计这一问题。
我们发明并使用了一个称之为添加树的设计得出共有四种可能(见表1.1)。
在计算机科学中,通常树梢向下,而树根在上,但他所表达的意义分清晰。
树叶代表数字,标记为A.B和C。
树枝代表数字从根部向尖端移动的次数。
树枝相交的地方我们称之为节点,在节点处就可以产生一个简单的追加。
计算增加五个节点可能的方案数也并不困难。
事实上,总共有236设计方案,在表1.2中相应的列举了少数的几个添加树。
这对于添加三个数有四种可能来说是一个相当大的增长,它就是我们称之为组合爆炸的一个例子。
换句话说,当考虑把许多因素组合到一起而形成的各种方法时,只要因素的数目增加了,方案数就会增加许多。
你可以从以前的章节回想一下,增加50个数据这样一个貌似简单的问题就会产生6.85x1081种设计乘车花销或旅行时间,问题很简单。
但是如果两个标准都重要,那设计就相当困难了。
进一步讲,我们假设双亲中的决策者根据获得的费用结构.时间表等信息构造了表1.3。
为了去掉我们自己的成见,把这三种方式称为P.Q和R。
评估每种方式的乘车花销或旅行时间。
很明显,如果乘车花销作为唯一标准的话R是最好的选择,如果旅行时间最重要的话应该选P。
想象你就是双亲之一的决策者。
基于表1.3给出的信息你将做如何的选择呢?(以前我们并不在乎你的实际答案,而真正关心你的实现过程。
)如果你完成了一个选择,不管结果是P.Q或是R,尽管你可能不是很清楚,但是你一定是经过了上述过程而得出的结果。
你的问题可能是:多花2.35英镑来节省25分钟的时间时不是值得。
根据你自己的回答,你就能够得出结论。
你也可能认为这是一个愚蠢的问题,因为实际上,你需要把其他的东西计算在内,例如:舒适性.便捷性以及格洛丽亚姨妈的坚持(向她以往的那样),或者是一路的秀丽风景。
同时我们注意到这三个属性和旅行方式是无法确定的,所以他们与直接费用的折衷方案是不可能的。
你也可能会苦恼那些能够使定期的旅行无法进行的不确定的事件,例如工程任务.交通堵塞.人员不齐以及车抛锚。
这些抱怨都相当的合理,但是,人们总是按照我们在这里讨论的方法进行选择的。
多数情况下,人们是通过组合折衷和直觉的办法来选择。
但是必须指出,可以通过把以上提及的所有因素综合起来形成一个功能函数来进行性选择。
但是,这些太深了,我们必须返回到原来所讨论的问题上去。
1.3.1 压力和标准迄今为止,我们还没思考过为什么在前些节中要把费用和旅行时间作为唯一的设计标准。
认真考虑我们就会发现这是由于外界对决策者的压力。
我们不排除内部产生的压力,但通常我们都把它看成外部产生的。
见图1.4。
我们现在来看设计标准的起源。
节俭的妻子坚持费用要低;不耐烦的孩子们要求旅程时间要短。
毫无疑问,如果格洛丽亚姨妈(她特别喜欢在国家公园的停车场里打盹以及非常热衷于便宜货)坚持的话,几乎是无法拒绝的。
所以选择应该试图令所有这些要求都得到满意的解决。
或者至少任何人不会产生分的不满。
必须注意的是,处理步骤是由决策者认为这些压力的相对重要性所决定的。
压力的相关重要性的思想是以软件设计员的行为为基础的,我们再来谈谈软件设计员。
1.3.2 压力和软件设计在研究早期的关于软件生存期的资料的时候,你需要做一个练习(练习2.2),以便在软件设计时把你对各属性的观点计算在内。
在练习的答案中可以看到属性有很多个,但最重要的属性包括:经济性.可靠性.可维护性.耐用性.完整性和安全性。
前三个属性的定义相当的明显了。
但是你怎样理解耐用性.完整性和安全性呢?你可以回想练习的答案,耐用性就是系统在进行大量事务处理时所表现出的性能。
完整性和安全性更难定义,因为他们经常可以交替使用。
我更倾向于用完整性来描述程序和数据对突发事件的抵抗能力。
而安全性适用于对故意破坏的抵抗能力。
我们下一个要讨论的问题是研究另一种压力情况,见图表1.5。
在开始时使用者把压力作为一个单独的实体。
当然,实际上使用单位不同的部门和个人在软件运行时会有不同的既得的重要性,相应地,他们施加的压力就会有所不同。
但是在前面的章节中,决策者恰恰是疲惫的父亲,所以就需要以使用者的需求得到最大满足的方法来进行设计。
设计员实在是需要一些可以从比较设计中导出的复合方法,这些设计应尽可能满足使用者相对重要的属性要求,并对不确定性留有适当的余量。
因此,设计员真正需要的是一个多功能函数。
但是我们曾经躲避过这个问题,现在我们同样要避开它。
原因是这样的函数在软件设计的上下文中是不可能导出的,所以没有一个设计者试图要导出它。
但在分有限的条件下(以后会解释),设计员在把客观现实加入到它的设计机制中时会感到很大的压力。
这通常涉及到我们以前遇到过的处理过程的发展,并需要应用值函数。
简单的讲就是为各属性形成一个加权平均值。
例如,我们可以用V(S)来代表软件设计值,如下: V(S)={c1 x 属性1的值}+{c2 x 属性2的值}+{c3 x 属性3的值}+…+{cn x 属性n的值}(1)c1.c2.c3…cn为加权因数。
用从0到100这一标准范围来代表每一个属性及复合属性是很方便的。
在这种情况下,强制(c1+c2+c3+…+cn=1)。
(查普曼,1980年)。
为了示范值函数的应用,我们假定一个设计员想要从三个候选设计中作一个最终选择。
同时我们假定对设计员的压力限于以下三个:经济性.可靠性和耐用性。
三个设计的相关数据见表1.6。
X .Y.Z每个设计的图表说明了每个设计标准的估计参数值。
必须注意到,我用系统运行费用每年几千英镑来反映其经济性。
可靠性的评估使用实用性的百分数,也就是说,软件预期正常运行时间百分比。
系统处理大量错误时的容错百分数反映其耐用性。
我们首先要为每个属性建立一个值函数。
值函数----单一属性一个值函数仅仅表示某一特殊属性不同‘量’的愿望。
我们按照意愿的先后排列所有可能的属性值来构建值函数。
最不希望的赋值为0,最希望的赋值100,其余的在0到100之间适当的赋值。
这样我们就根据影响我们的三个标准得出了值函数,见表1.7。
函数应尽可能的体现使用者的属性值。
必须指出,尽管我们以前举的是两个线性函数的例子,但是该函数并非必须是线形的。
我们把最糟的结果放在水平轴线的左边,最佳的结果放在水平轴线的右边。
这意味着如果按照经济性,较低的计算结果为首选,从左到右可能性逐渐增加。
另两个结果从左到右安升序排列。
我们现在需要把所有设计的结果作为一个整体。
值函数----多属性我们根据经济性.可靠性.耐用性,使用表达式(1)来评估这三个设计: V(S)={c1 x 属性1的值}+{c2 x 属性2的值}+{c3 x 属性3的值} (2)现在只剩下给加权因数c1.c2.c3赋值了,这些值必须反映对设计员的相应压力大小。
总之,如果要使用多属性值函数作重大的决定就一定要谨慎小心。
理论上讲,首先必须满足独立。
只有参数选择是在任何一对独立于其他属值性的属性之间进行时这种情况才满足。
例如,如果评估耐用性都为20%的两种设计,则运行费用每年25000英镑.可靠性为97%的设计优先于运行费用每年30000英镑.可靠性为99%的设计,如果两种设计的耐用性都变为15%,那么会有同样的选择。
不难想象条件改变的情况。
我们的例子可能很恰当。
可能在许多使用者的眼里,象上面那样耐用性降低了,可靠性应该更重要了,而选择应该是相反的。
第二个困难在于加权因数的选择。
我们在练习1.3中可以看到加权因数一个偶然的改变就会产生新的最佳设计方案。
仅仅是设计员对压力的反应并非评估加权因数的充分机制。
有必要采用更加正式的方法来得到他们。
这包括向使用人员问一些假定问题,特别是如果包括大量的标准,通常会很耗时间。
查普曼(1980)给出了这些方法恰当的描述。
最后的也是最重要的困难是许多重要的设计标准是很难计量的。
举一个可维护性的方面例子,很难为其构思一个优先的方法,所以任何基于数字的选择机制都同样难以执行。
因此,一个设计员想使用值函数处理大量的选择工作是不可能的。
更合适的是他用以使用者直觉地参数选择为基础的简单的处理技术作为一个大致的筛选来排除那些最不可能的选择。
只有当设计方案的数量被减少到相当小时,才能产生最完善的评估技术。