软件工程笔记_第1页
软件工程笔记_第2页
软件工程笔记_第3页
软件工程笔记_第4页
软件工程笔记_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章 软件工程学概述1.1 软件危机1.1.1 软件危机介绍软件危机: 计算机软件的开发和维护过程中所遇到的一系列严重问题 所有软件都不同程度的存在这些问题软件危机包含的问题: (1)如何开发软件来满足对软件日益增长的需求(2)如何维护数量不断膨胀的已有软件软件危机的典型表现:(1) 开发成本和进度估计不准确(2) 用户对“已完成”软件存在不满意现象(3) 软件产品质量靠不住(4) 不可维护(5) 没有适当的文档资料(6) 软件成本在计算机总成本中逐年上升(7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势1.1.2 产生软件危机的原因(1) 与软件本身特点有关 (2)与

2、软件开发与维护的方法不准确有关1.3 软件生命周期软件定义 软件开发 运行维护软件定义 :问题定义、可行性研究、需求分析软件开发 :总体设计、详细设计、编码和单元测试、综合测试(前两个叫系统设计,后两个 叫系统实现)运行维护软件生命周期每个阶段的基本任务 :(1) 问题定义:回答“要解决的问题是什么”(2) 可行性研究:回答“上阶段确定的问题有行得通的解决办法吗”(进行一次较抽象的高层次的分析和设计)(3) 需求分析:确定目标系统必须具备哪些功能(4) 总体设计(概要设计) :回答“概括的说,应该怎么样实现目标系统”(确定解决问题的策略以及目标系统中应该包含的程序; 确定程序由哪些模块组成以及

3、模块间的关系即程序的 体系结构)(5) 详细设计(模块设计) :回答“怎么样具体实现这个系统” ,即把解法具体化(设计出程 序的详细规格说明)(6) 编码和单元测试:写出正确的,易理解易维护的程序模块并测试(7) 综合测试:通过各种类型的测试(及相应的调试)使软件达到预定的要求(最基本的是 集成测试和验收测试)(8) 软件维护: 通过维护使系统持久的满足用户的需要 (分四类: 改正性维护、 适应性维护、 完善性维护、预防性维护)1.4 软件过程软件过程 :为了获得高质量软件所需要完成的一系列任务的框架, 规定了完成各项任务的工 作步骤过程定义了运用方法的顺序、 应该交付的文档资料、 为保证软件

4、质量和协调变化所需要采取 的管理措施,以及标志软件开发各个阶段任务完成的里程碑。生命周期模型(过程模型) :简洁地描述软件过程。规定了把生命周期划分成哪些阶段及各个阶段的执行顺序。1.4.1瀑布模型特点:(1)阶段间具有顺序性和依赖性(2)推迟实现的观点(重要指导思想:清楚的区分逻辑设计与物理设计,尽可能推迟程序的 物理实现)(3)质量保证的观点(a每个阶段都必须完成规定的文档,交出合格的文档才算完成该阶段的任务b每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误)优点:可强迫开发人员采用规范的方法(例如,结构化技术);严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所

5、有产品都必须经过质量保证小组的仔细验证缺点:瀑布模型是由文档驱动的。由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。适用范围:应用需求明确的项目1.4.2快速原型模型快速建立起来的可以在计算机上运行的程序,所能完成的功能往往是最终产品能完成功能的一个子集。快速原型模型不带反馈环:开发基本上是线性顺序进行的原型的用途:获知用户的真正需求,一旦需求确定原型将被抛弃。 优点:软件产品的开发基本上是线性顺序进行的(1)原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,不会因为规格说明文档的错误而进行较大的返工。(2) 开发

6、人员通过建立原型系统已经学到了许多东西,在设计编码阶段发生错误的可能性 比较小,自然减少了反馈。缺点:(1) 缺乏丰富而强有力的软件工具和开发环境。(2) 缺乏有效的管理机制,还未建立起自己的开发标准。(3) 对设计开发环境要求较高。(4) 在多次重复改变原型的过程中,程序员会感到厌倦。(5) 系统的易变性对测试有一定影响,难于做到彻底测试,更新文档较为困难。 适用范围:有结构的系统或者需求不明确的系统快遽厢蟹验证1薩证钳11; imat!1.4.3增量模型(渐增模型)把软件产品作为一系列的增量构件来设计、编码、集成和测试。 每个构件由多个相互作用的模块构成,并且能够完成特定的功能。 使用增量

7、模型时,第一个增量构建往往实现软件的基本需求,提供最核心的功能。分解时唯一必须遵守的约束条件是,当把新构件集成到现有软件中时,所形成的产品必须是可测试的。优点:(1) 能在较短时间内向用户提交可完成部分工作的产品(2) 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。缺点:待解决的问题必须允许有一个可递增的软件解决方案。如果需要的软件必须将所有的功能表现出来,那么递增的模型是不合适的。还有就是为了递增模型成功,必须找出整个系统的体系结构。适用范围:不能在设定的期限内完成产品时,先推出核心产品1.4.4螺旋模型基本思想:使用原型及其他方法

8、来尽量降低风险。理解:把它看做在每个阶段之前都增加了陋疔殛析剜gwT这邦专宴.3? 11X1凰期,计协软件 产泉 设计町這行immj511完整轴fl!集模型评诂方藝 说副茅J麟原鬼禅-验L-P tfi产甜风险分析过程的快速原型模型优点:(1) 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标 减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险(3) 在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别 缺点:仅适用于内部项目,大型项目受限,需要风险分析专家。适用范围:主要适用于内部开发的大规模软件项目。1.4.5喷泉模型典

9、型的面向对象的软件过程之一。“喷泉”:体现了面向对象软件开发过程迭代和无缝的特性。面向对象方法在概念和表示方法上的一致性保证了在各项开发活动之间的无缝过渡。用面向对象方法开发软件时,在分析、设计和编码等开发活动之间并不存在明显的边界。1.4.6Rational 统一过程1最佳实践(1) 迭代式开发:在整个软件开发过程中客户的需求会经常改变,因此需要有一种能够通过 一系列细化、若干个渐进的反复过程而得出有效解决方案的迭代方法。(2) 管理需求:RUP描述了如何提取、组织系统的功能性需求和约束条件并把它们文档化。 用例和脚本是捕获功能性需求的有效方法。(3) 使用基于构件的体系结构:构件是功能清晰

10、的模块或子系统。构件使软件重用成为可能。可视化建模:可视化建模语言UML(5) 验证软件质量:在 Rational统一过程中,软件质量评估是内建在贯穿于整个开发过程的, 由全体成员参与的所有活动中。(6) 控制软件变更2.RUP软件开发生命周期二维生命周期模型阶因圈】.10 RUF駅件开发生働周期1.4.7 敏捷过程与极限编程1 敏捷过程敏捷开发宣言由 4 个简单的价值观声明组成 (1)个体和交互胜过过程和工具(2)可以工作的软件胜过面面俱到的文档(3)客户合作胜过合同谈判(4)响应变化胜过遵循计划2 极限编程:最重要的敏捷过程 “极限”含义:把好的开发实践运用到极致1.4.8 微软过程第二章

11、 可行性研究目的: 用最小的代价在尽可能短的的时间内确定问题是否能够解决2.1 可行性研究的任务可行性研究实质: 在较高层次上以较为抽象的方式进行的系统分析和设计的过程 首先,进一步分析和澄清问题定义然后,导出系统的逻辑模型 接着,探索若干种可供选择的主要解法的可行性(1)技术可行性(2)经济可行性(3)操作可行性(4)法律可行性 然后,为每一个可行的解法制定一个粗略的实现进度2.2 可行性研究过程( 1)复查系统规模和目标。 (问题定义阶段 规模和目标 复查确认 清晰描述限制和约束) (2)研究目前正在使用的系统( 3)导出新系统的高层逻辑模型(现有物理系统-现有系统的逻辑模型 -设想目标系

12、统的逻辑模型 -目标物理系统)(4)进一步定义问题(5)导出和评价供选择的解法(6)推荐行动方针(7)草拟开发计划(8)书写文档提交审查2.3 系统流程图概括地描绘物理系统的传统工具。表达的是 数据在系统各部件之间流动的情况 ,而不是对 数据进行加工处理的控制过程。习惯画法是使信息在图中从顶向下或从左向右流动。2.3.1 符号说明处理能址变散据倚咙SK据应敗的加工收田沖+例扣 捏怦处理桝 人工却工呼就琵处理i二辎入辎出壺示辅人皱辂出(戒吒输人只幡出八&-tr SC的不菊明貝体 设备的苛号O指山籀對图的另部分或从署的界-那分转来通常在同一贝上换赛连接指出转劉另一囲圏上或由另一闻肘转来散松流用来连

13、覆其他帶号指朝毂躬诡动方向圈2菇本符号疥号8称iA明二舌示册芽孔匕片輪入或帽出,也可董示一中窘孔背肾理件1二血甜农蔽打BH输出担可廉示用抒们弊罐请入敕器QT*禺即辅人Ifitlb貶说示一FSB带我并CH就机养対如任何种英歯肛机怕傭包括碓盘砖昱权金和糠狀仔W!祥毕肆ffift讯盘辆人的删,也可炭用存踊在陋吐上的交件或锻枢斥)曲於埔入廉出也可袁示存財左聯眩上的文忡査朝耦懈C)显示CRTSfSSflifiSsnM-可用于阳入載轴岀.也可吒繪入又券出1人工输入人工辅人缺据前探#1楚曜*肉皿-須埒袤格J1人 TSfP人T賣庄的妙trtWh叠什左工資龙呆上琏宕便用睡籥进打的睨亂擢许_2刑过诅農邛fsttS

