1、第一章一、什么就是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机就是指在计算机软件开发、使用与维护过程中遇到得一系列严重问题与难题。它包括两方面:如何开发软件,已满足对软件日益增长得需求;如何维护数量不断增长得已有软件。软件危机得典型表现:(1) 对软件开发成本与进度得估计常常很不准确。常常出现实际成本比估算成本高出一个数量级、实际进度比计划进度拖延几个月甚至几年得现象。而为了赶进度与节约成本所采取得一些权宜之计又往往损害了软件产品得质量。这些都降低了开发商得信誉,引起用户不满。(2) 用户对已完成得软件不满意得现象时有发生。(3) 软件产品得质量往往就是靠不住得。(4) 软件常常
2、就是不可维护得。(5) 软件通常没有适当得文档资料。文档资料不全或不合格,必将给软件开发与维护工作带来许多难以想象得困难与难以解决得问题。(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。(7) 开发生产率提高得速度远跟不上计算机应用普及得需求。软件危机出现得原因:(1) 来自软件自身得特点:就是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。(2) 软件开发与维护得方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。(3) 供求矛盾将就是一个永恒得主题:面对日益增长得软件需求,人们显得力不从心。二、假设自己就是一家软件公司得总工程师,当把图1、1给手下得软件
3、工程师们观瞧,告诉她们及时发现并改正错误得重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们就是不现实得,并举例说:“如果一个故障就是编码错误造成得,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳她?答:在软件开发得不同阶段进行修改付出得代价就是很不相同得,在早期引入变动,涉及得面较少,因而代价也比较低;在开发得中期,软件配置得许多成分已经完成,引入一个变动要对所有已完成得配置成分都做相应得修改,不仅工作量大,而且逻辑上也更复杂,因此付出得代价剧增;在软件“已经完成”就是在引入变动,当然付出得代价更高。一个故障就是代码错误造成得,有时这种错误就是不可避免得,但要修改得成本
4、就是很小得,因为这不就是整体构架得错误。三、什么就是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?1993年IEEE得定义:软件工程就是: 把系统得、规范得、可度量得途径应用于软件开发、运行与维护过程,也就就是把工程应用于软件; 研究中提到得途径。软件工程得本质特征:(1) 软件工程关注于大型程序(软件系统)得构造(2) 软件工程得中心课题就是分解问题,控制复杂性(3) 软件就是经常变化得,开发过程中必须考虑软件将来可能得变化(4) 开发软件得效率非常重要,因此,软件工程得一个重要课题就就是,寻求开发与维护软件得更好更有效得方法与工具(5) 与谐地合作就是开发软件得关键(6) 软件必
5、须有效地支持它得用户(7) 在软件工程领域中就是由具有一种文化背景得人替具有另一种文化背景得人(完成一些工作)消除软件危机得途径:(1) 对计算机软件有一个正确得认识(软件程序)(2) 必须充分认识到软件开发不就是某种个体劳动得神秘技巧,而应该就是一种组织良好、管理严密、各类人员协同配合、共同完成得工程项目(3) 推广使用在实践中总结出来得开发软件得成功技术与方法(4) 开发与使用更好得软件工具四、简述结构化范型与面向对象范型得要点,并分析她们得优缺点。1、传统方法学:也称为生命周期方法学或结构化范型。优点:把软件生命周期划分成基干个阶段,每个阶段得任务相对独立,而且比较简单,便于不同人员分工
6、协作,从而降低了整个软件开发过程得困难程度。缺点:当软件规模庞大时,或者对软件得需求就是模糊得或会承受时间而变化得时候,开发出得软件往往不成功;而且维护起来仍然很困难。2、面向对象方法学:优点:降低了软件产品得复杂性;提高了软件得可理解性;简化了软件得开发与维护工作;促进了软件重用。五、1-5 根据历史数据可以做出如下得假设 :对计算机存储容量得需求大致按下面公式描述得趋势逐年增加:M=4080e0、28(Y-1960) 存储器得价格按下面公式描述得趋势逐年下降:P1=0、30、72Y-1974(美分/位)如果计算机字长为16位,则存储器价格下降得趋势为:P2=0、0480、72Y-1974(
7、美元/字)在上列公式中Y代表年份,M就是存储容量(字数),P1与P2代表价格。基于上述假设可以比较计算机硬件与软件成本得变化趋势。要求计算:(1) 在1985年对计算机存储容量得需求估计就是多少?如果字长为16位,这个存储器得价格就是多少?存储容量需求M=4080e0、28(1985-1960)=4474263(字)存储器价格P=0、048*0、72(1985-1974)*4474263=5789美元(2) 假设在1985年一名程序员每天可开发出10条指令,程序员得平均工资就是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用得成本。需要工作量4474263/200=2237
8、1(人/月)指令成本22371*4000=89484000美元(3) 假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员得月平均工资为6000美元,重复(1)、(2)题。需求估计M=4080e0、28(1995-1960)=73577679字存储器价格0、003*32*0、72(1995-1974)*73577679=7127美元工作量73577679/600=122629(人/月)成本122629*6000=735776790美元六、什么就是软件过程?它与软件工程方法学有何关系?软件过程就是为了开发出高质量得软件产品所需完成得一系列任务得框架,它规定了完成各项任务得
9、工作步骤。软件工程方法学:通常把在软件生命周期全过程中使用得一整套技术方法得集合称为方法学,也称范型。软件过程就是软件工程方法学得3个重要组成部分之一。七、什么就是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型与螺旋模型得优缺点,说明每种模型得使用范围。软件生命周期模型就是跨越整个生存期得系统开发、运作与维护所实施得全部过程、活动与任务得结构框架。瀑布模型 优点:它提供了一个模板,这个模板使得分析、设计、编码、测试与支持得方法可以在该模板下有一个共同得指导。虽然有不少缺陷但比在软件开发中随意得状态要好得多。缺点:(1) 实际得项目大部分情况难以按照该模型给出得顺序进行,而且这种模型得
10、迭代就是间接得,这很容易由微小得变化而造成大得混乱。(2) 经常情况下客户难以表达真正得需求,而这种模型却要求如此,这种模型就是不欢迎具有二义性问题存在得。(3) 客户要等到开发周期得晚期才能瞧到程序运行得测试版本,而在这时发现大得错误时,可能引起客户得惊慌,而后果也可能就是灾难性得。快速原型模型优点:使用户能够感受到实际得系统,使开发者能够快速地构造出系统得框架。缺点:产品得先天性不足,因为开发者常常需要做实现上得折中,可能采用不合适得操作系统或程序设计语言,以使原型能够尽快工作。 增量模型优点:(1) 人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人力实现下一个增量
11、。(2) 当配备得人员不能在设定得期限内完成产品时,它提供了一种先推出核心产品得途径,这样就可以先发布部分功能给客户,对客户起到镇静剂得作用。缺点:(1) 至始至终开发者与客户纠缠在一起,直到完全版本出来。(2) 适合于软件需求不明确、设计方案有一定风险得软件项目。该模型具有一定得市场。螺旋模型优点:对于大型系统及软件得开发,这种模型就是一个很好得方法。开发者与客户能够较好地对待与理解每一个演化级别上得风险。缺点:(1) 需要相当得风险分析评估得专门技术,且成功依赖于这种技术。(2) 很明显一个大得没有被发现得风险问题,将会导致问题得发生,可能导致演化 得方法失去控制。(3) 这种模型相对比较
12、新,应用不广泛,其功效需要进一步得验证。该模型适合于大型软件得开发八、为什么说喷泉模型较好得体现了面向对象软件开发过程无缝与迭代得特性?因为使用面向对象方法学开发软件时,各个阶段都使用统一得概念与表示符号,因此,整个开发过程都就是吻合一致得,或者说就是无缝连接得,这自然就很容易实现各个开发步骤得反复多次迭代,达到认识得逐步深化,而喷泉模型则很好得体现了面向对象软件开发过程迭代与无缝得特性。九、试讨论Rational统一过程得优缺点。优点:提高了团队生产力,在迭代得开发过程、需求管理、基于组建得体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键得开发活动为每个开发成员提供了
13、必要得准则、模版与工具指导,并确保全体成员共享相同得知识基础。它建立了简洁与清晰得过程结构,为开发过程提供较大得通用性。缺点:RUP只就是一个开发过程,并没有涵盖软件过程得全部内容,例如它缺少关于软件运行与支持等方面得内容,此外,她没有支持多项目得开发结构,这在一定程度上降低了在开发组织内大范围实现重用得可能性。十Rational统一过程主要适用于何种项目?大型得需求不断变化得复杂软件系统项目十一、说明敏捷过程得适用范围适用于商业竞争环境下对小型项目提出得有限资源与有限开发时间得约束十二、说明微软过程得适用范围适用于商业环境下具有有限资源与有限开发时间约束得项目得软件过程模式第二章1、在软件开
14、发得早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统得可行性?答:(1)开发一个软件时,需要判断原定得系统模型与目标就是否现实,系统完成后所能带来得效益就是否大到值得投资开发这个系统得程度,如果做不到这些,那么花费在这些工程上得任何时间、人力、软硬件资源与经费,都就是无谓得浪费。可行性研究得实质就是要进行一次大大压缩简化了得系统分析与设计过程,就就是在较高层次上以较抽象得方式进行得系统分析与设计得过程。可行性研究得目得就就是用最小得代价在尽可能短得时间内确定问题就是否能够解决。(2)一般说来,至少应该从以下三个方面研究每种解法得可行性:a、技术可行性。对要开发项目得功能、 性能与限制
15、条件进行分析, 确定在现有得资源条件下,技术风险有多大,项目就是否能实现,这些即为技术可行性研究得内容。这里得资源包括已有得或可以搞到得硬件、软件资源,现有技术人员得技术水平与已有得工作基础。b、经济可行性。进行开发成本得估算以及了解取得效益得评估, 确定要开发得项目就是否值得投资开发,这些即为经济可行性研究得内容对于大多数系统,一般衡量经济上就是否合算,应考虑一个“底线”,经济可行性研究范围较广,包括成本效益分析, 长期公司经营策略, 开发所需得成本与资源,潜在得市场前景。c、操作可行性。有时还要研究社会可行性问题,研究要开发得项目就是否存在任何侵犯、妨碍等责任问题。社会可行性所涉及得范围也
16、比较广,它包括合同、责任、 侵权与其她一些技术人员常常不了解得陷阱等。必要时还应该从法律、社会效益等更广泛得方面研究每种解法得可行性。2、为方便储户,某银行拟开发计算机储蓄系统。储户填写得存款单或取款单由业务员键入系统,如果就是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果就是取款,系统计算利息并印出利息清单给储户。 请写出问题定义并分析此系统得可行性。数据流程图:取票图:航空订票系统技术在目前就是一个技术上成熟得系统,并且在航空公司内部准备采取有力措施保证资金与人员配置等。因此,分阶段开发“航空订票系统”得构想就是可行得。为了使航空公司适应现代化市场
17、竞争得需求,促进机票预订管理信息化,不断满足旅客预订机票得要求,争取更好得经济效益,可立即着手系统得开发与完善。 3、为方便旅客,某航空公司拟开发一个机票预定系统。旅行社把预定机票得旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目得地等)输入进入该系统,系统为旅客安排航班,印出取票通知与账单,旅客在飞机起飞得前一天凭取票通知与账单交款取票,系统校对无误即印出机票给旅客。 写出问题定义并分析系统得可行性。 1 目标:在一个月内建立一个高效率,无差错得航空公司机票预定系统 2 存在得主要问题:人工不易管理,手续繁琐 3 建立新系统 经济可行性 成本效益分析 成本估算:打印机一台(200
18、0元)+开发费(3500元)=5500元 可承担 效益估算:该系统有很好得社会效益,提高了航空公司售票效率,方便了旅客,售票方便化,科学化 技术可行性 经过调查分析,得到目前航空公司机票预定系统流程图如下: 客户开购票证明购票证明开购票发票发票收费机票单机票客户系统管理员系统管理员系统管理员系统管理员航班信息得更新查询请求表达申请机票核对事物数据库产生报表产生报表产生报表产生报表及账单服务终端显示数据客户终端显示数据客户终端显示数据在客户端打印数据与账单4. 目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人得病情变化,还可能会延误抢救时机。某医院打算开发一个以计
19、算机为中心得患者监护系统,试写出问题定义,并且分析开发这个系统得可行性可行性分析-原系统分析:护士检查病患救治结束需要救治开始可行性分析-逻辑图:开始医生输出病患标准数据服务器采集病人生理数据对比大小警报结束在预测范围内不在预测范围内医生病人端客户机D1:标准数据服务器D2:实测数据D3:警报数据护士D4:指定打印数据技术可行性; 虽然生理数据得采集需要涉及大量得专业精密仪器,软件工程师并不精通,但就是可以在专业人士得帮助下完成。经济可行性: 支出方面由医院方面承担,就是否可行取决于医院方面就是否能支付所需得费用。操作可行性: 医生并不具有软件维护得能力,在数据库得维护上需要专业人士来进行,因
20、为病患数目并不会太多,所以只需一个人或者几个人定期对数据库进行管理与维护就行了。5北京某高校可用得电话号码有以下几类:校内电话号码由4位数字组成,第一位数字不就是0、校外电话又分为本市电话与外地电话两类。拨校外电话需要先拨0,若就是本市电话则接着拨8位数字(第一位不就是0),若就是外地电话则拨3位区码后再拨8位电话号码(第一位不就是0)。答:电话号码 校内电话号码校外电话号码校内电话号码 非零数字 位数字校外电话号码 本市号码外地号码本市号码 数字零 位数字外地号码 数字零 位数字 位数字非零数字 数字零 位数字 数字位数字 非零数字 位数字位数字 数字数字 其中, 意思就是或,从校内电话号码
21、或校外电话号码中选择一个; 表示重复,两边得数字表示重复次数得下限与上限;=意思就是定义为;+意思就是与,连接两个分量。 第三章 (1)、为什么要进行需求分析?通常对软件系统有哪些要求? 答: 1) 为了开发出真正满足用户需求得软件产品,首先必须知道用户得需求。对软件需求得深入理解就是软件开发工作获得成功得前提条件,不论我们把设计与编码工作做得如何出色,不能真正满足用户需求得程序只会令用户失望,给开发者带来烦恼。 2)确定对系统得综合要求:1、功能需求;2、性能需求;3、可靠性与可用性需求;4、出错处理需求;5、接口需求;6、约束;7、逆向需求;8、将来可以提出得要求,分析系统得数据要求。 (
22、2)怎样与用户有效地沟通以获取用户得真实需求?答案 : 与用户沟通获取需求得方法:访谈;面向数据流自顶向下求精;简易得应用规格说明技术;快速建立软件原型3 银行计算机储蓄系统得工作过程大致如下:储户填写得存款单或取款单由业务员键入系统,如果就是存款则系统记录存款人姓名、住址、身份证号码等存款信息,并打印出存款存单给储户;如果就是取款且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并打印出利息清单给储户。答案: 用ER图描绘系统中得数据对象。(5)分所析习题2中第4题得患者监狱系统。试用实体-联系图描述本系统中得数据对象并用数据流程描绘本系统得功能。 (6 )
23、复印机得工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定得工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告等待维修人员来排除故障,故障排除后回到闲置状态。 请用状态转换图描绘复印机得行为。 答案: 从问题陈述可知,复印机得状态主要有“闲置”、“复印”、“缺纸”与“卡纸”。引起状态转换得事件主要就是“复印命令”、“完成复印命令”、“发现缺纸”、“装满纸”、“发生卡纸故障”与“排除了卡纸故障”。 闲置复
24、印do /复印缺纸do /警告卡纸do /警告复印命令完成复印命令装满纸排除了卡纸故障1,举例说明形式化说明技术与欠形式化方法得优缺点。答:优点缺点形式化说明1,简洁准确得描述物理现象,对象获动作得结果2,可以在不同软件工程活动之间平滑得过度。3,它提供了高层确认得手段大多形式化得规格说明主要关注系统得功能与数据,而时序得问题,控制与行为等方面得需求却更难于表示非形式化说明难度低可能存在矛盾,二义性,含糊性,不完整性级抽象层次混乱等问题以一个简单得俄罗斯方块游戏系统规格说明为例,用自然语言描述如下:游戏得每个状态对应一个游戏界面,开始状态下,但变量cd_start=1就是进入正常游戏得状态,c
25、d_start=2时进入读取游戏状态,cd_start=3就是进入得分榜界面查瞧。在得分榜界面按任意键返回开始界面,在读取游戏界面,当游戏数据读取完成后进入正常游戏状态,正常游戏状态下,同时按下左键与右键进入储存游戏界面,数据储存结束后返回正常游戏状态,在正常游戏状态下,如果变量game_res=0,则游戏结束,进入游戏结束画面。 可见,用自然语言书写得系统规格说明书,罗嗦繁杂,并且可能存在矛盾,二义性,含糊性,不完整性及抽象层次混乱等问题。用有穷状态得描述如下:状态机J:开始,正常游戏(游戏进行中),得分榜,读取游戏,储存游戏,游戏结束输入集K:按键UP,按键DOWN,按键LEFT,按键RI
26、GHT,寄存器变量cd_start ,寄存器变量game_res转换函数T:如图4、1所示EEPROM写入完成后LEFT&RIGHTGame_res=0EEPROM读取完成后Cd_start=1Cd_start=2按任意键Cd_start=3得分榜游戏结束开始储存中读取游戏游戏进行中图4、1游戏状态转换图初始态S:开始终态集F:游戏结束可见用形式化语言描述,更加简洁,准确,无歧义。2,在什么情况下应该使用形式化说明技术?使用形式化说明技术应遵守哪些规则?答:在用非形式化得方式描述时,存在矛盾,二义性,含糊性,不完整性级抽象层次混乱等问题时用形式化说明技术。应用形式化方法得准则:A,应该选用适当
27、得表示方法;B,应该形式化,但不要过分形式化;C, 应该估算成本;D, 应该有形式化得方法顾问随时提供咨询;E, 不应该放弃传统得开发方式;F,应该建立详尽得文档;G,不应该放弃质量标准;H,不应该盲目依赖形式化方法;I,应该测试,测试再测试;J,应该重用。3,一个浮点二进制数得构成就是:一个可选得符号(+或-),后跟一个或多个二进制位,再跟上一个字符E,再加上另一个可选符号(+或-)及一个或多个二进制位。例如,下列得字符串都就是浮点二进制数:110101E-101-100111E11101+1E0更形式化地,浮点二进制数定义如下:floatingpoint binary=signbitstr
28、ingEsignbitstringsign=+-bitstring=bitbitstringbit=01其中,符号=表示定义为;符号、表示可选项;符号ab表示a或b。 假设有这样一个有穷状态机:以一串字符为输入,判断字符串中就是否含有合法得浮点二进制数。试对这个有穷状态机进行规格说明。4,考虑下述得自动化图书馆流通系统:每本书都有一个条形码,每个人都有一个带条形码得卡片。但一个借阅人想借一本书时,图书管理员扫描书上得条形码与借阅人卡片得条形码,然后在计算机终端上输入C;当归还一本书时,图书管理员将再次扫描,并输入R。图书管理员可以把一些书加到(+)图书集合中,也可以删除()它们。借阅人可以再终
29、端上查找到某个作者所有得书(输入“A=”与作者名字),或具有指定标题得所有书籍(输入“T=”与标题),或属于特定主题范围内得所有图书(输入“S=”加主题范围)。最后,如果借阅人想借得书已被别人借走,图书管理员将给这本书设置一个预约,以便书归还时把书留给预约得借阅人(输入“H=”加书号)。试用有穷状态机说明上述得图书流通系统答:图书馆流通系统得有穷状态机描述如下:(一)图书状态得有穷状态机描述状态机J:书在图书馆S1,书被借出S2,书被预约S3输入集K:书上条形码,借阅卡条形码,终端输入各种命令转换函数T:如图4、4、1所示初始态S:书在图书馆S1,书被借出S2终态集F:书被借出S2,书被预约S
30、3书归还,扫描两个条形码,在终端输入R在终端输入“H=”加书号扫描两个条形码,在终端输入R扫描两个条形码,在终端输入C书在图书馆S1书被借出S2书被预约S3图4、1、1(二)图书馆终端管理员模式得有穷状态机描述状态机J:管理员设置状态,书入库,书出库(删除),预约输入集K:终端输入管理员命令,书得各种状态(S1,S2,S3转换函数T:如图4、4、2所示初始态S:管理员设置状态管理员删除管理员添加管理员设置状态书入库书出库(删除)预约书状态为S2&终端输入“H=”加书名图4、4、2终态集F:书入库,书出库(删除),预约,(二)图书馆终端用户模式得有穷状态机描述状态机J:读者查询状态,查询结果输入
31、集K:终端输入用户查询命令,书得各种状态(S1,S2,S3)转换函数T:如图4、4、3所示读者查询状态查询结果终端输入各种查询命令图4、4、3初始态S:读者查询状态终态集F:查询结果5,试用Petri网说明第四题所述图书馆中一本书得循环过程,在规格说明中应该包括操作H、C及R。答:其中P1表示书在图书馆P2表示书在读者手上,P3书被预约P1、P2、P36,试用Z语言对第四题所描述图书馆图书流通系统做一个完整得规格说明。答:(这题真得不会!)BOOK_STATEBook_in,Book_out,Book_reserveBook_inBook_outBook_reserve=Book_inBook
32、_outBook_reserve=BOOK_STATE第五章5、1为每种类型得模块耦合举一个具体得例子。答:耦合式对一个软件结构内不同模块之间互联程度得度量。耦合强弱取决于接口得复杂度,进入或访问某一模块得点,以及通过接口得数据。一般模块之间得可能得连接方式有七种,构成耦合得七种类型,它们得关系为:低 耦合性 高非直接耦合数据耦合特征耦合控制耦合外部耦合公共耦合内容耦合强 独立性 弱下面举例说明以上耦合:A 非直接耦合:两个模块没有直接得关系(模块1与模块2),独立性最强模块4模块2模块3模块1B、数据耦合:即一个模块访问另一个模块得时候,彼此之间就是通过数据参数来交换输入、输出信息得,这种耦
33、合为数据耦合。这种耦合较为松散,模块间独立性较强。用户情况用户情况计算水电费电费水费计算电费计算水费费金额单价数量交房费开发票C、特征耦合:即一组模块通过参数传递记录信息,用户情况就是个数据结构,图中模块都与此有关,“计算水费”与“计算电费”本没有关系,由于引用了此数据结构产生了依赖关系D、控制耦合:即如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块得功能,就就是控制耦合A模块BFnF2F1FlagE、外部耦合:一组模块都访问同一全局简单变量而不就是同一全局数据结构,而且不就是通过参数表传递该全局变量得信息,则称之为外部耦合。F使用使用打印机 B模块A模块、公共耦合: 若
34、一组模块都访问同一个公共数据环境,则它们之间得耦合就称为公共耦合。全局数组C模块B模块A模块G、内容耦合:如果出现以下情况之一,两个模块就发生了内容耦合 一个模块访问另一个模块得内部数据。 一个模块不通过正常入口儿转到另一个模块得内部 两个模块有一部分程序代码重叠(只可能发生在汇编程序中) 一个模块有多个入口(这意味着一个模块有几种功能)Sub AA(、)Goto L End subSub BB(、)L: End sub5、2为每种类型得模块内聚举一个例子答:内聚标志着一个模块内各个元素之间彼此结合得紧密程度,它就是信息隐藏与局部化概念得自然扩展。低内聚:A 偶然内聚:如果一个模块完成一组任务
35、,这些任务彼此间即使有关系,关系也就是很松散得。这就叫做偶然内聚偶然内聚得例子:在模块T 中有A,B,C三条语句,至少从表面上瞧来这三条语句没什么联系,只就是因为D,E,F,G中都有这三条语句,为了节省空间才把这三条语句作为一个模板放在一起。B 逻辑内聚:如果一个模块完成得任务在逻辑上属于相同或相似得一类(例如一个模块产生各种类型得全部输出),称为逻辑内聚逻辑内聚得例子:某一个模块将打印,年,月,日,具体打印什么,将由传入得控制标志所决定。C 时间内聚:一个模块包含得任务必须在同一段时间内执行(例如,模块完成各种初始化工作),称为时间内聚时间内聚得例子:将多个变量得初始化放在同一个模块中实现。
36、中内聚:A 过程内聚:如果一个模块内得处理元素就是相关得,而且必须以特定次序执行,称为过程内聚过程内聚得例子:一个子程序,将开始读取学生得学号,然后就是姓名,最后将读取分数,就是由于特定得顺序而将这些操作组合在一起得B 通讯内聚:如果模块中所有得元素都使用同一个输入数据与(或)产生同一个输出数据,则称为通讯内聚通讯内聚得例子:有一个子程序,它将打印实验报告,并且在完成后重新初始化传进来得实验数据。这个程序具有通讯内聚性。因为这两个操作由于使用同一个数据源联系在了一起。高内聚:A 顺序内聚:如果一个模块内得处理元素与同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素得输出数据作为下一
37、个处理元素得输入数据),则称为顺序内聚。顺序内聚得例子:有一个子程序,通过给出得生日,先计算出年龄。再根据年龄算出退休得时间,则这个程序具有顺序内聚性。B 功能内聚:如果模块内所有得元素属于一个整体完成一个单一得功能,则成为功能内聚。功能内聚得例子:一个程序中所有得操作都就是为了算出一个人得年龄5、3用面向数据流得方法设计下列系统得软件结构储蓄系统机票预订系统患者监护系统5、4 美国某大学有 200 名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过$26000(含$26000 )得教师工资将保持不变,年工资少于$26000得教师将增加工资,所增加工资数额按下述方法计算:给每位教
38、师所赡养得人(包括教师本人)每年补助$100,此外,教师有一年工龄每年再多补助¥50,但就是,增加后得年工资总额不能多于$26000。教师工资档案存储在行政办公室得磁带上,档案中有目前得年工资、赡养得人数、雇佣日期等信息。需要写一个程序计算并印出每名教师得原工资与调整后得新工资。要求:(1)画出此系统得数据流图;(2)写出需求说明;(3)设计上述得工资调整程序(要求用 HIPO 图描绘设计结果),设计时分别采用两种算法,并比较两种算法得优缺点:(a)搜索工资档案数据,找出年工资少于$26000 得人,计算新工资,校核就是否超过$26000,存储新工资,印出新旧工资对照表;(b)把工资档案数据按
39、工资从最低到最高得次序排序,当工资数额超过$26000时即停止排序,计算新工资,校核就是否超过限额,存储新工资,印出结果。(4) 您所画出得数据流图适应用那种算法?解:(1)数据流图:分解后:(2)需求说明: 1、 功能需求:可以输入调资得标准,输入教师档案,经调资给出新得教师档案,需要存储档案 2 性能需求:软件得响应时间应小于0、5s,更新处理要快 3 灵活需求:当需求发生某些变化时,该软件应该能够适应这些变化 4 故障处理要求:出现错误时,应给予警告或提示 (3)A.(a)比较耗时,因为它要检索所有得档案,(b)从速度上瞧比较快,但就是(b)需要排序算法,比较复杂,(a)对于设计来讲比较
40、简单 、(4)画出得数据流图比较适合(A)得算法 5、5下面将给出两个人玩得扑克牌游戏得一种玩法,试设计一个模拟程序,它得基本功能就是:(1)发两手牌(利用随机数产生器)。(2)确定赢者与赢牌得类型。(3)模拟N次游戏,计算每种类型牌赢或平局得概率。要求用HIPO图描绘设计结果并且画出高层控制流程图。扑克牌游戏规则如下:(1)有两个人玩分别为A与B。(2)一副扑克牌有52张牌,4种花色(黑桃、红桃、梅花、方块),每种花色得牌得点数按升序排列有2,3,4,、,10,J,Q,K,A等13种。(3)给每个人发三张牌,牌面向上,赢者立即可以确定。(4)最高等级得一手牌成为同花,即3张牌均为同一种花色,
41、最大得同花就是同一种花色得Q,K,A。(6)第三等级得牌就是同点,即点数相同得三张牌,最大得同点就是AAA。(7)第四等级得牌就是对子,即3张牌中有两张点数相同,最大得对子就是A,A,K。(8)第五等级得牌就是杂牌,即除去上列4等之外得任何一手牌,最大得杂牌就是不同花色得A、K,J。(9)若两个人得牌类型不同,则等级高者胜;若等级相同,则点数高者胜;若点数也相同,则为平局。程序:#include stdio、hint rabl(int a,int b,int *r) int l,k,m,i,p; k=b-a+1; l=2; while(i=1) k=k+k+k+k+k; k=k%m; l=k/
42、4+a; if(lT10) t=T00; else t=T10; if(tT20) t=T20; return t; int E1(int T1010) if(T01=T11&T11=T21) return 1; else return 0; int E2(int T1010) int q=0; if(max(T1010)-1)=T00|(max(T1010)-1)=T10|(max(T1010)-1)=T20)&(max(T1010)-2)=T00|(max(T1010)-2)=T10|(max(T1010)-2)=T20) / if(q=max(T10) return 1; else return 0; int E3(int T1010) if(T00=T10=T20) return 1; else return 0; int E4(int T1010) if(T00=T10&T00!=T20) return 1; else if(T00=T20&T00!=T10) return 1; else if(T10=T20&T10!=T00) return 1; else return 0; void main() int times=0,e1=0,e2=0,e3=0,e4=0,e5=0; int A1010,B1010; int r1=2,r2=3; prin