《软件工程》第一章软件工程学概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章软件工程学概述
1.1 软件危机
1.1.1 软件的定义
——定义:软件=“完成特定功能的程序+数据结构+文档”
——特征:(3个)软件是开发的,而不是制造的;软件不磨损,但退化;自定义。
——发展问题
1.1.2 软件危机的表现
——定义:在计算机软件的开发和维护过程中所遇到的一系列严重的问题。
——表现:(6个)
(1)对软件开发成本和进度的估计常常很不准确。
(2)软件产品质量较差,可靠性低。
(3)用户对开发出来的软件产品不满意。
(4)软件常常是不可维护的。
(5)软件产品缺少应有的文档资料。
(6)软件产品的供不应求。
1.1.3 软件危机的原因
——客观原因
——主观原因
1.2 软件工程
1.2.1 软件工程的概念
——定义:指导软件开发与维护的工程科学。采用工程的概念、原理、技术和方法来开发和维护软件,综合运用正确的管理技术和最好的技术方法,以经济
地开发出高质量的软件并有效维护它。
IEEE的定义:①软件工程是把系统的、规范的、可度量的途径应用于软件
开发、运行和维护过程,也就是把工程应用于软件;②对这些途径加以研究。
1.2.2 软件工程的基本原理(7个)
——(1)用分阶段的生命周期计划严格管理
(2)坚持进行阶段评审
(3)实行严格的产品控制
(4)采用现代程序设计技术
(5)结果可以清楚地审查
(6)开发小组成员少而精
(7)承认不断改进软件工程实践的必要性
1.2.3 软件工程方法学:3个要素(方法、工具和过程)
——传统方法学:结构化技术,软件生命周期
——面向对象方法学:类+对象+继承+消息,软件开发过程更接近人类认知模式
1.3 软件生命周期
1.3.1 软件生命周期的概念
——定义:一个软件从定义、开发、使用和维护,直至最终被废弃,要经历的漫长的时期称为软件生命周期。
——构成:3个时期,8个阶段
软件定义:问题定义,可行性研究,需求分析
软件开发:总体设计,详细设计,编码和单元测试,综合测试;
运行维护:软件维护
1.3.2 各阶段的基本任务(8个阶段)
——问题定义:需要解决的问题是什么?书面报告
——可行性研究:确定软件系统是否值得去解《可行性研究报告》
——需求分析:解决这些问题需要系统做什么?《软件需求规格说明书》
——总体设计:应该怎样实现目标系统?《概要设计说明书》
——详细设计:如何具体地实现这个系统?
——编码和单元:写代码,测试每个模块!
——测试、综合测试:通过各类测试和调试来完善软件《测试计划/方案》
——软件维护:通过各种必须的维护活动使系统持久地满足用户的需要。(改正性维护,适应性维护,完善性维护,预防性维护)
1.3.3 软件生命周期的模型
——瀑布模型:广泛采用,顺序严格,文档驱动,执行困难
——原型模型:快速开发原型后,评价反馈、再细化改进,忽略整体设计,
——增量模型:渐进开发,逐步完善,第一个增量很关键
——喷泉模型:面向对象软件开发过程迭代和无缝
——螺旋模型:有效降低风险的渐进式开发模型
第二章可行性研究
2.1 可行性研究的目标与任务
2.1.1 目标:用最小的代价和尽可能短的时间判断问题是否值得去解?
2.1.1 任务:
——技术可行性
——经济可行性
——操作可行性
——社会可行性
2.2 可行性研究过程
(1)复查系统规模与目标
(2)研究目前正在使用的系统
(3)导出新系统的高层逻辑模型
(4)导出与评价各种方案
(5)推荐行动方针
(6)草拟开发计划
(7)书写文档提交审查——《可行性研究报告》
2.3 可行性研究工具
——
系统流程图:表达数据在系统各部件之间流动的情况
程序流程图:对数据进行加工处理的控制过程
2.4 成本/效益分析:从经济角度评价开发一个新的软件工程项目是否可行
——成本估计
……代码行技术
……任务分解技术
……自动估计成本技术
——效益分析:有形效益,无形效益
——常用的效益度量方法
……货币的时间价值
……投资回收期
……纯收入
第三章需求分析
3.1 需求分析的任务和步骤
——需求分析的任务
……确定对系统的综合要求
……分析系统的数据要求
……建立软件的逻辑模型
——确定对系统的综合要求
……功能性需求
……非功能性需求:可用性,可靠性……
——分析系统的数据要求
……数据字典——定义数据
……层次方框图——定义数据结构
——建立软件的逻辑模型:数据流图、数据字典、实体-联系图、主要算法
——编写软件需求规格说明书
——需求分析评审
3.2 需求获取的常用方法(5个)
——访谈
——问卷调查
——观察用户工作流程
——建立联合分析小组
——快速原型法
3.3 需求分析的方法(4个)
——功能分解法:软件需求当做一棵倒置的功能树
——结构化开发方法:结构化分析、结构化设计和结构化程序设计
——信息建模方法:实体-联系图
——面向对象的分析
3.4 结构化分析技术
——思路:基于数据流图自顶向下逐层分解