14、威蠅跻鶴送fit抽fH2.2廉0E符号2.3.2例子孚务康存清单程序611报告生成程序磐存淸单主文件233分层分层次的描绘一个复杂的系统从抽象到具体,逐步深入2.4数据流图(DFD)只是描绘数据在软件中流动和被处理的逻辑过程,表示系统的逻辑功能2.4.1符号2.4.2例子或匚u数据的点丿辉点或O变换戳据的处理或註据存储散船流2.4.2例子SffflA和日同吋轴入才能变换成数羽C数据A变换成B和C敲据ArJcB.或A和R同时输人变換駐C数据A雙换战B或G或B利C只有枚据A匪沢育歡摇贞但不龍赴B 同险输入时銮换股C駛据A箜换成R戴6但不能变换成B 和C(b)2.4数据施阳的睛号(a)荃本符号前含义

15、i (b阳加苻号的含艾2.4.2例子源点/缝点处理产生报表念曄管理员拉理事务数删?锚零禅织号(见宝苗擢養零件塔祢原存瞬单零件傭号*昌前曲格库存齟主夏伕应者库存址临界值底妥拱应者游务零杵编号”事务夷燮图盒5定货系统的基本矗统模型 当对数据流图分层细化时必须保持信息连续性, 和分解后的输入输出数据流必须相同。即当把一个处理分解为一系列处理时分解前ES 2. fl 宦借系捷的功能级萱据庫图库存淸单1打3(2、牌存,(捕3 笹理貝艘收U-更新序 存晴单J处理 定货/产生kJ定扳宿息D2定货信息鹅2, 1 把处堺事务的功能进一出分懈后胡数据直闍243命名244用途当燃,这种方塞需要壇加-个数据存儲以殍抜

16、爭务隸竟.图2A迪帥刘分自石化汕界的方展I帘禾喙扯凤方式更插陈再清乖i4吐厲扌MH货億且电新阵严帯定贷I ;乜阳I 1?理日阵步定常 Lte XA j*乃;|吏樹忙克HEl 2. 9 另一和丸附肩功比边算帕方沌述谅區靈矶方盍粘比刊淸卑2.5数据字典数据流图和数据字典共同构成系统的逻辑模型2.5.1数据字典的内容数据流数据流分量(即数据元素)数据存储处理2.5.2定义数据的方法数据字典中的定义就是对数据自顶向下的分解由数据元素组成数据的方式只有下述3种基本类型:(1)顺序(2)选择(3)重复*( 4)可选I =意咼是尊价于t或定文为”+克患最和即淒惟两舎分童E 盘昭足我(即从方括弧内刘出的若干个

17、分扯申逸择一个儿遇常用“号為开俱 选挥的分量i 遗思兄重复炸叭重复花括窕内胯分量n()盘削是可逸叭圖括紙里的分虽可有町无儿常常侦用上尿和卞琨迸一涉注释表示蛍便的花括弧* 种注薛方法是在开抵弧的左 也用上角标和下奮塚分別衣明航复的上阪和下琨*舅-科注释方粧呈在开恬恥在恻标明 蛋左的下辗柱闭拷弧的右仙标明重臭的上限.迥如;川和HA5含义相同.2.5.3数据字典的用途2.5.4数据字典的实现2.6成本/效益分析2.6.1成本估计(1)代码行技术(2)任务分解技术(3)自动估计成本技术2.6.2成本/效益分析的方法(1 )货币的时间价值假设年利率是i,现存入P元,n年后的钱是:F=P(l + iY反之

18、,n年后能收入F元,这些钱现在的价值是:+ h(2)投资回收期使累计的经济效益等于最初投资所需要的时间(3)纯收入在整个生命周期内系统的累计经济效益(折合成现在值)与投资之差(4)投资回收率P =十耳“1十沖十十十j)”博中:P足现在的投资hE塵第i年年底的效莅一“鮎皿是系统的使用春饰订 显段资冋收奉.第三章需求分析软件定义时期的最后一个阶段,基本任务是准确的回答“系统必须做什么”尽音目射有杵塞不冋的用于需求分析的结枸化分析方法,f旦系所宥遠些分析方程都 溥寺下谨畔呦门)必紙锂解井描述问题的信息蛾根据連条准则应该建立數据模5L(2)必须定义软件应完欣的功能,这条难则蛍求還證功能模型(3)必疣播

19、述榨为外酬茅件结果的蝕件行为*这乗淮则黑求建立右为樓必販对描述信息、功能和行为的煎如进行分解用层氏的方式廉示斓节,3.1需求分析的任务3.1.1确定对系统的综合要求功能要求性能要求可靠性和可用性要求出错处理要求接口需求约束逆向需求将来可能提出的需求3.1.2分析系统的数据要求图形工具辅助描绘数据结构( 层次方框图 Warnier图)3.1.3导出系统的逻辑模型数据流图实体联系图状态转换图数据字典和主要的处理算法描述3.1.4修正系统开发计划3.2与用户沟通获取需求的方法3.2.1访谈正式非正式分发调查表(需要大量人员意见时)情景分析技术322面向数据流自顶向下求精 1数据决定了需要的处理和算法

20、2结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法3目标:把数据流和数据存储定义到元素级4从数据流图的输出端入手分析,回溯确定数据来源5通常把分析过程中得到的有关数据元素的信息记录在数据字典中,对算法的简明描述记录在IPO图中。通过分析而补充的数据流、数据存储和处理。应该添加到数据流图的适当位置。3.2.3简易的应用规格说明技术:面向团队的需求收集法3.2.4快速建立软件原型快速原型就是快速建立起来的旨在演示目标系统主要功能的可运行程序 应具备的特性:快速容易修改3.3分析建模与规格说明3.3.1分析建模視蟹本章幵头讲述的结构化分析准则冷衆分析过程曲该建A 3科模型它们分别基 数

21、据權曲.功能横刮和行为模型乱斗节将介绍削丈体r联系區,抽瑩数据对彖呂數按对象之间的关舉疑用于建立数 抵檯刮的图范*,斗节讲过的数据流惚,掷绘当数擴在软件系统屮移就阻械变换的逻當过程,指明系 烧具有的变换數据的功龍因此,数踞流图是建立功能模剧刖基础.X6节梅介绍的状态转换卿(简称为狀态罔儿捋明了作为外部爭件结舉的乘统行为* 为此,狀念转换图描绘了累钦的各种賢为模式(枢为状念月科在不同状懸间转换的方式亠 狀态转戟囲是冇为遂模的县础*3.3.2软件需求规格说明3.4实体联系图3.4.1数据对象3.4.2属性3.4.3联系3.4.4实体一联系图的符号3.5数据规范化第一范式 每个属吃値都必须是底子值川

22、卩仅仪是-个简单值而不會内部结枸,(2)第二范式 满足第一范式条件而且毎个非关锻字囲性都由整个关謎字决定闻 不是由关傩字的一部分来决宦人第三范式符合第二范式的兼件毎亍韭关锥字属性都仅曲关键宇决定而且一 亍非关键宇風性不能仅仅是对另一个非关锂宇属悝対进一步描述(即一牛非关惟亨屈性 值不依赖于另一个非芜谴字属性伍几3.6状态转换图软件系统的行为模型。通过描绘系统的状态以及引起系统状态转换的事件来表示系统的行为。3.6.1状态一个状态代表系统的一种行为模式在一张状态图中只能有一个初态,而终态则可以有0到多个3.6.2事件某特定时刻发生的事情,是对引起系统做动作或从一个状态转换到另一个状态的外界事件的

23、 抽象。363符号联誉1甲件報达式rfrr(厝题張3.3状虑博沪債用的主3?苻号1活动表的语法格式:事件名(参数表)/动作表达式事件名可以是任何事件的名称,在活动表中常使用entry exit do三种标准事件2事件表达式语法格式:事件说明守卫条件/动作表达式其中事件说明的语法为:事件名(参数表)如果在箭头上没有标明事件,则表示在源状态的内部活动执行完之后自动触发转换364例子加 ILljto啊吗JS字右改号甬按送中啦就按迪卅McU加吐戯吗音- 且增倉tiffifir伽播放何总1怕启療方Efii-BAfciiS断我 )Efl 3 电话系扯曲狀亦把3.7其他图形工具3.7.1层次方框图用树形结构

24、的一系列多层次的矩形框描绘数据的层次结构。顶层是一个单独的矩形框,代表完整的数据结构。下面各层矩形框代表这个数据的子集。最底层的各个框代表组成这个数据的实际数据元素。3.7.2Warnier 图编辑越序什器软杵产品w *件工具彳测试驭动砒心(应用敕杵I设计辅肋工具55图3, Wsrnkr Rfl的一个例子3.7.3IPO 图处理框中列出处理的次序暗示了执行的顺序在需求分析阶段可以使用IPO图简略地描述系统的主要算法(即数据流图中各个处理的基本算法)。3.8验证软件需求3.8.1从哪些方面验证软件需求的正确性一致性完整性现实性有效性3.8.2验证软件需求的方法(1 )验证需求的一致性:形式化的描

25、述软件需求的方法(2)验证需求的现实性(3 )验证需求的完整性和有效性:使用原型系统,显示目标系统的主要功能而不是性能3.8.3用于需求分析的软件工具第五章总体设计基本目的就是回答“概括的说,系统应该如何实现”。总体设计过程首先寻找实现目标系统的各种不同方案,需求分析阶段得到的数据流图是设想各种可能方案的基础。5.1设计过程两个主要的阶段:系统设计阶段,确定系统的具体实现方案结构设计阶段,确定软件结构(1)设想供选择的方案(2 )选取合理的方案(系统流程图组成系统的物理元素清单成本/效益分析 进度计划)(3)推荐最佳方案(为最佳方案制定详细的实现计划)(4 )功能分解设计出组成这个系统的所有程

26、序和文件对程序:结构设计,确定组成程序的模块以及模块之间的关系,属于总体设计阶段过程设计,确定每个模块的处理过程,属于详细设计阶段功能分解导致数据流图进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。(5)设计软件结构(6)设计数据库(7)制定测试计划(8 )书写文档(9)审查和复审5.2设计原理5.2.1模块化模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它按照模块的定义,过程、函数、子程序和宏等都可以作为模块。模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些,模块集成起来构成一个整体,可以完成指定的功能满足用户

27、的需求522抽象523逐步求精5.2.4信息隐藏和局部化一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的5.2.5模块独立独立程度由内聚和耦合这两个标准来度量耦合:衡量不同模块彼此间互相依赖(连接)的紧密程度强弱判定:取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据数据耦合低控制耦合中等通常可以用数据耦合代替特征耦合内容耦合最高判定:臥高程度的黑合是內癖揺含血黑出现下况情况之一两个模块间就发生了内程網合. 一个摸块讪间另一个按块的內部牡據. 一牛欖坡不逼过正帮入口而转到另一亍摸块的内部、-网个摸块有一部分程序代码萤叠(只可陡出现在汇塢程序中X 一

28、屮根块有參个人(这意味着一个規块有几种功魁匚公共环境耦合原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合内聚:衡量一个模块内部各个元素彼此结合的紧密程度低内聚分类:偶然内聚(出现修改错误的概率比其他类型的模块高得多)逻辑内聚(一个模块完成的任务在逻辑上属于相同或相似的一类)时间内聚(一个模块包含的任务必须在同一段时间内执行)中内聚分类:过程内聚(一个模块内的处理元素是相关的,而且必须以特定次序执行)通信内聚(模块中所有元素都使用同一个输入数据和产生同一个输出数据)高内聚分类:顺序内聚(模块内的处理元素和同一个功能密切相关且这些处理必须顺序执行)功能内聚(

29、模块内所有处理元素属于同一个整体完成一个单一的功能)5.3启发规则从长期实践中积累的丰富经验(1 )改进软件结构提高模块独立性(2)模块规模应该适中(3)深度、宽度、扇出和扇入都应该适当深度:软件结构中控制的层数宽度:软件结构内同一个层次上的模块总数的最大值扇出:一个模块直接控制(调用)的模块数目扇入:表明有多少个上级模块直接调用(4)模块的作用域应该在控制域之内作用域:受该模块内一个判定影响的所有模块的集合控制域:这个模块本身以及所有直接或间接从属于它的模块的集合通过修改软件结构使作用域是控制域的子集的方法:把做判定的点往上移把那些在作用域内但不在控制域内的模块移到控制域内(5 )力争降低模

30、块接口的复杂程度(6)设计单入口单出口的模块(7 )模块功能应该可以预测5.4描绘软件结构的图形工具541层次图和HIPO图层次图(H图):用来描绘软件的层次结构。层次图中一个矩形框代表一个模块,方框间的 连线表示调用关系。正文加 工系统输入编辑加标題,存储楼索1躺目录111II1111!11|删除1擂入1修改1 1育井1列表图5.3 正文如工系址的层赛耀HIPO图:层次图加输入处理输出图田乳1蒂编号的提反圉(H茜|)fjQliys1.02.0厂304.fl1.0.0与H图中每一个方框相对应,应该有一张IPO图描绘这个方框代表的模块的处理过程HIPO图中的每张IPO图内都应该明显地标出它所描绘

31、的模块在H图中的编号以便追踪了解这个模块在软件结构中的位置542结构图产生琳隹解慎输入I |轲第输站舉陛冬显示姑川圈5*5编枸因廟创于产生竝僮網的一就箔枸尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息FJU 刑崔为嵐1衬個用人为假时爲ffIB除工卩栈块卿祈环債用核块心HI5.5面向数据流的设计方法利用定义的一些不同的“映射”把数据流图变换成软件结构5.5.1概念变换流:信息以“外部世界”的形式进入软件系统,经过处理后再以“外部世界”的形式离 开系统事务流:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。5.5.2变换分析:把具有变换流特点的数

32、据流图按预先确定的模式映射成软件结构区井输人和 鞘出井支设计步骤5.5.4设计优化映射械事笛站构J!l -. J *弟忡小黑卅;址(1 )复查基本系统模型(2) 复查并精化数据流图确保数据流图给出了目标系统的正确的逻辑模型使数据流图中每个处理都代表一个规模适中相对独立的子功能(3) 确定数据流图具有变换特性还是事务特性(4) 确定输入流和输出流的边界,从而孤立出变换中心(5) 完成“第一级分解”应该在能够完成控制功能并且保持好的耦合和内聚特性的前提下尽量使第一级控制中的模块数目取最小值。(6) 完成“第二级分解”(7) 使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化5.5.3事务

33、分析曲事島植映新戲的牧件站构也播一牛症牧勞支和一牛塘遲好支:吹肘岀按咬欝克站 构的为注籾瀝换分折典射出誹人他檸的力蝕酬柜像阳从事务中心感边卑卅结.邑桔占接 收曲迪的处理映K曲欖块.嵐送甘丸的姑将赳含一牛豐度槓块,它控竄卜蔭的睛有洁 0模怏*燃右尼敷期注阍中的褂!皓功瀛遗踣昵射庇耳它的3E特征施对局如儒檜. I壬1).和说明亍上述映肘显悴.M护巾争中心 和数蜓團躺更IS15. 10面fJJK宦瞳方他射谀叶灯程C TfflSn mj*糟常软件密將号.41撞HJS迖和 士程甜彌吕桁第六章详细设计根本目标:确定应该怎样具体地实现所要求的系统6.1结构程序设计IB 6,1 2评基本的轮制焙梅3氐(b I

34、F. THES* EISE IX: WHILE 啡押年结检结构程序设计的经典定义:一个程序的代码仅仅通过顺序、选择和循环这三种基本控制结构 进行连接,并且每个代码块只有一个入口和一个出口结构程序设计的广泛定义:尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且总是使用前向GO TO语句6.3过程设计的工具6.3.1程序流程图632盒图(N-S图)ffl 孟E0此哥丰符号U恬)lFTHEHELSEfiia-X! 3 C遜刖产并卫 * cJ 7Wff A6.3.3PAD图:二维树形结构来表示程序的控制流的OJefh 辩愫炳P让斷齡血 UI(IFC1KN P3 B

35、UERhWmi凶WHILE理耳厲HILUDOPMi) UK7IL整实:跟MP朝TEC:订叶诙号;U634判定表左上部:所有条件左下部:所有可能的动作右上部:各种条件组合的矩阵右下部:与每种条件组合相对应的动作.Iz31&67gTTTTFFKFMl*TFTFTFTFFFTTFFTTTFFFFFFFFXXiiX6.3.5判定树6.3.6过程设计语言:PDL也称伪码,用正文的形式表示数据和处理过程的设计工具6.4面向数据结构的设计方法根据数据结构设计程序处理过程。面向数据结构的设计方法的最终目标是得出对程序处理过程的描述。在完成了软件结构设计之后可以使用面向数据结构的方法来设计每个模块的处理过程6.

36、4.1Jackson 图(1 )顺序结构:数据由一个或多个数据元素组成,每个元素按确定次序出现一次pnsnLJI . D屋氐E A由生匚D 3小元累服用姐成(毎牛元累貝出现枚出现的血序犠阮是1KC图6为 根攜杀杵久是日或或I)中的某一于【泛直!柜b工和口囲右上钢林小御圈故輛址(2)选择结构:数据包含两个或多个数据元素,每次使用这个数据时按一定的条件从这些 数据元素中选择一个。(3)重复结构:根据使用时的条件由一个数据元素出现零次或多次构成AIS 5, 10 A由H岀現N次總锻(注童:庄呂的冇上角有斥寻标记】642改进的Jackson图HI S.11 改还的 Jacksen fl頤序结楫、生C、

37、D中住一-节部孑;施是旌卑由现或蛍堂由现的数摇元庸“趴不能足右-上卅右小吋顒或里 号标记的元盍);W酬择结构岛右和羽号屮旳费竽*拦令文堺件的蝙号】姐员第轉,储环结衣乘呻対端弓为亠Jackson图实际上是对层次方框图的一种精化6.4.3Jackson 方法(1 )分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构(2)找出输入数据结构和输出数据结构中有对应关系的数据单元。对应关系:有直接的因果关系,在程序中可以同时处理的数据单元 对于重复出现的数据单元,重复的次序和次数必须都相同才可能有对应关系(3) 用下述三条规则从描绘数据结构的Jacks on图导出描绘程序结构的J

38、ackson图第一 为每对有对应关系的数据单元,按飓它门在数据结构團中的层次在程厚结 构图的相应层次画一牛处理框注意,如果这对数据单元在输人数据结构和输出数 据鈿呜中所牡的屋机不同,!UJ和它们讨应的处理握在桎序结构隆中所处掏层枕与它 们之中在数据结驸图中层次低药那个对应几第二根据输入数躬结枸乍剩余的每个数据单元所处的层次*在程序结枸图的相 应层次分别为它怕画上对应的处理框.第二很据输出数秦結构中啊余的毎牛数据单元所处的层眈.在程序结构图的相 应层次分别为它幻俩上对应的处理框.思之描绘程序结惑I的Jaiksun图应该综合输人数据结梅利轴出数据结构的层次 英系而导出来.注早出程序缔掲圈的过程中,

39、由于魄进的Jarksnn图获定在构疵顺 序结啕的元索中不能有重境出现或选择出现的元累,阖此可偿需嬰增加中间层次的 处理嘔*(4)列出所有操作和条件(包括分支、循环结束条件)并且把它们分配到程序结构图的适当位置(5 )用伪码表示程序和图6r门也!所示的顺序细构对应的伪科具中吐q和m日总关毬字A srqBCDA end利图6, lJCb)所示的选择结拘划应的伪码.其中select, or和end是关键字 con di cond2和con血 分别是执行B、或D的条件:A select condlBA ar condZCA or cond3DA end和图匕ll(d)示的丞复结沟灯应的伪码,其中ite

40、r, until, whilU-V皿心是其謎字 (重貝结构有until和while两种殆式).00痕是第杵;A iter until(或 wh ile) co nd5A rnd6.5程序复杂程度的定量度量6.5.1McCabe 方法(1 )流图:实质上是退化了的程序流程图,仅仅描绘程序的控制流程,完全不表现对数据 的具体操作以及分支或循环的具体条件。6. 15 把程序i*程图映射底说禺GO廉序泄霹禺f仍族刖(2 )计算环形复杂度的方法环形复杂度=区域数环形复杂度V(G)=E-N+2, E是流图中边的条数,N是结点数环形复杂度V(G)=P+1, P是流图中判定结点的数目6.5.2Halstead

41、方法:根据程序中运算符和操作数的总数来度量程序的复杂程度 N1 :程序中运算符出现的总次数N2 :操作数出现的总次数N:程序长度N=N1+N2Halstead预测程序长度公式:H = m并 i + 丹* tog2Halstead还给出预测穆序中包含错盪的个数的公式如下:E = N)/3 000第十章 面向对象分析的基本过程10.1.1概述10.1.2 3个子模型与 5个层次 面向对象建模得到的模型包括系统的 3 个要素,即静态结构(对象模型) 、交互次序(动态 模型)和数据变换(功能模型) 。复杂问题的对象模型通常由下述 5 个层次构成: 主题层、 类与对象层、 结构层、属性层和服 务层。主题

42、: 指导读者理解大型、复杂模型的一种机制。 通过划分主题把一个大型、复杂的对象模 型分解成几个不同的概念范畴。这 5 个层次对应着在面向对象分析过程中建立对象模型的 5 项主要活动: 找出类与对象, 识 别结构,识别主题,定义属性,定义服务10.2 需求陈述10.2.1 书写要点 需求陈述的内容包括:问题范围、功能需求、性能需求、应用环境以及假设条件等10.2.2 例子10.3 建立对象模型主要有 5 个层次。步骤: (1)确定对象类和关联,对于大型复杂问题还要进一步划分出若干 个主题 (2)给类和关联增添属性,进一步描述 (3) 用适当的继承关系进一步合并和组织类(4) 对类中操作的最后确定

43、, 需要等到建立了动态模型和功能模型之后, 因为这两个子模型更准确 地描述了对类中提供的服务的需求10.3.1 确定类与对象10.3.2 确定关联1 初步确定关联,在需求陈述中使用的描述性动词或动词词组通常表示关联关系2 筛选。删除候选关联的标准: (1)已删去的类之间的关联 (2)与问题无关或应该在实现阶段考 虑的关联 (3)瞬时事件。关联应该描述问题域的静态结构,而不应该是一个瞬时事件。如果 动作表述的需求隐含了问题域的某种基本结构, 则应该用适当的动词词组重新表示这个关联。(4) 三元关系。三个或三个以上对象之间的关联,大多可以分解为二元关联或用词组描述成 限定的关联 (5)派生关联。应

44、该去掉那些可以用其他关联定义的冗余关联3 进一步完善 (1)正名(2)分解(3)补充 (4)标明重数10.3.3 划分主题在概念上把系统包含的内容分解成若干个范畴 应该按问题领域而不是用功能分解方法来确定主题。 应该按照使不同主题内的对象相互间依赖和交互最少的原则来确定主题10.3.4 确定属性确定属性的过程包括分析和选择(1) 分析通常在需求陈述中用名词词组表示属性,形容词表示可枚举的具体属性。 应该仅考虑与具体应用直接相关的属性,不要考虑那些超出所要解决的问题范围的属性。 分析过程中应该先找出最重要的属性,以后再逐渐把其余属性增添进去。在分析阶段不要考虑那些纯粹用于实现的属性(2) 选择认

45、真考察经初步分析而确定下来的那些属性, 从中删掉不正确的或不必要的属性通常的情况 有(1) 误把对象当作属性 (2)误把关联类的属性当作一般对象的属性 (3)把限定误当成属性。正 确使用限定词往往可以减少关联的重数。 如果把某个属性值固定下来以后能减少关联的重数 则应该考虑把这个属性重新表述成一个限定词(4)误把内部状态当成了属性 (5)过于细化 (6)存在不一致的属性。 如果得出一些看起来与其他属性毫不相关的属性应该考虑把该类分解成两 个不同的类10.3.5 识别继承关系 两种方式建立继承关系(1) 自底向上(2) 自顶向下10.3.6 反复修改10.4 建立动态模型10.4.1 编写脚本定

46、义: 在建立动态模型的过程中, 脚本指系统在某一执行期间内出现的一系列事件。 描述用 户(或其他外设) 与目标系统之间的一个或多个典型的交互过程, 以便对目标系统的行为有 更具体的认识。范围:不固定,由编写脚本的具体目的决定 顺序:首先编写正常情况的脚本。然后考虑特殊情况。最后考虑出错情况。 对于每一个事件, 都应该指明触发该事件的动作对象、 接受事件的目标对象及该事件的参数10.4.2 设想用户界面10.4.3 画事件跟踪图 避免用自然语言书写的脚本不够简明,阅读时存在二义性。也有助于建立动态模型。(1) 确定事件 大多数对象到对象的交互行为都对应着事件 应该把对控制流产生相同效果的那些事件

47、组合在一起作为一类事件, 并给它们取一个唯一的 名字。应该把对控制流有不同影响的那些事件区分开来,不要误把它们组合在一起一般而言, 不同的应用系统对相同事件的响应并不相同, 在最终分类所有的事件之前必须先 画出状态图。 如果从状态图中看出某些事件之间的差异对系统行为并没有什么影响则事件间 的差异可以忽略。画事件跟踪图:简化了的 UML顺序图10.4.4 画状态图 由事件引起的状态改变称为“转换” 。如果一个事件并不引起当前状态发生的转换,则可忽 略这个事件。10.4.5 审查动态模型 对于没有前驱或没有后继的状态应该着重审查, 如果这个状态既不是交互序列的起点也不是 终点,则发现了一个错误。1

48、0.5 建立功能模型10.5.1 画出基本系统模型图基本系统模型由若干个数据源点 / 终点,以及一个处理框组成, 这个处理框代表了系统加工、 变换数据的整体功能。 基本系统模型指明了目标系统的边界。 由数据源点输入的数据和输出 到数据终点的数据,是系统与外部世界之间的交互事件的参数。10.5.2 画出功能级数据流图把基本系统模型中单一的处理框分解成若干个处理框, 以描述系统加工、 变换数据的基本功 能,就得到功能级数据流图10.5.3 描述处理框功能把数据流图分解细化到一定程度之后, 就应该描述图中各个处理框的功能。 要着重描述每个 处理框所代表的功能,而不是实现功能的具体算法10.6 定义服

49、务第十二章 面向对象实现 主要包括两项工作:把面向对象设计结果翻译成用某种程序语言书写的面向对象程序 测试并调试面向对象程序简要的说,就是编码、测试和调试12.1 程序设计语言12.1.1 面向对象语言的优点面向对象设计的结果可以用面向对象语言、 也可以用非面向对象语言实现。 即使用任何一种 语言都可以实现面向对象的概念。选择编程语言的关键因素是语言一致的表达能力、可重用性及可维护性。 面向对象语言的优点:(1) 一致的表示方法(2)可重用性(3)可维护性12.1.2 面向对象语言的技术特点历史:LISP语言- 动态联编概念和交互式开发环境SIMULA语言-类的概念和继承机制Modula_2

50、语言和 Ada 语言 -数据抽象机制 面向对象语言分为两大类: 纯面向对象语言: Smalltalk Eiffer 着重支持面向对象方法研究和快速原型的实现 混合型面向对象语言 (在过程语言的基础上增加面向对象机制):C+ 提高运行速度和使传统程序员容易接受面向对象思想选择面向对象语言时应该考虑的技术特点:(1) 支持类与对象概念的机制 (动态创建且通过指针引用对象,动态内存分配管理 )(2) 实现整体 -部分(即聚集 )结构的机制 (一般通过指针实现关联 )(3) 实现一般 -特殊(即泛化 )结构的机制 (既包括实现继承的机制也包括解决名字冲突的机制)(4) 实现属性和服务的机制 (支持实例

51、连接的机制;属性可见性机制;对属性值的约束;支持消息连接 (即对象交互关系 );控制服务可见性;动态联编)(5) 类型检查 (强类型 &弱类型 不理解 )(6) 类库 (由实现这种语言的编译系统自行提供类库)(7) 效率 (类库提供高效的算法和更好的数据结构)(8) 持久保持对象(希望数据能不依赖与程序执行的生命期长时间保存下来。C+无直接提供)(9) 参数化类 (参数化的类模板 )(10) 开发环境 (编辑程序、编译程序或解释程序、浏览工具、调试器等)12.1.3 选择面向对象语言(1) 将来是否占主导地位 (最终决定的一般是成本之类的经济因素而不是技术因素)(2) 可重用性 (能够最完整、最准确的表达问题域语义的面向对象语言)(3) 类库和开发环境 (语言、类库和开发环境共同决定了可重用性)(4) 其他因素12.2 程序设计风格12.2.1 提高可重用性代码重用: (1)本项目内的代码重用 .继承机制 (2)新项目重用就项目的代码 . 设计准则:(1) 提高方法的内聚(2) 减小方法的规模(3) 保持方法的一致性 (功能相似的方法应该有一致的名字、参数特征、返回值类型、使用条 件及出错条件等 )(4) 把策略与实现分开 (策略方法:做出决策,提供变元,管理全局资源/ 实现方法:完成具体操作 /策

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论