第一章 软件工程概述1.1软件危机1.1.1软件危机的介绍1)软件危机:在计算机软件的开发和维护过程中所遇到的一系列严重问题。2)软件危机的两个主要问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。3)软件危机的典型表现:(1)对软件开发成本和进度的估计常常很不准确。(2)用户对“已完成的”软件系统不满意的现象经常发生。(3)软件产品的质量往往靠不住。(4)软件常常是不可维护的。(5)软件通常没有适当的文档资料。(6)软件成本在计算机系统总成本中所占的比例逐年上升。(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入趋势。1.1.2产生软件危机的原因软件本身特点:1)缺乏可见性,在运行之前往往难以衡量,质量也难以评价2)不会因为长期使用而用坏,软件维护通常意味着修正或修改原来的设计,较难维护。3)规模庞大,需分工合作,如何保证每个人的工作合在一起是极端复杂的问题。软件开发与维护的方法不正确产生软件危机的原因可归结为两个重要的方面:软件生产本身存在的复杂性;软件开发所使用的方法和技术。软件生命周期:二个软件从定义、开发、使用和维护直到最早被废弃。软件产品必须由一个完整的配置组成(程序、文档、数据)1.1.3消除软件危机的途径1)正确认识计算机软件2)认识到软件开发是一个协同配合、共同完成的工程项目并吸取经验。3)推广使用已总结的开发软件成功的技术和方法4)开发使用更好的软件工具
第一章 软件工程概述 1.1 软件危机 1.1.1 软件危机的介绍 1)软件危机:在计算机软件的开发和维护过程中所遇到的一系列严重问题。 2)软件危机的两个主要问题:如何开发软件,以满足对软件日益增长的需求; 如何维护数量不断膨胀的已有软件。 3)软件危机的典型表现: (1) 对软件开发成本和进度的估计常常很不准确。 (2) 用户对“已完成的”软件系统不满意的现象经常发生。 (3) 软件产品的质量往往靠不住。 (4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。 (6) 软件成本在计算机系统总成本中所占的比例逐年上升。 (7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入趋 势。 1.1.2 产生软件危机的原因 软件本身特点: 1) 缺乏可见性,在运行之前往往难以衡量,质量也难以评价 2) 不会因为长期使用而用坏,软件维护通常意味着修正或修改原来的设计,较 难维护。 3) 规模庞大,需分工合作,如何保证每个人的工作合在一起是极端复杂的问题。 软件开发与维护的方法不正确 产生软件危机的原因可归结为两个重要的方面:软件生产本身存在的复杂性; 软件开发所使用的方法和技术。 软件生命周期:一个软件从定义、开发、使用和维护直到最早被废弃。 软件产品必须由一个完整的配置组成(程序、文档、数据) 1.1.3 消除软件危机的途径 1) 正确认识计算机软件 2) 认识到软件开发是一个协同配合、共同完成的工程项目并吸取经验。 3) 推广使用已总结的开发软件成功的技术和方法 4) 开发使用更好的软件工具
1.2软件工程的介绍软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的软件并有效地维护它,这就是软件工程。本质特性:1)软件工程关注于大型程序的构造2)软件工程的中心课题是控制复杂性3)软件经常变化4)开发软件的效率非常重要5)和谐地合作是开发软件的关键6)软件必须有效地支持它的用户7)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。1.3软件工程的基本原理1)用分阶段的生命周期计划严格管理2)坚持进行阶段评审3)实行严格的产品控制4)采用现代程序设计技术5)结果应能清楚地审查6)开发小组的人员应该少而精7)承认不断改进软件工程实践的必要性1.4软件工程方法学在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。软件工程方法学,三要素:方法、工具和过程。1)传统方法学2)面向对象方法学1.4.1软件生命周期:定义、开发、维护(1)问题定义(2)可行性研究(3)需求分析(4)总体设计(5)详细设计(6)编码和单元测试(7)综合测试(8)软件维护
1.2 软件工程的介绍 软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原 理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和 当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的 软件并有效地维护它,这就是软件工程。 本质特性: 1) 软件工程关注于大型程序的构造 2) 软件工程的中心课题是控制复杂性 3) 软件经常变化 4) 开发软件的效率非常重要 5) 和谐地合作是开发软件的关键 6) 软件必须有效地支持它的用户 7) 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的 人创造产品。 1.3 软件工程的基本原理 1) 用分阶段的生命周期计划严格管理 2) 坚持进行阶段评审 3) 实行严格的产品控制 4) 采用现代程序设计技术 5) 结果应能清楚地审查 6) 开发小组的人员应该少而精 7) 承认不断改进软件工程实践的必要性 1.4 软件工程方法学 在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。 软件工程方法学,三要素:方法、工具和过程。 1) 传统方法学 2) 面向对象方法学 1.4.1 软件生命周期:定义、开发、维护 (1) 问题定义 (2) 可行性研究 (3) 需求分析 (4) 总体设计 (5) 详细设计 (6) 编码和单元测试 (7) 综合测试 (8) 软件维护
1.4.2软件过程为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。通常使用生命周期模型简洁的描述软件过程。(1)瀑布模型1)各个阶段的顺序性和依赖性;2)划分逻辑设计与物理设计,尽可能推迟程序的物理实现:3)每个阶段必须完成规定的文档,对其中问题通过复审及早发现,及早解决。(2)快速还原模型(3)增量模型从部分需求出发,先建立一个不完全的系统,通过测试运行该系统取得经验和信息反馈,加深对软件需求的理解,进一步使系统扩充和完善。如此反复,直至软件人员和用户对所设计完成的软件系统满意为止。在渐增型开发下的软件是随软件开发的过程而逐渐形成的。渐增型开发方法适合于知识型软件的开发,设计系统时对用户需求的认识开始不是很清楚的,需要在开发过程中不断认识、不断获得新的知识去丰富和完善系统。多数研究性质的试验软件,一般采用此方法。(4)螺旋模型(5)喷泉模型(6)Rational统一过程(7)敏捷过程与极限编程(8)微软过程
1.4.2 软件过程 为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步 骤。通常使用生命周期模型简洁的描述软件过程。 (1) 瀑布模型 1)各个阶段的顺序性和依赖性; 2)划分逻辑设计与物理设计,尽可能推迟程序的物理实现; 3)每个阶段必须完成规定的文档,对其中问题通过复审及早发现,及早解决。 (2) 快速还原模型 (3) 增量模型 从部分需求出发,先建立一个不完全的系统,通过测试运行该系统取得经验和 信息反馈,加深对软件需求的理解,进一步使系统扩充和完善。如此反复,直至软 件人员和用户对所设计完成的软件系统满意为止。在渐增型开发下的软件是随软件 开发的过程而逐渐形成的。 渐增型开发方法适合于知识型软件的开发,设计系统时对用户需求的认识开始 不是很清楚的,需要在开发过程中不断认识、不断获得新的知识去丰富和完善系统。 多数研究性质的试验软件,一般采用此方法。 (4) 螺旋模型 (5) 喷泉模型 (6) Rational 统一过程 (7) 敏捷过程与极限编程 (8) 微软过程
第二章 可行性研究2.1可行性研究的目的用最小的代价在尽可能短的时间内确定问题是否能够解决。问题定义的任务:将用户提出的要求具体化、定量化:确定研制系统的范围,明确研制的边界。问题定义阶段的工作:1)通过调查研究,了解系统需求;2)确定系统的功能需求、性能需求、可靠性需求、安全及保密性、资源、开发费用及开发进度等的需求;3)问题定义阶段的产品-系统目标与范围说明书。2.1.1可行性研究的任务(1)技术可行性(2)经济可行性(3)操作可行性2.1.2可行性研究的过程(1)复查系统规模和目标(2)研究目前正在使用的系统(3)导出新系统的高层逻辑模型(4)进一步定义问题(5)导出和评价供选择的解法(6)推荐行动方针(7)草拟开发计划(8)书写文档提交审查2.2系统流程图系统流程图是描述物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里的每个部件(程序、文件、数据库、表格、人工过程等)。系统流程图表达的是部件的信息流程,而不表示对信息进行加工处理的控制过程
第二章 可行性研究 2.1 可行性研究的目的 用最小的代价在尽可能短的时间内确定问题是否能够解决。问题定义的任务:将用户提 出的要求具体化、定量化;确定研制系统的范围,明确研制的边界。 问题定义阶段的工作: 1) 通过调查研究,了解系统需求; 2) 确定系统的功能需求、性能需求、可靠性需求、安全及保密性、资源、开发费用及开发 进度等的需求; 3) 问题定义阶段的产品-系统目标与范围说明书。 2.1.1 可行性研究的任务 (1) 技术可行性 (2) 经济可行性 (3) 操作可行性 2.1.2 可行性研究的过程 (1) 复查系统规模和目标 (2) 研究目前正在使用的系统 (3) 导出新系统的高层逻辑模型 (4) 进一步定义问题 (5) 导出和评价供选择的解法 (6) 推荐行动方针 (7) 草拟开发计划 (8) 书写文档提交审查 2.2 系统流程图 系统流程图是描述物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式 描绘系统里的每个部件(程序、文件、数据库、表格、人工过程等)。系统流程图表达 的是部件的信息流程,而不表示对信息进行加工处理的控制过程
2.3数据流图DFD是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。与程序流程图不同,DFD不表示程序的控制结构,只描述数据的流动。DFD分成多层(子图、父图概念)表示,从而逐步展开数据流和功能的细节。绘制数据流图步骤(1)确定所开发的系统的外部项(外部实体),即系统的数据来源和去处。(2)确定整个系统输出数据流和输入数据流,把系统作为一个加工环节,画出关联图。(3)确定系统的主要信息处理功能,按此将整个系统分解成儿个加工环节(子系统)确定每个加工的输出与输入数据流以及与这些加工有关的数据存储。(4)根据自顶向下,逐层分解的原则,对上层图中全部或部分加工环节进行分解。重复步骤(4),直到逐层分解结束。(5)(6)对图进行检查和合理布局,主要检查分解是否恰当、彻底,DFD中各层是否有遗漏、重复、冲突之处,各层DFD及同层DFD之间关系是否争取及命名、编号是否确切、合理等,对错误与不当之处进行修改。(7)禾和用户进行交流,在用户完全理解数据图的内容的基础上征求用户的意见。注意事项:(1)不要把控制流作为数据流(2)不要标出激发条件(3)数据流必须要么从某个加工流出、要么流入某个加工,而不能直接从外部项流向数据存储等等。2.4数据字典数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。(1)数据字典的内容数据流、数据流分量(数据元素)、数据存储、处理数据字典要对数据流图中出现的所有名字(数据流,加工,文件)进行定义。数据字典的条目由三大类组成,分别是:数据流条目、数据项条目、文件条目、加工条目(小说明)。(2)定义数据的方法+:和,连接两个分量=:等价于【]:或,用隔开分量【:重复花括号内的分量0(字母或数字)7表示8位字符串():可选,即可有可无(3)数据字典的用途(4)数据字典的实现
2.3 数据流图 DFD 是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的 变换。与程序流程图不同,DFD 不表示程序的控制结构,只描述数据的流动。DFD 分成 多层(子图、父图概念)表示, 从而逐步展开数据流和功能的细节。 绘制数据流图步骤 (1)确定所开发的系统的外部项(外部实体),即系统的数据来源和去处。 (2)确定整个系统输出数据流和输入数据流,把系统作为一个加工环节,画出关联图。 (3)确定系统的主要信息处理功能,按此将整个系统分解成几个加工环节(子系统) 确定每个加工的输出与输入数据流以及与这些加工有关的数据存储。 (4) 根据自顶向下,逐层分解的原则,对上层图中全部或部分加工环节进行分解。 (5) 重复步骤(4),直到逐层分解结束。 (6) 对图进行检查和合理布局,主要检查分解是否恰当、彻底,DFD 中各层是否有 遗漏、重复、冲突之处,各层 DFD 及同层 DFD 之间关系是否争取及命名、编号 是否确切、合理等,对错误与不当之处进行修改。 (7) 和用户进行交流,在用户完全理解数据图的内容的基础上征求用户的意见。 注意事项: (1) 不要把控制流作为数据流 (2) 不要标出激发条件 (3) 数据流必须要么从某个加工流出、要么流入某个加工,而不能直接从外部项流 向数据存储等等。 2.4 数据字典 数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的 集合。 (1) 数据字典的内容 数据流、数据流分量(数据元素)、数据存储、处理 数据字典要对数据流图中出现的所有名字(数据流,加工,文件)进行定义。 数据字典的条目由三大类组成,分别是:数据流条目、数据项条目、文件条目、 加工条目(小说明)。 (2) 定义数据的方法 + :和,连接两个分量 = :等价于 [ ]:或,用|隔开分量 { }:重复花括号内的分量 0{字母或数字}7 表示 8 位字符串 ():可选,即可有可无 (3) 数据字典的用途 (4) 数据字典的实现