软件技术基础课件7——软件工程概念2.ppt
1,第四部分 软件工程软件设计,软件设计基本概念概要设计:将软件需求转化为软件体系结构,确定系统级接口、全局数据结构或数据库模式 模块组成与模块功能描述、模块间接口、主要数据对象与对象描述、数据库的组成 模块间调用方式;功能的对应模块组合详细设计:确立每个模块的实现算法、局部数据结构,用适当方法表示算法和数据结构的细节 模块内的部分数据对象;数据对象(类)的实现方法,2,第四部分 软件工程,基本概念(续)软件模块整个软件被划分成若干单独命名和可编址的部分,这些组成部分即为模块,模块基本属性,模块实现什么功能,模块的内部实现逻辑,该模块使用时的环境和条件,3,第四部分 软件工程,基本概念(续)软件模块划分原则:提高模块的独立性。度量模块独立性的两个准则是模块间的内聚性和耦合性,内聚性,耦合性,内聚性是一个模块内部各个元素彼此结合的紧密程度的度量。,耦合性是模块间互相连接的紧密程度的度量。它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。,4,第四部分 软件工程,基本概念(续)软件模块内聚性 耦合性,(1)功能内聚(2)信息内聚(3)通信内聚(4)过程内聚(5)时间内聚(6)逻辑内聚(7)巧合内聚,(1)非直接耦合(2)数据耦合(3)标记耦合(4)控制耦合(5)外部耦合(6)公共耦合(7)内容耦合,5,第四部分 软件工程,概要设计任务,(1)制定规范(2)软件系统结构的总体设计(3)处理方式设计(4)数据结构设计(5)可靠性设计(6)编写概要设计阶段的文档,6,第四部分 软件工程,概要设计目标:把需求转换为软件的体系结构模块结构与数据结构任务,(1)制定规范(2)软件系统结构的总体设计(3)处理方式设计(4)数据结构设计(5)可靠性设计(6)编写概要设计阶段的文档,7,第四部分 软件工程,概要设计模块结构:程序各个部件(模块)的组织情况,是软件的过程表示举例,8,第四部分 软件工程,概要设计模块间关系表示:结构图反映程序中模块间的调用关系和模块间信息的传递结构图的要素包括:(1)模块:模块用矩形框表示,并用模块的名字标记它。(2)模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块,9,第四部分 软件工程,概要设计数据结构设计:主要内容,(1)确定涉及到的文件系统结构;数据库的模式、子模式;进行数据完整性和安全性的设计。(2)确定输入、输出文件的详细的数据结构。(3)结合算法设计,确定算法所必需的逻辑数据结构及其操作。(4)确定对逻辑数据结构所必需的那些操作的程序模块(软件包)。(5)限制和确定各个数据设计决策的影响范围。(6)若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则。(7)数据的保护性设计,10,第四部分 软件工程,详细设计需要完成的工作:,(1)确定软件各个组成部分内的算法以及各部分的内部数据组织。(2)选定某种过程的表达形式来描述各种算法。可选用的过程表达形式有:流程图、盒图、PAD图等。(3)编写详细设计说明书。(4)制定单元测试计划。(5)进行详细设计评审。,11,第四部分 软件工程,详细设计表示方法:应采用合适的方式来描述模块内问题解决过程的细节结构化的图形设计表示法是易于使用、易于理解的方式,12,第四部分 软件工程,详细设计流程图:,顺序结构,选择结构,循环结构,13,第四部分 软件工程,详细设计流程图,国家标准(GB1525-89)流程图符号:,14,第四部分 软件工程,详细设计流程图标准流程图举例:,15,第四部分 软件工程,详细设计盒图(N-S图,Chapin图)功能域明确;很容易确定局部和全局数据的作用域;不可能任意转移控制;很容易表示嵌套关系及模块的层次关系,16,第四部分 软件工程,面向对象的设计方法分析与设计步骤面向对象的设计方法 也需要得出软件的体系结构静态建模与动态建模(1)将系统划分为子系统,可以使用包来描述子系统,根据子系统提供的操作来定义它们的接口.然后设计子系统的概念模型。(2)对复杂的子系统,可以继续将其分解,得到更简单的子系统。直到得出子系统内待解决问题域中的类。确定子系统中存在的类及类之间的关系,并定义了子系统的接口及关系后,便完成了系统的静态建模工作。(3)描述待解决问题域中类的动态行为,从而建立问题解决过程的系统动态模型。,17,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的识别为了描述一个软件系统,识别其中的对象并将其抽象为类识别类和对象的一些方法:(1)通过实体-关系模型识别类和对象。(2)基于自然语言信息识别类和对象。(3)基于用例与序列图识别类和对象。,18,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的筛选,依据下列标准,删除不正确或不必要的类或对象:冗余 如果两个类表达了同样的信息,则应该保留在此问题域中最富于描述的类。无关 现实世界中存在许多对象,不能把它们都纳入到系统中去,仅需要把与本问题密切相关的类或对象放进目标系统中。有些类在其他问题中可能很重要,但与当前要解决的问题无关,同样也应该把它们删掉。,19,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的筛选,笼统 在需求陈述中常常使用一些笼统的、泛指的名词,虽然在初步分析时把它们作为候选的类或对象列出来了,但是,要么系统无须记忆有关它们的信息,要么在需求陈述中有更明确更具体的名词对应它们所暗指的事务,因此,通常把这些笼统的或模糊的类去掉。属性 在需求陈述中有些名词实际上描述的是其他对象的属性,应该把这些名词从候选类或对象中去掉。但如果某个性质具有很强的独立性,则应把它作为类而不是作为属性。,20,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的筛选,操作 在需求陈述中有时可能使用一些既可作为名词,又可作为动词的词,应该慎重考虑它们在本问题中的含义,以便正确地决定把它们作为类还是作为类中定义的操作。实现 在分析阶段不应该过早地考虑怎样实现目标系统。因此,应该去掉仅和实现有关的候选的类/对象。在设计和实现阶段,这些类/对象可能是重要的,但在分析阶段过早地考虑它们反而会分散我们的注意力。,21,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的属性确定,通常包括分析和选择两步:分析 在需求陈述中用名词词组表示属性,例如,“机床的重量”或“导弹的直径”。往往用形容词表示可枚举的具体属性,例如,“红色的”、“打开的”。但不可能在需求陈述中找到所有属性,分析员还必须藉助于领域知识和常识才能分析得出需要的属性。选择 认真考察经初步分析而确定下来的那些属性,从中删除不正确的或不必要的属性。,22,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的描述方式类图通常表示为长方形,长方形又分三个部分,分别用来表示类的名字、属性和操作,23,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的描述方式类图中的关系普通关联导航关联关联中的角色,24,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的描述方式类图中的关系聚合关联普通聚合,共享聚合,复合聚合,25,第四部分 软件工程,面向对象的设计方法分析与设计步骤类的描述方式类图中的关系通用化继承,26,第四部分 软件工程,面向对象的设计方法分析与设计步骤包子系统的描述一种组合机制,把许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合。,27,第四部分 软件工程,面向对象的设计方法分析与设计步骤动态建模表示方法:状态图所有对象都具有状态,状态是对象执行了一系列活动的结果当某个事件发生后,对象的状态将发生变化。状态图中定义的状态有:初态、终态、中间状态、复合状态。其中,初态是状态图的起始点,而终态则是状态图的终点。一个状态图只能有一个初态,而终态则可以有多个描述跨越多个用例的单个对象的行为,顺序图,状态图,合作图,其它,第四部分 软件工程,面向对象的设计方法分析与设计步骤动态建模顺序图(单个用例中几个对象的行为)描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序,第四部分 软件工程,面向对象的设计方法分析与设计步骤动态建模协作图(合作图)(单个用例中几个对象的行为)用于描述相互合作的对象间的交互关系和链接关系,第四部分 软件工程,编码常用设计语言及特点,第四部分 软件工程,第四部分 软件工程,第四部分 软件工程,编码语言选择原则,为使程序易测试和维护以减少生存周期的总成本,选用高级语言应用理想的模块化机制,以及可读性好的控制结构和数据结构。,为便于调试和提高软件可靠性,应选用编译程序能够尽可能多地发现程序中错误的语言。,为降低软件开发和维护成本,选用的语言应具有良好的独立的编译机制。,选用程序员掌握得最好的语言!,第四部分 软件工程,编码实际开发时语言选择原则,系统用户的要求,可以使用的编译程序,可以得到的软件工具,程序员的知识,软件可移植性要求,软件应用领域,工程规模,如果所开发的系统由用户负责维护,用户通常要求用他们熟悉的语言书写程序。,运行目标系统的环境中可以提供的编译程序往往限制了可以选用的语言的范围。,如果某种语言有支持程序开发工具可以利用,则目标的实现和验证都变得比较容易。,标准化程度高、程序可移植性好是选择语言的重要标准,最好是选择程序员最熟悉的语言,第四部分 软件工程,编码编码规范代码文档化包括标识符的选择与命名、注释安排、代码的视觉组织等。程序清单的布局对于程序的可读性也有很大影响,应该利用适当的阶梯(即缩进)形式使程序的层次结构清晰明显,#define ONE 1#define TEN 10#define TWENTY 20,#define INPUT_MODE 1#define INPUT_BUF 10#define OUTPUT_BUF 20,第四部分 软件工程,编码编码规范数据说明与语句数据说明应该遵循一些比较简单的原则次序标准化,如按照数据结构或数据类型确定说明的次序多个变量名在一个语句中说明时,按字母顺序排列 如果设计时使用了一个复杂的数据结构,则应该用注释说明用程序设计语言实现这个数据结构的方法和特点,Int I,j,k;Float li,lk;Char ch;,同时说明多个变量,则按字母顺序,按照数据类型确定说明的次序,第四部分 软件工程,编码编码规范数据说明与语句语句构造基本规则,不要为了节省空间而把多个语句写在同一行,尽量避免复杂的条件测试,尽量减少对“非”条件的测试,避免大量使用循环嵌套和条件嵌,利用括号使逻辑表达式或算术表达式的运算次序清晰直观,第四部分 软件工程,编码编码规范数据说明与语句输入与输出处理的编写规则:,对所有输入数据都进行检验;检查输入项重要组合的合法性;保持输入格式的简单;用数据结构标记,不要要求用户指定数据的数目;明确提示交互式输入的请求,详细说明可用的选择或边界数值;当程序设计语言的格式有严格要求时,保持输入格式一致;设计良好的输出报表;给所有输出数据加标志。,第四部分 软件工程,编码编码规范数据说明与语句程序编码布局一般规则:,阶梯(即缩进)形式:利用适当会使程序逻辑结构清晰明显。,分组:把完成某一功能的相关语句组织在一起。,对齐:把同属性的元素对齐。例如把同一类的一组赋值号对齐排成一条直线下来,直观上让一看就知道这些语句是同属性的。,括号:在有多个运算符的表达式中尽量多使用括号,以免产生运算优先级的人机理解不一致。,空格:包括空格、制表符、空行等,使用适当可使程序结构清晰,提高可读性。,第四部分 软件工程,编码编码规范数据说明与语句代码注释:,重复的注释,解释性注释,标记注释,代码的总结注释,意图注释,用不同的词重申了代码的内容,它没有给读者提供代码的附加信息。,典型用于解释复杂的,有效的和灵敏的代码段,它是给开发者的注释,表示工作还未做,解释代码的目的,第四部分 软件工程,面向对象的程序设计主要工作内容(1)选择一种合适的面向对象的编程语言(2)用选定语言编码实现软件设计步骤所得到的公式、图表、说明和规则等软件系统各对象类的详尽描述,测试类的方法(3)将编写好的各个类代码模块根据类的相互关系集成(4)利用设计人员提供的测试用例和用户提供的测试用例分别检验编码完成的各个模块和整个软件系统,第四部分 软件工程,面向对象的程序设计语言选择,将来能否占主导地位,重用性,库和开发环境,其他因素,重用提高软件生产率,占主导地位的编程语言是软件生命力的重要因素,能给用户提供培训服务、技术服务等,语言、开发环境和类库共同决定可重用性,第四部分 软件工程,面向对象的程序设计面向对象的程序编码规则,提高可复用性,提高可扩充性,提高健壮性,提高方法的内聚,减小方法的规模,保持方法的一致性,把策略与实现分开,全面覆盖,尽量不使用全局信息,利用继承机制,调用子过程,分解因子,使用委托,把代码封装在类中,封装实现策略,不要用一个方法遍历多条关联链,避免使用多分支语句,精心确定公有方法,不要预先确定限定条件,预防用户的操作错误,检查参数的合法性,先测试后优化,第四部分 软件工程,人机界面设计接口设计的内容,设计软件构件间的接口,设计模块和其他非人的信息生产者和消费者(例如,其他外部实体)的接口,设计人(例如,用户)和计算机间的界面,即人机界面设计,第四部分 软件工程,人机界面设计人机界面(用户接口)设计考虑的几个问题系统响应时间 用户帮助设施 出错信息处理 命令交互 方式设计用户帮助时考虑的问题(1)是否在任何时间都能获得关于系统任何功能的帮助信息,有两种选择:提供部分功能的帮助信息和提供全部功能帮助信息(2)用户怎样请求帮助,有三种选择:帮助菜单,特殊功能键和HELP命令(3)怎样显示帮助信息,有三种选择:在独立的窗口中,指出参考某个文档(不理想)和在屏幕固定位置显示简短提示(4)用户怎样返回,有两种选择:屏幕上的返回按钮和功能键(5)组织帮助信息:平面结构(所有信息都通过关键字访问),信息的层次结构(用户可在该结构中查到更详细的信息)和超文本结构,第四部分 软件工程,人机界面设计出错信息的设计原则,(1)信息应该以用户可以理解的术语描述问题。,(2)信息应该提供有助于从错误中恢复的建设性意见。,(3)信息应该指出错误可能导致哪些负面后果(例如,破坏数据文件),以便用户检查是否出现了这些问题,并在确实出现问题时予以改正。,(4)信息应该伴随着听觉上或视觉上的提示,也即在显示信息时应该同时发出警告声,或者用闪烁方式显示,或者用明显表示出错的颜色显示。,(5)信息不能带有指责色彩,即不能指责用户。,第四部分 软件工程,人机界面设计用户交互命令的设计原则,(1)是否每个菜单选项都有对应的命令。,(2)采用何种命令形式,有三种选择:快捷键(例如,Ctrl+P),功能键和键入命令。,(3)学习和记忆命令的难度有多大,忘记了命令怎么办。,(4)用户是否可以定制或缩写命令。,在理想情况下,所有应用软件都有一致的命令使用方法。一般情况下,在常用的应用软件中采用了一致的快捷键来完成相同的功能,如:Ctrl+C表示复制Ctrl+V表示粘贴Ctrl+S表示保存 Ctrl+O表示打开。,第四部分 软件工程,人机界面设计用户交互设计过程是一个迭代的过程,先后涉及四个模型:设计者创建的设计模型、用户模型、终端用对系统的假想、系统实现后的系统映象。,第四部分 软件工程,人机界面设计用户界面设计条件,(1)确定任务的目标和含义,(2)将每个目标/含义映射为一系列特定动作,(3)说明这些动作将来在界面上执行的顺序。,(4)指明各个系统状态,即上述各动作序列中每个动作在界面上执行时,界面呈现的形式。,(5)定义控制机制,即便于用户修改系统状态的一些设置和操作。,(6)说明控制机制怎样作用于系统状态。,(7)指明用户应怎样根据界面上反映出的信息解释系统的状态。,第四部分 软件工程,人机界面设计用户界面设计工具(UIDS)为简化窗口、菜单、设备交互、出错信息、命令及交互环境的许多其他元素的创建,提供了各种例程或对象所提供的功能既可以用基于语言的方式(如面向对象的语言VB)也可以用基于图形的方式来实现界面的用户评估与评估标准,系统及其界面的规格说明的长度和复杂程度,预示用户学习使用该系统所需要的工作量,命令或动作的数量、命令的平均参数个数或动作中单个操作的个数,预示系统的交互时间和总体效率,设计模型中给出的动作、命令和系统状态的数量,预示用户学习使用系统时需记忆内容的多少,界面风格、帮助设施和出错处理协议,预示界面的复杂程度和用户接受该界面的程度,第四部分 软件工程,人机界面设计举例,文档分栏界面,优点:页面布局非常一致,视觉清晰,看起来令人愉快,阅读信息所需的时间减少,任务的性能强,满意度高,第四部分 软件工程,人机界面设计举例,特点:显示了两栏工具栏及一栏主菜单。命令区域清晰可见却并不占据过多的屏幕空间,第四部分 软件工程,人机界面设计举例,缺点:是个反面示例,几乎所有的工具栏都激活了。屏幕高度混乱,用户不得要领,大作业,大作业:用所熟悉的一门语言(C/C+,VB,matlab)开发一个小程序,功能如下:读入文件求所有三角形边长的平均值求所有节点的相邻节点数的平均值求所有三角形单位法矢之和(标准化)求节点网络最短路径(5678th节点-6789th节点)*将三角形信息(点、正法向)存到数据库,数据库系统可任意选择要求:有如下文档:需求分析;概要设计;详细设计;软件代码有简单界面可以独立运行(有数据库支持),且结果正确,