- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件工程导论 张海藩 编著 参考文献 《人月神话》是软件行业中的一部里程碑式的名著 《软件工程思想》林锐 总 目 录 第1章 软件工程学概述 第2章 可行性研究 第3章 需求分析 第4章 形式化说明技术 第5章 总体设计 第6章 详细设计 第7章 实现 总 目 录 第8章 维护 第9章 面向对象方法学引论 第10章 面向对象分析 第11章 面向对象设计 第12章 面向对象实现 第13章 软件项目管理 第1章 软件工程学概述 软件危机 软件工程 软件生命周期 软件过程 小结 1.1 软件危机 一、软件危机 软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 主要是两个方面的问题:如何开发软件──怎样满足对软件日益增长的需求如何维护软件──数量不断膨胀的已有软件 二、产生软件危机的原因: 1. 软件本身的特点: 不同于硬件 不同于一般程序:规模庞大 2. 软件人员的主观原因: 开发与维护的方法不正确。早期软件开发个体化。至今,忽视软件需求分析的重要性,轻视维护。(切记:要充分、完整、准确地认识用户的要求,不要匆忙着手编写程序。) 三、解决软件危机的途径: 正确认识软件: 软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。 程序是按事先设计的功能和性能要求编写的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。 1.推广使用在实践中总结出来的开发软件的成功技术和方法 2.研究、探索更好更有效的技术和方法 3.开发和使用更好的软件工具 4.有必要的组织管理措施 1.2 软件工程 软件工程的本质特性 关注大型软件的构造 中心课题是控制复杂性 软件经常变化 开发软件的效率非常重要 和谐地合作是开发软件的关键 软件必须有效地支持它的用户 一种文化背景的人替另一种文化背景的人开发产品 一、传统方法学 生命周期方法学或结构化范型 采用结构化技术(结构化分析、设计和实现) 把软件生命周期划分成若干阶段:每一阶段结束前都必须进行技术审查和管理复审,试图以每一阶段的正确性和完整性来保证最终产品的质量。 面向行为或面向数据,把数据和操作人为分离,增加软件开发与维护的难度。 应用广泛 二. 面向对象方法学 数据和数据的操作是被封闭在一个个称为“对象“的统一体中 把所有对象都划分成类。类是对具有相同数据和相同操作的一组相似对象的定义。 继承:下层派生类自动拥有上层基类中定义的数据和操作 对象之间则是通过”消息”(message”)进行相互联系的,对象是数据处理的主体 采用该方法可以大大提高软件的可重用性,降低软件的调试、维护难度,而且特别适合于需要多人合作的大型软件的开发。 三. 基于组件的软件工程方法学 ? 基于组件的软件方法学是以接口为中心、面向行为的、基于体系结构设计的,它把应用逻辑和实现分离,提供标准接口和框架,使软件开发变成组件的组合. 在基于组件的软件设计方法学方面,近期的研究主要包括:组件模型、 组件组合、 组件的选择、 工具支持。组件组合是基于组件的开发方法的重点. 应用基于组件的软件设计方法学可以更有效地支持复用技术,改善软件质量,减少软件设计和开发的工作量,降低软件开发的费用和提高生产力。 1.3 软件生命周期 各阶段的基本任务 一、软件定义 问题定义:要解决的问题是什么? 系统分析员应写出关于问题性质、工程目标和规模的书面 报告,经过和用户讨论得出一份双方都满意的文档。 可行性研究:有可行的解决办法吗? 系统分析员要进行一次大大压缩和简化了的系统分析和设 计。导出高层逻辑模型(用数据流图表示),确定工程规 模和目标,准确估计系统的成本和效益。 需求分析:为解决问题,目标系统必须做什么? 系统分析员和用户密切配合,充分交流,得出经用户确认的系统逻辑模型(数据流图、数据字典、算法描述)。 二、软件开发 总体设计:概括地说,应如何解决该问题? 设计软件的结构(用层次图或结构图描述) ,即确定 程序由哪些模块组成以及模块间的关系。 详细设计:应怎样具体实现这个系统? 详细设计每个模块,确定实现模块功能所需要的算法和数据结构。 编码和单元测试:编写代码,测试模块 程序员选取一种适当的高级语言(或汇编语言)把模块的过程性描述翻译为源程序。仔细测试编写出的每一个模块。 综合测试:通过各类型测试,使软件达到要求 最基本的测试是集成测试和验收测试方法。 用正式文档将测试计划、详细测试方案以及实际测
文档评论(0)