收藏 分销(赏)

软件工程课件.ppt

上传人:天**** 文档编号:6978123 上传时间:2024-12-24 格式:PPT 页数:225 大小:1.78MB 下载积分:20 金币
下载 相关 举报
软件工程课件.ppt_第1页
第1页 / 共225页
软件工程课件.ppt_第2页
第2页 / 共225页


点击查看更多>>
资源描述
,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,软件工程,第一章软件工程概论,本章首先对软件技术进行了概括性的说明,在此基础上,对软件工程产生的原因、发展历程、研究内容等进行了阐述。进一步对软件工程的基本原理和原则、软件生命周期模型、软件工程工具和开发集成环境进行了较详细的讲解。通过本章的学习能使读者对软件工程学科的全貌有较深入的了解。,软件发展史,20世纪50年代,程序是由设计者本人开发和维护的结构简单,功能单一,可靠性差的小型源程序。所以,人们认为软件就是程序,软件系统就是程序系统;,60年代,软件的功能、规模日益增大,软件的开发只能由群体来承担,软件设计进入到了作坊式生产阶段。为了提高程序的可维护性,人们认为软件等于程序加文档,所谓文档就是指软件开发过程中与分析、设计、实现、测试、维护相关的文档。但不包括与软件开发过程相关的管理文档;,对管理文档的全面认识是从70年代开始的。在这一时期,随着软件需求的规模、数量剧增和交付的紧迫,要求大型程序的开发活动要按照工程项目的模式运作。此时,软件工程方法被引入到软件开发过程中,对软件定义的认识也得到了提高,得到了如下的软件构成公式:,软件程序文档数据,80年代,人们开始认识到软件管理是一个过程管理。因此,到90年代,出现了软件过程能力成熟度模型,人们开始研究软件过程管理的具体内容与方法。1997年出现的统一建模语言(Unified Modeling Language,UML)就是突出的研究成果之一。UML的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用。UML的出现标志着软件开发进入到了一个以规范化、过程化、工厂化、大型化、自动化为特征的较成熟的阶段。,软件分类,分类准则,软件类别,软件功能,系统软件、支撑软件、应用软件。,工作方式,实时软件、分时软件、交互式软件、批处理软件。,规模,微型软件、小型软件、中型软件、大型软件、超大型软件、极大型软件。,服务对象,定制软件、产品软件。,应用领域,操作系统、数据库管理系统、软件开发系统、工程软件、办公软件、财会软件、网络工具软件、图形图像处理软件、多媒体软件、游戏软件、教育软件等。,收费方式,商品软件、共享软件、自由软件。,软件工程的发展,软件工程产生的诱因是20世纪60年代的软件危机。通过解决软件危机,软件工程的理论和方法逐渐形成,并最终成为了现代软件技术的核心之一。,为了解决软件危机,人们认识到有以下三种途径:,采用工程化方法来开发和维护软件。软件开发不应只是个体化的劳动,而应该是由组织良好、管理严密、种类人员共同配合完成的一个工程项目,因此应该注意吸收和借鉴从事其它工程项目行之有效的科学原理和方法;,采用先进的技术、方法、工具开发和设计软件。即采用先进的管理技术、规范的开发方法和模型、各种提高开发效率的软件工具等;,采用必要的组织管理措施。软件工程正是解决软件危机问题的过程中形成的一门综合技术与管理两个方面的新兴学科,并逐渐成为指导计算机开发、维护、管理的理论依据。,软件工程的定义,1983年IEEE(Institute of Electrical and Electronics Engineers)为软件工程下的定义是:软件工程是开发、运行、维护和修复软件的系统方法;1993年IEEE进一步给出了一个更全面的定义:(1)把系统化的,规范的,可度量的信息途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中(2)研究(1)中提到的途径;概括起来,所谓软件工程就是采用工程化的概念、原理和技术、方法来开发和维护软件,把经过时间考验证明是正确的管理技术和当前好的技术方法结合起来指导计算机软件开发和维护的工程学科。,软件工程的内容,研究内容,内容举例,软件开发模型,瀑布模型、增量模型、原型模型、迭代模型,软件开发方法,面向过程的方法、面向数据的方法、面向对象的方法,软件支持过程,CASE,工具类,软件过程管理,ISO9000,、,CMM,软件工程的基本原理,用分阶段的生命周期计划严格管理;,坚持进行阶段评审;,实行严格的产品控制;,采用现代程序设计技术;,结果应能清楚地审查;,开发小组的成员应该少而精;,承认不断改进软件工程实践的必要性。,软件工程的原则,抽象原则,信息隐藏原则,模块化原则,局部化原则,确定性原则,一致性原则,完备性原则,可验证性原则,软件生命周期,目前有许多种软件生命周期模型,常见的如瀑布模型、演化模型、增量模型、螺旋模型、喷泉模型、变换模型和基本知识的模型等。,软件开发工具,需求工具类别,说明,需求分析工具,需求定义阶段所使用的工具,包括描述工具和分析工具。用以辅助系统分析员生成完整、正确、一致的需求说明,改善软件开发人员间的通信状况,减少管理和维护费用。,设计工具,系统设计阶段所使用的工具,以形成设计规格说明,检查并排除规格说明中的错误;一种是描述工具,如图形、表格和语言描述的工具,另一种是变换工具,从一种描述转换成另一种描述。,编码工具,编码所使用的工具。主要包括各种实现性语言、编译程序、编辑程序和解释程序等。,测试工具,测试阶段所使用的工具,如测试数据产生程序、跟踪程序、测试程序和验证评价程序等。,软件维护工具,软件维护工具类别,说明,版本控制工具,用来存储、更新、恢复和管理一个软件多个版本;,文档分析工具,用以对软件开发过程形成的文档资料进行分析,给出软件维护活动所需的维护信息;,逆向工程工具,辅助软件人员将某种形式表示的软件转换成更高抽象形式表示的软件;,再工程工具,支持软件重构,提高软件功能、性能以及可维护性。,软件管理和支持工具,软件维护工具类别,说明,项目管理工具,辅助管理人员进行项目的计划、成本估算、资源分配、质量控制等管理活动;,开发信息库工具,维护软件项目的种开发信息;,配置管理工具,完成软件配置的标识、版本控制、变化控制等基本任务;,软件评价工具,辅助管理人员进行质量保证的有关活动。,软件工程,第二章 软件系统可行性研究与需求分析,本章对软件系统的可行性研究和需求分析进行了全面的阐述。可行性研究和需求分析是软件系统开发初期相继要做的重要工作,相关工作的质量直接影响到软件开发的成败。掌握软件系统的可行性研究和需求分析的基本原则和方法有助于读者把握软件开发的全局和预测开发结果。,软件系统可行性研究,一般要从以下五个方面进行可行性研究,技术可行性,经济可行性,操作可行性,调度可行性,法律可行性,软件系统可行性都是针对具体的方案的,系统分析员要对每一个可能的方案进行以上几个方面的分析,如果各个方案均无可行性,系统分析员应建议终止项目。如果项目是可行的,则应向有关方推荐较优的方案,并附带提供相应的初步工程计划。,可行性研究的步骤,细化软件系统的目标和规模,认真研究现有系统,设计新系统的高层系统模型,评审新系统的逻辑模型,设计和评价新系统的实现方案,制定行动方案,制定开发计划,书写可行性报告,提交审查,可行性研究的循环流程,项目号,项目,详细内容,1,引言,问题的定义,系统实现的环境,系统的约束条件,2,管理总结和意见,关键性问题,相关解释,管理,意见,系统的影响,3,可选择性,可选择方案的系统设计方案,用于选择和评价方案的标准,4,推荐方案描述,方案的简要说明,各系统元素的可行性,5,推荐方案的成本效益分析,成本效益表,成本效益分析表述,6,推荐方案的技术风险性分析,所需技术列表,技术风险分析表,7,推荐方案的进度表,方案的进度表,进度协调方案,8,方案的法律问题,列举所涉及的法律因素,法律风险分析,9,其它问题,前八个项目以外的内容,可行性报告的一般性内容,软件需求分析,软件需求分析的任务的内容,确定对软件系统的要求,分析软件系统的数据及操作要求,确定软件系统的详细逻辑模型,修订系统开发计划,编写软件需求规格说明书,软件需求分析法,功能分解法,信息建模法,面向对象的分析法,结构化分析法,结构化分析法,结构化方法是一种实用的软件开发方法集,它由结构化分析(Structure Analysis,SA)、结构化设计(Structure Design,SD)和结构化程序设计(Structure Programming,SP)构成。其中,结构化分析法是需求分析中较常被采用的方法。,结构化分析法的优点在于:简单实用,易为开发者掌握,在成功率方面仅次于面向对象的方法。特别适合于数据处理领域中的应用,对其它领域的应用也基本适用。该方法存在的主要问题有:对于规模很大,特别复杂的项目不太适应;难以适应需求的变化。,结构化分析法的描述工具,数据流图,数据字典,描述加工逻辑的结构化语言、判定表及判定树,结构化分析法的步骤,建立现行系统的物理模型,抽象出现行系统的逻辑模型,建立目标系统的逻辑模型,作进一步补充和优化,数据流图,数据流图(Data Flow Diagram,DFD),是结构化分析法中用于表示系统逻辑模型的工具。它以图形的方式描绘数据在系统中流动和处理的过程。它反映的是目标系统的逻辑功能,故它是一种功能模型。,数据字典,数据流图对信息处理逻辑模型的描述具有直观、全面、易懂的优点,但没有准确、完整地定义图元。结构化分析法要求对于数据流图中的所有数据流流,文件和底层加工进行准确、完整地定义,这些定义为系统的分析、设计和维护提供了数据流图中所出现的各种成份的进一步说明。图元定义汇集在一起就构成了数据词典(Data Dictionary,DD),数据词典和数据流图共同构成了系统的逻辑模型,是软件需求规格说明书的主要成份。在数据词典中,用数据项、数据流和数据文件来对数据进行描述。,软件需求规格说明书,在用户和开发人员充分地理解了用户的要求之后,应将共同的理解以规范化的形式准确地表达出来,并形成需求规格说明书。需求规格说明书是软件开发过程中非常重要的文档。为了保证开发的正常进行,在分析阶段就必须及时地建立该文档,并保证其质量。需求规格说明书实际上是为软件系统描绘了一个逻辑模型,在开发早期就为软件系统建立一个可以清晰预见的模型,并以该逻辑模型为开发的核心。,需求规格说明书主要会有以下三个作用:,作为用户和软件开发机构之间的合同,为双方相互了解提供基础;,反映问题的结构,作为设计和编码的基础;,作为测试和验收目标系统的依据。,需求分析的复审,所提交的软件需求文档,必须进行全面、认真的复审,以防止理解错误和需求遗漏的发生。由项目开发组织将软件需求文档和用户需求的原始文档分发给用户和软件开发人员,要求他们阅读审查,提出问题或建议。,复审一般可围绕下列问题进行:,系统定义的目标是否与用户的要求一致;,系统需求分析阶段提供的文档资料是否齐全;,文档中的所有描述是否完整、清晰、准确地反映了用户的要求;,与所有的其它系统成分的重要接口是否都已描述;,所开发项目的数据流与数据结构是否足够且确定;,所有图表是否清楚,在没有补充说明时是否易于理解;,主要功能是否已包含在规定的软件范围之内,是否都已充分说明;,设计的约束条件或限制条件是否符合实现;,开发的技术风险是什么;,是否考虑过将来可能会提出的软件需求;,是否详细制定了检验标准,标准能否对系统定义的成败进行确认;,有无遗漏、重复或不一致的地方;,用户是否审查了初步的用户手册;,软件开发计划中的估算是否受到了影响。,软件工程,第三章 软件设计,软件设计是在需求分析的基础上构建软件系统具体实现框架的过程,这一过程基本确定了软件系统的规模、结构和所需资源。软件设计的质量会影响到软件系统的性能、成本和可维护性。本章对软件设计中的结构设计和详细设计分别进行了深入的阐述,读者可以了解软件设计的概念、方法和支持工具。,软件设计的基本概念,软件设计的基本概念是从20世纪60年代陆续提出的。经过多年来软件工程师们的不懈努力,基本概念和配套方法不断完善。,软件设计的基本原则如下:,模块化,抽象与逐步求精,信息隐藏原理,信息隐藏原理中的耦合,耦合性度量一个程序结构中各个模块之间相互联系的程度,它取决于各个模块之间接口的复杂程度,取决于如何进入或访问一个模块,以及哪些数据将通过该接口。程序中总是希望各模块间的耦合尽可能低,追求尽可能松散耦合的系统。这样的程序容易修改和维护,且当共处出现错误并沿着系统蔓延时也不致引起连锁反应。耦合一般具有以下几种形式:,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合,耦合性与模块属性的关系,属性耦合,对修改的敏感性,可重用性,可修改性,可理解性,内容耦合,很强,很差,很差,很差,公共耦合,强,很差,中,很差,外部耦合,一般,很差,很差,中,控制耦合,一般,差,差,差,标记耦合,弱,中,中,中,数据耦合,最弱,好,好,好,信息隐藏原理中的内聚,内聚标志一个模块内部各个元素之间的紧密程度。作为度量模块相对功能强度的指标,总是希望它越高超好。内聚一般具有以下几种形式:,偶然内聚,逻辑内聚,时间内聚,信息内聚,顺序内聚,功能内聚,内聚性与模块属性的关系,属性内聚,内部联系,清晰性,可重用性,可修改性,可理解性,内容耦合,很差,差,很差,很差,很差,公共耦合,很差,很差,很差,很差,差,外部耦合,差,中,很差,中,中,控制耦合,中,好,差,中,中,标记耦合,好,好,中,好,好,数据耦合,好,好,好,好,好,面向数据流的设计过程,面向数据流的设计方法的目标是给出提供软件结构的一个系统化的途径。在软件工程的需求分析阶段,信息流是一个关键考虑,通常用数据流图来描绘信息在系统中被加工和信息流动的情况。面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。对于不同的信息流的类型采用不同的映射方法。,信息流有以下两种类型:,变换流,在基本系统模型中,信息通常以“外部世界”所具有的形式进入系统,经过处理后又以这种形式离开系统,如图所示。,信息流,事务流,事务流,出于基本系统模型呈变换流,故任意系统中的信息均可用变换流刻画。但若数据流具有如图所示形状,则称为“事务流”。,事务流,面向数据流的软件设计过程,变换分析与事务分析,变换分析,变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构。,事物分析,当数据流具有明显的事务特征时,即能找到一个事务(亦称触发数据项)和一个事务中心,采用事物分析法更为适宜。与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统结构图。,数据库设计,数据库设计是指在已有数据库管理系统的基础上建立数据库的过程。它在数据库系统的开发中占有非常重要的地位。数据库设计的好坏直接影响整个系统的效率。数据库设计包括以下两方面的内容:,结构特性设计,结构特性设计也就是数据库框架或数据结构的设计。它是数据库设计的关键所在。结构特性设计要达到的目的是:汇总各用户视图,尽量减少冗余,实现数据共享,设计出一个包含各用户视图的统一数据模型。,行为特性设计,行为特性设计是指应用程序的设计。例如,数据库查询、事务处理和报表处理等应用程序的设计。,数据库设计工作流程,数据库设计的基本步骤,需求分析,需求分析是整个数据库设计过程中非常重要的一步,它是全部设计工作的基础。这个过程的工作做得越细,设计工作也就会越顺利。需求分析的目的是了解用户要求,对现实世界中的处理对象进行调查、分析,制定出数据库设计的目标。,概念结构设计,念结构设计是系统结构设计的第一步,它是在需求分析的基础上对客观世界所做的抽象,它独立于数据库的逻辑结构,也独立于具体的DBMS。概念模型是对实际应用对象形象而具体的描述,因此也可以把它看成是逻辑设计的开始。,需求分析过程,组织机构情况的调查是分析信息流程的基础,它对掌握数据的规律、数据的组织形式有着重要的作用;,了解具体的业务现状,即了解各部门的业务活动情况。通过这项调查可以知道现行业务中信息的种类、信息的流程、信息的处理方式及各种业务的工作过程等。这实际上是对数据的产生过程、数据之间的联系以及数据的方式和用途的详细了解过程,它是调查的重点;,了解外部要求。例如,响应时间的要求,数据安全性、完整性的要求等;,了解长远规划中的应用范围和要求。一个数据库的建立,特别是大型数据库的建立要投入大量的人力和物力,如果不充分考虑长远的发展需要,那么,所建立的数据库可能暂时满足了用户的应用要求,但随着形势的发展,当用户提出新的应用要求时,原有的系统就不能适应需要,从而导致系统失效,造成很大的浪费。因此,在设计数据库时,要充分考虑今后发展的需要,要留有余地,要充分考虑系统的可修改和可扩充性。,概念结构设计过程,概念结构设计要借助于某种方便、直观的描述工具,E-R(EntityRelationship)图是设计概念模型的有力工具。在E-R图中用三种图框分别表示实体、属性及实体间的联系。规定如下:,用矩形框表示实体,框内标明实体名;,用椭圆状框表示实体的属性,并在其内写上属性名;,用菱形框表示实体间的联系,框内写上联系名;,实体与其属性之间以无向边联接,菱形框及相关实体之间亦用无向边联接,并在无向边穷标明联系的类型。,建立分E-R图的主要工作是对需求分析阶段收集到的数据进行分类、组织,划分实体和属性,确定实体之间的联系。实体和属性之间在形式上并没有可以截然划分的界限,而常常是现实对它们的存在所作的大概的自然划分。,建立了各分E-R图以后,要对它们进行综合,即把各分E-R图联接在一起。这一步主要的工作是找出各分E-R图之间的联系,而在确定各分E-R图的联系时,可能会遇到相互之间不一致的问题,称之为冲突。这是因为分E-R图是实际应用问题的抽象,不同的应用通常由不同的设计人员进行概念结构的设计,因此分E-R图之间的冲突往往是不可避免的。,初步的E-R图综合了系统中各用户对信息的要求,它可能存在冗余的数据和冗余的联系。也就是说,在初步的E-R图中可能存在这样的数据和联系,它们分别可以由基本数据和基本联系导出。冗余的数据和联系的存在会破坏数据库的完整性,增加数据库管理的困难,因此,需要加以消除。初步ER图消除了冗余以后,称为基本E-R图。,为了建立用户所要求的数据库,必须把概念结构转换为某个具体的DBMS所支持的数据模型,这就是逻辑结构设计所要完成的任务。,在完成了数据库的逻辑结构设计以后,则要进行物理结构的设计。物理结构设计的任务就是为逻辑结构设计阶段所得到的逻辑数据模型选择一个最适合应用环境的物理结构。物理结构的设计依赖于具体的计算机系统,它是一个反复进行的过程,首先要针对具体的DBMS和设备的特性,确定实现所设计的逻辑数据模型必须采取的存储结构和存取方法,然后对该存储模式进行性能评价。若评价结果满足原设计要求则进入设计实施阶段,否则就要修改设计,经过多次反复,直到取得满意的结果为止。,设计优化,启发式设计策略:,调整模块的功能和规模,降低锅台度,提高内聚度,调整软件结构的深度、宽度、扇出和扇入数目,改善软件结构性能,改造程序结构,使任一模块的作用域在其控制域之内,分析模块之间的接口信息,降低界面的复杂性和冗余程度,提高协调性,模块功能应该可预言,避免对模块施加过多限制,改造程序结构,追求单入口、单出口的模块,为满足设计或可移植性的要求,把某些软件用包(package)的形式封装起来,设计优化准则:,在不考虑时间因素的前提下开发并精化软件结构;,在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程(算法),以求提高效率;,使用高级程序设计语言编写程序;,在软件中孤立出那些大量占用处理机资源的模块;,必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。,软件详细设计,详细设计就是要在结构设计的基础上,考虑“怎样实现”这个软件系统,直到对系统中的每个模块给出足够详细的过程性描述,从而在编码阶段可以将这个描述直接翻译成用某种程序设计语言书写的程序。,详细设计是以结构设计阶段的工作为基础的,但又不同于结构设计,主要表现为以下两个方面:,在结构设计阶段,数据项和数据结构以比较抽象的方式描述,而详细设计阶段则应在此基础上给出足够详细的描述。例如,结构设计可以声明一组值从概念上表示一个矩阵,详细设计就要确定用什么样的数据结构来实现这样的矩阵。,详细设计要提供关于算法的更多细节,例如,结构设计可以声叫一个模块的作用是对一个表进行排序,详细设计则要确定使用哪种排序算法。在详细设计阶段为每个模块增加了足够的细节后,程序员才能够以相当直接的方式进行下一阶段的编码工作。,详细设计的任务:,详细设计的月的,是为软件结构图(SC图或HC图)中的每一个模块确定采用的实现算法和块内数据结构,用选定的表达工具给出清晰的描述。表达工具可以由开发单位或设计人员自由选择,但它必须具有描述过程细节的能力,进而可在编码阶段能够直接将它翻译为用程序设计语言书写的源程序。,主要任务如下:,为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;,确定每一模块使用的数据结构;,确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其他模块的接口,以及模块输人数据、输出数据及局部数据的全部细节;,为每一个模块设计出一组测试用例,以便在编码阶段对模块代码进行预定的测试,模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据、期望输出等内容。,详细设计的过程中应遵循以下原则:,模块的逻辑描述要清晰易读、正确可靠;,采用结构化设计方法改善控制结构,降低程序的复杂程度,从而提高程序的可读性、可测试性、可维护性。其基本内容归纳为如下几点:,(1)程序语言中应尽量少用GOTO语句,以确保程序结构的独立性;,(2)使用单入口单出口的控制结构,确保程序的静态结构与动态执行情况相一致,保证程序易理解;,(3)程序的控制结构一般采用顺序、选择、循环三种结构来构成,确保结构简单;,(4)用自顶向下逐步求精方法完成程序设计。结构化程序设计的缺点是存储容量和运行时间增加1020,但可读性、维护性好。,选择恰当描述工具来描述各模块算法。,详细设计工具,在详细设计阶段,软件开发人员面临两个方面的问题:一个是决定实现每个模块的算法,另一个是如何精确地表达这些算法。自然,前一问题涉及到所开发项目的具体要求和对每个模块规定的功能。算法的问题不属于本书讨论的范围。后一问题需要给出适用的算法表达形式,或者说应提供详细设计的表达工具。,在理想情况下,算法过程描述应采用自然语言来表达,这样不熟悉软件的人要理解起来比较容易,无需重新学习,但是,自然语言在语法和语义上往往具有多义性,常常要依赖上下文才能把问题交代清楚。因此,目前流行的详细设计的工具主要有以下三种。,图形工具。利用图形工具可以把过程的细节用图形描述出来,如程序流程图;,表格工具。可以用一张表来描述过程的细节,在这张表中列出了各种可能的操作和相应的条件;,语言工具。用与某种高级语言相类似的伪码来描述过程的细节。,按此准则要求设计工具具有下列属性:,模块化(modularity)。支持模块化软件的开发并提供描述接口的机制(例如直接表示子程序和块结构);,整体简洁性(overall simplicity)。设计表示相对易学、易用、易读;,便于编辑(ease of editing)。支持后续设计、测试乃至维护阶段对设计进行的修改;,机器可读性(machine readability)。计算机辅助软件工程(CASE)环境已被广泛接受。一种设计表示法若能直接输入并被CASE工具识别,将带来极大便利;,可维护性(maintainability)。过程设计表示应支持各种软件配置项的维护;,强制结构化(structure enforcement)。过程设计工具应能强制设计人员采用结构化构件,有助于产生好的设计;,自动产生报告(automatic processing)。设计人员通过分析详细设计的结果往往能突发灵感,改进设计。若存在自动处理器,能产生有关设计的分析报告,必将增强设计人员在这方面的能力;,数据表示(data representation)。详细设计应具备表示局部与全局数据的能力;,逻辑验证(logic verification)。能自动验证设计逻辑的正确性是软件测试追求的最高目标,设计表示愈易于逻辑验证,其可测试性愈强;,可编码能力(“code to”ability)。若能自然地转换为代码,则能减少开发费用,降低出错率。,Warnier设计法,Warnier设计法又称为逻辑地构造程序的方法(LCP),是由J.DWarnier提出的一种面向数据结构的设计方法。Warnier方法的原理是从数据结构出发设计程序,这种方法的逻辑比较严格。,Warnier程序设计方法的最终目标同样是得出对程序处理过程的详细描述,这种设计方法有下面五个步骤:,第一步:分析确定输入数据和输出数据的逻辑结构,并用Warnier图描绘这些数据结构;,第二步:主要依据输入数据结构导出程序结构,并用Warnier图描绘程序的处理层次;,第三步:画出程序流程图并自上而下依次给每个处理框编序号;,第四步:分类写出伪码指令,Warnier定义了下列五类指令:,(1)输入和输入准备;,(2)分支和分支很备;,(3)计算;,(4)输出和输出准备;,(5)子程序调用。,第五步:把前一步中分类写出的指令按顺序排序,从而得到描述处理过程的伪码。,人机界面设计,人机交互(HCI,Human Computer Interaction)是指人(即计算机用户)与计算机系统之间的信息交换,故又称人机对话(Human computer Dialogue)或人机通信(Human Computer Communication)。实现人与计算机之间通信的软硬件系统就是交互系统。这里所说的“交互”是指信息交换,包括计算机通过输出设备提供给人的信息,也包括人通过输入设备提供给计算机的信息。,人机界面又称用户界面或人机接口,是用户与计算机系统之间的分界线,是有用户与计算机系统之间的通信媒体或人机对话(Human Computer Dialogue)的手段,是实现人机双向信息交换的支持硬件和软件,是计算机系统的一个重要组成部分。,人机界面的设计过程可以分为下面几个步骤:,创建系统功能的外部模型,确定为完成此系统功能人和计算机应分别完成的任务,考虑界面设计中的典型问题,借助CASE工具构造界面原型,人机界面设计基本原则:,说起人机界面,人们就会想到“人性化”、“个性化”、“以人为本”以及“用户友好(User Friendly)”这些字眼,它的核心就是“以用户为中心(Usercentered)”的用户界面设计原则。人们总结了交互式系统设计的基本准则,这些被称作“黄金法则”的设计准则是人们在用户界面设计实践中受到启发而得来,并正在进一步被证实和完善。,一致性。,快捷的操作方式。,及时的反馈信息。,对话过程闭合性。,简明的错误处理。,动作的可逆性。,支持内部控制节。,减少用户记忆负担。,目前,最通用的界面标准是X-Windows系统,它定义了人机界面设计的语法和语义,提供了一套用于创建显示(display)、窗口(window)和图形(graphics)的工具,以及有关资源处理(resource handling)、设备交互(device interaction)和事件处理(event handling)的一套协议。许多X-Windows标准的变种和扩充版已在各种PC机和工作站上出现,它们多在UNIX和其他一些操作系统下运行。,软件工程,第四章 编码与程序设计语言,程序编码就是把软件设计阶段的结果用某种程序设计语言翻译成计算机能理解的形式,即程序的过程。作为软件工程的一个阶段,编码实质就是对软件设计的翻译,翻译过程所使用的程序设计语言及程序员的编码风格对程序的可靠性、可读性、可测试性、可维护性方面将产生深远的影响,从而最终影响到软件系统的质量。,编码风格及其特点,编码风格又称程序设计风格或编程风格,编码风格实际上指编程的基本原则。有相当长的一段时间,许多人认为程序只是机器执行的,而不是供人阅读的,所以只要程序逻辑正确,能为机器理解并依次执行就足够了,至于文体如何无关紧要。但随着软件规模增大,复杂性增加,人们逐渐看到,在软件生存期中需要经常阅读程序,特别是在软件测试阶段和维护阶段,编写程序的人与参与测试、维护的人都要阅读程序。认识到阅读程序是软件开发和维护过程中的一个重要组成部分,而且读程序的时间比写程序的时间还要多。因此,程序实际上也需要增加可读性。,20世纪70年代以来人们逐步意识到,良好的编码风格能在一定程度上弥补语言存在的缺陷,而如果不注意风格就很难写出高质量的程序。尤其当多个程序员合作编写一个很大的程序时,需要强调良好而一致的编码风格,以便相互通信,减少因不协调而引起的问题。总之,良好的编码风格有助于编写出可靠而又容易维护的程序,编码的风格在很大程度上决定着程序的质量。,源程序文档化,虽然编码的目的是产生程序,但是为了提高程序的可维护性,源代码必需要实现文档化,称之为内部文档编制。源程序文档化包括选择标识符(变量和标号)的名字、安排注释及程序的视觉组织等。,标识符的命名,程序的注释,标准的书写格式,数据说明,为了使程序中的数据说明易于理解和维护,数据说明应当规范化,既要有利于数据属性的查找,也要有利于程序的测试、排错和维护。因此在编写程序时,必须注意以下几点:,数据说明的次序应规范。进而有利于测试、排错和维护。,说明的先后次序固定。例如,按常量说明、简单变量类型说明、数组说明、公用数据块说明、所有的文件说明的顺序说明。在类型说明中还可进一步要求。例如,可按如下顺序排列:整型量说明、实型量说明、字符量说明、逻辑量说明。,当用一个语句说明多个变量名时,应当对这些变量按字母的顺序排列。,对于复杂数据结构,应利用注释说明实现这个数据结构的特点。例如对C中的链表结构应当在注释中做必要的说明,进而增强程序的可阅读性。,语句结构,在设计阶段确定软件的逻辑结构,但编码阶段的任务是构造单个语句。构造的语句要简单、直接,不要为了提高效率而使语句变得复杂。,使用标准的控制结构,尽可能使用库函数,首先应当考虑可读性,注意GOTO语句的使用,输入输出,在输入方面,应注意以下几点:,程序应对所有输入数据进行有效性检验,防止对程序的有意和无意的破坏;,输入格式力求简单、一致,并尽可能采用自由格式输入;,使用数据结束或文件结束标志来终止输入,一般不要由用户来计算输入的项数或记录数;,向用户显示“请输入”的提示信息,同时说明允许的选择范围和边界值;,对多个相关输入项的组合进行检查,剔除似是而非的输入值。例如,检查代表三角形三条边长的数据项,如果它们不能组成有效的三角形,便拒绝接受并要求用户重新输入。,在输出方面,应注意以下两点:,标志所有的输出数据,加以必要的说明;,他所有报表、报告具有良好的格式。,程序设计语言,不同的程序设计语言有不同的特点,下面我们介绍语言的几种特点。,一致性(Uniformity)。语言的一致性指语言中单词(Token)语义的协调性。例如“()”在FORTRAN语言中既可以作优先级的修正符,又可以作数组的下标,还可以作子程序参数表的分隔符,这种“一词多用”会明显地给理解程序带来困难。一致性不好的语言程序不仅可读性差,而且在编写程序的过程中容易出错。,二义性(ambiguity)。语言的二义性是指语言是否允许使用具有二义性的语句。允许使用二义性语句的语言在可理解性和可修改性上都要差一些。,紧致性(compactness)。紧致性是指程序员写程序时必须记忆的关于语言的信息总量。,局部性(locality)。局部性是指语言的模块化和信息隐藏特性。一个局部性差的语言必然会导致程序的复杂性增加。比如,一种不具有块机制的语言,那么信息的作用域必然是全局的,程序的走向也是全局的,从而导致程序的复杂性增加,可读性、可修改性和可维护性都会相应降低。,程序设计语言的分类,程序设计语言的选择,可以参照以下标准来选择语言:,理想标准,实践标准,(1)语言的自身功能,(2)系统用户的要求,(3)编码和维护成本,(4)软件的兼容性,(5)可以使用的软件工具,(6)软件可移植性,(7)开发系统的规模,(8)程序设计人员的知识水平,软件工程,第五章 软件的技术度量及其质量保证,如何保证软件质量是软件生命周期中的重要问题。软件质量与软件复杂性和软件可靠性之间有着密切的关联,评价复杂性和可靠性就需要进行度量,软件度量为改进软件开发过程和提高软件质量提供了一个客观的评价体系。为了提高软件的质量,要建立相应的质量保证体系,以便在软件开发的各个阶段都有相应的质量保证措施。通过本章的学习可使读者了解到软件的技术度量及质量保证方面的知识。,软件度量的概念,在软件开发中,软件度量的根本目的是为了软件管理的需要,利用度量来改进软件开发过程和软件产品质量。到目前为止有关软件度量方面的研究还是很初步的,还需要进一步努力才可能真正做到实用化。实用化的成果将对软件开发技术的发展至关重要。,在软件领域,所谓软件度量就是针对计算机软件的某些属性进行评估或描述,是对一个软件系统、组件或过程具有的某个给定属性的度的一个定量测量。通过度量,可以对软件给出客观的评价,可用于指出软件属性的趋势,能有针对性地进行改善。简单说,软件度量就是对软件质量的评价。,软件度量的目标,对管理者而言:,需要度量软件开发过程中的不同阶段的费用。例如:度量开发整个软件系统的费用(包括从需求分析阶段到发布之后的维护阶段);,为了支付开发小组的薪酬,需要度量不同小组的生产率;,为了设定合理的改进目标等目的,需要度量软件产品的质量;,决定项目的度量目标。例如:决定测试覆盖率、系统运行性能、系统的可靠性等;,为找出影响费用和生产率的因素,需要反复测试某一特定过程和获得相应资源的属性;,需要度量和估计不同软件工程方法和工具的效用,以便决定是否有必要把它们引入到开发组织中。,对软件工程师而言:,需要制定过程度量以监视系统的不断演进。这包括设计过程中的改动、在不同的阶段发现的错误等等;,需使用严格的度量术语来指定对软件质量和性能的要求,以使这些要求可测试。例如:系统必须“可靠”,可用如下的更具体的文字加以描述:“平均错误时间必须大于15个CPU时间片。”;,为了验收需要对产品的测试属性进行度量。例如:看一个产品是否合格要看产品的一些可度量的特性如测试阶段少于20个错误等;,为了预测将来的产品,需要度量已有产品的过程和属性。例如:通过度量软件规格说明书的内容来预测目标系统的规模;通过度量设计文档的结构特性来预测将来可能有的维护盲点;通过度量测试阶段的软件的可靠性来预测软件今后操作、运行的可靠性等等。,软件度量研究的范畴,软件工程需要度量,但如何确定度量范畴呢?首先必须弄清楚“软件度量”是一个包含很多完全不同的活动的术语。它主要包括:费用和工作量估计模型和度量、生产率度量模型和标准、质量控制和保证、数据收集、质量模型和度量、可靠性模型、性能评价和模型、算法复杂性度量、结构和复杂性度量等。,软件技术度量框架,任何软件度量活
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服