2019/8/81软件工程软件工程刘迎春软件工程2019/8/82第四章概要设计问题定义可行性研究可行否?否是需求分析终止项目概要设计计划时期开发时期主要内容4.1任务4.2软件结构设计及优化4.3图形工具4.4结构化设计(方法)4.5数据结构设计2019/8/834.1概要设计的任务【起点】需求分析阶段得出的DFD图,数据字典【任务】从需求分析阶段的工作结果出发,进行软件结构设计与数据设计,编写《概要设计说明书》。软件结构设计(是概要设计阶段的主要工作)系统中每个程序由哪些模块组成以及这些模块间的关系数据设计将分析阶段创建的信息模型(数据字典)转换为实现系统所需要的数据结构2019/8/844.1概要设计的任务【方案选择】分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划通常至少选取低成本、中等成本及高成本的三种方案2019/8/854.2软件结构设计及优化【结构设计的任务】建立良好的模块功能结构确定模块、模块间的关系【主要内容】4.2.1模块和模块化4.2.2软件结构风格4.2.3耦合与内聚4.2.4好的软件设计特性2019/8/864.2.1模块和模块化【1、模块】数据说明、可执行语句等程序对象的集合。单独命名且可通过名字来访问如表单(Form、窗口)、过程、函数等。【基本属性】功能:描述该模块实现的功能;状态:该模块使用时的环境和条件;逻辑:描述模块内部怎么做;【内部特性、外部特性】内部特性是指完成其功能的程序代码和仅供该模块内部使用的数据外部特性是指模块名和参数表(输入参数、输出参数),以及对程序及整个系统造成的影响使用黑盒子的概念,站在较高的层次上进行思维,从而避免过早地陷入具体的条件逻辑、算法和过程步等实现细节2019/8/874.2.1模块和模块化【2、模块化】把系统划分成若干个模块,每个模块完成一个子功能,模块既独立且相互之间又有一定的联系,把他们组成一个有机的整体,完成指定的功能。高层模块隐蔽了细节,能够从整体上把握问题需要时,可以深入较低层次以了解进一步的细节模块化是软件结构设计的一个基本准则2019/8/88Netscape公司的故事1/3对于PC软件,有一个神话讲:设计不是很重要,因为市场是随着时间改变的。在这方面Netscape公司的倒闭是一个值得深思的故事。最初Illinois大学的NCSAMosaic小组开发了第一个广泛使用的浏览器。他们创建了Netscape公司,在1994年4月到12月之间发行了Netscape1.0,它可以在3个平台上运行,很快就成为了Windows、Unix和Mac上的占有统治地位的浏览器。Microsoft公司于1994年10月开始开发InternetExplorer1.0,并在1995年绑定在Windows95上。2019/8/89Netscape公司的故事2/3从1995年到1997年,在Netscape公司的快速发展期间,开发者努力工作来产生新的特点,而很少花时间进行设计。Microsoft公司意识到了需要建立可靠的设计,它使用共享组件重构Office套装,建立了NT操作系统,并花费了时间来重构IE3.0。拉近了与Netscape的差距。Netscape的开发在继续。通过Communicator4.0,已有120个开发者(从最初的10个)和3百万行代码。MichaelToy(开发经理)说道:“我们处于一个很坏的情形下……我们应该在一年前就停住绑定这些代码。这是死的……这就像被粗鲁地唤醒……我们为走得太快而付出了代价。”2019/8/810Netscape公司的故事3/31997年Netscape公司内部关于模块设计的争论Netscape用了2个月来重新设计浏览器,但是这还不够长。Mozzila5.0版本作为开源发布,但是这也毫无帮助:没有人想在类似意大利细面条似的代码上进行工作。最后,Microsoft赢得了浏览器的战争,AOL收购了Netscape。当然,这不是Microsoft浏览器战胜Netscape浏览器的全部故事。2019/8/811资本市场供应市场协同供应协同计划协同设计[供应链管理]协同服务协同销售[客户关系管理]协同市场投资者关系管理战略目标管理管理驾驶舱[企业绩效管理][财务管理]财务会计管理会计税务会计资金管理计划管理车间管理质量管理设备管理[人力资源管理]人事管理薪酬管理招聘培训绩效管理办公自动化[知识管理]信息门户内容管理采购管理[制造管理][物流管理]仓存管理销售管理分销管理采购管理消费市场知识市场例:金蝶K/3ERP系统的结构2019/8/812K/3模块配置行业应用配置政府财政信托管理证券管理银行管理金蝶K/3标准产品第三方产品接口工具集医药GSP房地产进出口医药GMP汽车DMS业务环境配置个性化业务需求设计按角色配置多语言配置应用集成配置业务流程配置成功企业流程快速复制柔性化流程设计灵活的管理控制方式2019/8/813选课管理考试报名毕业设计科研项目论文管理成绩管理排课管理信息维护成绩查询SQLSERVERInterbase教务WEB系统2019/8/814iBATIS.NET数据库访问类Mapper分页类Paginate选课管理SQLSERVERInterbase常用数据转换工具类Tools教师模版页Js.master管理员模版页Gly.master学生模版页Xs.master考试报名毕业设计科研项目论文管理成绩管理排课管理信息维护成绩查询相关页面分页类继承自Paginate其他类如,课程类,成绩类,账号2019/8/8154.2.2软件结构风格软件结构风格程序的模块结构,各个模块的组织情况一个模块和其它模块的独立程度是评价一个设计好坏的重要度量尺度。软件结构风格的总体要求——独立性高一个模块的功能不是同其它模块紧密地联系在一起。2019/8/8164.2.2软件结构风格【独立性高的优点】当一个模块的功能不是同其它模块紧密地联系在一起时,独立性较强,比较容易理解;独立性较强的模块修改时不会或者较小的影响其他模块。独立性较强的模块修改不容易受其他模块改变的影响。如何评价模块间联系的紧密程度?2019/8/8174.2.3耦合与内聚耦合模块之间的互相依赖的紧密程度的度量耦合越松散,模块之间的联系就越小内聚模块内部各个元素彼此结合的紧密程度的度量内聚越高,模块内部各成份之间的关联也就越强独立性强的模块应是高内聚、低耦合的模块2019/8/8181耦合:模块间联系的程度。(依赖于模块间接口的复杂性)非直接耦合数据耦合特征耦合控制耦合外部耦合公共耦合内容耦合1)非直接耦合:两模块间没有直接关系。主控模块2模块1模块4模块3例如:模块1和模块2,无直接联系。2019/8/8192)数据耦合:两模块间交换的是简单数据(输入、输出参数)计算应扣款计算水费计算电费用水量水费电费用电量2019/8/8203)特征耦合:模块间交换的是数据结构(输入、输出参数)计算应扣款计算总扣除房租水电总扣除房租水电=用水量+用电量+租房开始日期房租水电=用水量+用电量+租期2019/8/8214)控制耦合:传递的信息中有控制信息(中等耦合)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。2019/8/8225)外部耦合:一组模块都访问同一全局变量主控模块2模块1模块4模块3日期2019/8/8236)公共耦合:一组模块都访问同一全局数据结构主控模块2模块1模块4模块3数据结构、文件或数据库2019/8/824某个模块究竟用了哪几个数据?某个数据究竟被哪几个模块使用?使用公共数据区的任—模块如果出现BUG该BUG是否会是其他使用该数据区的模块造成的?该BUG可能会影响那些使用该数据区的模块?数据的名称、类型发生变化;要寻找哪些模块随之改变。外部、公共耦合带来的复杂性必须弄清修改影响的范围,不要轻率地进行修改2019/8/8257)内容耦合:(最高的耦合)...GOTOA..……..A:..…....1)一个模块直接调用另一个模块中的数据。2)一个模块直接转移到另一个模块中去。3)一个模块有多个入口。4)两个模块有一部分程序代码重叠。病态耦合关系!!MN2019/8/826非直接耦合数据耦合特征耦合控制耦合外部耦合公共耦合内容耦合低高结论:耦合是影响软件复杂程度的重要因素尽量使用数据耦合少用控制耦合限制外部和公共耦合不用病态的内容耦合。2019/8/827耦合练习下图中的程序由A、B、C、D、E5个模块组成,下表中描述了这些模块之间的接口,每—个接口有一个编号。此外,模块A、D和E都要引用一个专用数据区。那么A和E之间耦合关系是____(10)____。A.公共耦合B.控制耦合C.内容耦合D.无耦合编号参数返回值1数据项数据项2数据项数据项3功能码无4功能码列表5无列表ABDCE12345专用数据区A2019/8/8281)偶然内聚:模块内各组成成分在功能上是不相关。如:把几个模块都要执行的一组语句放到一个模块中。偶然的原因把他们放在一块偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚2内聚:模块内各成份间的紧密程度j++i,j,ki++k++2019/8/8292)逻辑内聚:通常由若干个逻辑功能相同或相似的成份组成;目的:省去程序中的重复部分如:计算全班学生的平均分和最高分2019/8/830读入分数平均/最高计算最高计算平均输出结果逻辑功能相同逻辑功能相同可能需要从模块外引入用作判断的开关量,形成控制耦合2019/8/8313)时间内聚:相同的时间执行的成分组合在一个模块内。如:对系统的初始化等一系列的工作。2019/8/8324)过程内聚:一个模块内部包含一组任务并必须以特定次序执行。(中等)读取顾客的姓名读取顾客的地址读取顾客的电话号码2019/8/8335)通信内聚:模块内使用了同一组输入数据,或产生同一组的输出结果。开领书单登记售书领书单售书登记表有效书单2019/8/8345)通信内聚:模块内使用了同一组输入数据,或产生同一组的输出结果。计算年龄输出年龄计算工资输出工资雇员生日2019/8/8355)通信内聚:模块内使用了同一组输入数据,或产生同一组的输出结果。新增2019/8/8362019/8/8376)顺序内聚:模块中各成份密切相关,一个组成部分的输出作为另一个组成部分的输入2019/8/8386)顺序内聚:模块中各成份密切相关,一个组成部分的输出作为另一个组成部分的输入计算年龄输出年龄计算工资输出工资雇员生日2019/8/8397)功能内聚:模块内部各成份结合在一起完成单一的功能。如:按雇员生日,计算年龄计算年龄输出年龄雇员生日2019/8/840结论:尽量采用功能内聚避免逻辑和耦然内聚。偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚高低一个模块一个功能是软件设计人员模块化设计的一条准则2019/8/841耦合与内聚的衡量内聚度高,耦合弱,标志着模块的独立性强;实践证明,内聚比耦合更重要,应该把更多注意力集中到提高模块的内聚度上来。2019/8/842360安全卫士360杀毒杀毒核心2019/8/843密码安全文件传输安全安全网络安全2019/8/844聊天记录漫游QQ会员管理?2019/8/845计08-2刘新QQ软件结构腾讯公司产品QQ(聊天工具)腾讯网(浏览器)拍拍网、财务通(网上购物)QQ农场QQ校友QQ空间好友买卖抢车位腾讯TT浏览器QQ浏览器5模仿人人网模仿人人好友买卖模仿人人抢车位模仿人人农场模仿人人网模仿淘宝2019/8/846QQ游戏(QQ对战平台仿浩方对战平台)穿越火线战地之王地下城与勇士QQ炫舞QQ堂QQ三国其他产品QQ工具栏QQ输入法QQ电脑管家QQ医生QQ旋风QQ影音模仿迅雷下载软件模仿搜狗拼音与360安全卫士类似模仿暴风影音模仿360电脑管家模