软件工程复习Day01
Apare_xzc
2020.8.3
软件的发展阶段
- 程序设计阶段:50-60年代
- 程序系统阶段:60-70年代
- 软件工程阶段:70年代以后
什么是软件?
软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据以及文档的完整集合。
程序是按事先设计的功能和性能要求执行的指令序列
数据是使程序能正常操纵信息的数据结构
文档是与程序开发,维护和使用有关的图文材料
软件的特点
- 软件是一种逻辑实体,而不是一种具体的物理实体。因而它具有抽象性
- 软件的生产与硬件不同,在它的开发过程中没有明显的制造过程。
- 在软件的运行和使用期间,没有硬件那样机械磨损,老化问题
- 软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性
- 软件的开发至今尚未完全摆脱手工艺的开发方式
- 软件本身是复杂的:实际问题的复杂性,程序逻辑结构的复杂性
- 软件的成本相当昂贵
- 相当多的软件工作涉及到社会因素
软件危机
定义:
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
表现:
- 开发成本和进度的估计常常很不准确
- 用户对“已完成的”软件不满意,“闭门造车”
- 软件质量不可靠
- 软件常常是不可维护的
- 软件成本的比例逐年上升
- 软件产品“供不应求”
产生的原因
客观原因:软件的特点
主观原因:软件的开发和维护用了不正确的方法
消除软件危机的途径
- 消除"软件就是程序"的错误概念。软件必须由一个完整的配置组成(程序,数据,文档)(概念)
- 软件开发不是某个个体劳动的神秘技巧,而应该是一种组织良好,管理严密,各类人员协同配合,共同完成的工程项目。(管理)
- 成功的软件开发技术与方法(方法)
- 软件工具和软件工具开发环境。(工具)
软件工程的定义
软件微机 -> 根源 -> 解决途径 -> 软件工程
定义:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件。把经过时间考验而证明正确的管理技术和当前能够得到最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
软件工程的目标
研制开发与生产出具有良好软件质量和费用合算的产品。
- 采用工程化方法和途径来开发和维护软件
- 应该开发和使用良好的软件工具
- 采取必要的管理措施
软件工程的基本原理(B.W.Boehm)
- 用分阶段的生命周期严格管理
- 坚持进行阶段评审,错误出现的时间:编码之前。错误发现得越晚,代价就越大。
- 实施严格的产品控制(基线配置,变动控制)
- 采用现代程序设计技术(OOP)
- 结果应该能清楚地审查
- 开发小组的人员应该少而精
- 承认不断改进软件工程实践的必要性
软件工程研究的基本内容
软件工程分为:理论与结构、方法、工具与环境、管理与规范等。
理论与结构包括:
- 程序正确性证明理论
- 软件可靠性理论
- 软件成本估算模型
- 软件开发模型
- 模块划分原理
软件开发技术包括:软件开发方法学,软件工具,软件开发环境
软件工程管理包括:软件工程管理和软件经济管理
软件生存期 Life Cycle
软件生存期的六个步骤:
- 制定计划
- 需求分析
- 设计
- 程序编码
- 测试
- 运行维护
制定计划:
- 确定要开发软件系统的总目标
- 给出功能、性能、可靠性以及接口等方面的要求
- 完成该软件任务的可行性研究
- 估计可利用的资源 (硬件,软件,人力等)、成本、效益、开发进度
- 制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查
需求分析和定义
- 对用户提出的要求进行分析并给出详细的定义
- 编写软件需求说明书或系统功能说明书及初步的系统用户手册
- 提交管理机构评审
软件设计
- 概要设计 — 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应
- 详细设计 — 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础
编写设计说明书,提交评审。
程序编写
- 把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”
- 写出的程序应当是结构良好、清晰易读的,且与设计相一致的
软件测试
- 单元测试,查找各模块在功能和结构上存在的问题并加以纠正
- 组装测试,将已测试过的模块按一定顺序组装起来
- 按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用
运行/维护
- 改正性维护 运行中发现了软件中的错误需要修正
- 适应性维护 为了适应变化了的软件工作环境,需做适当变更
- 完善性维护 为了增强软件的功能需做变更
软件生存期模型
软件生存期模型是跨越整个生存期的,系统开发、运作、维护所实施的全部过程、活动和任务的结构框架。
瀑布模型
演化模型
螺旋模型
喷泉模型
智能模型
瀑布模型:
演化模型
增量模型
螺旋模型
喷泉模型
软件工程的定义
软件开发方法
结构化方法
- 结构是指系统内各组成要素之间的相互联系、相互作用的框架。
- 结构化方法强调结构的合理性,以及所开发软件的结构合理性,由此提出了一组提高软件结构合理性的准则,如分解和抽象、模块的独立性、信息隐蔽等。
- 针对不同的开发活动,有结构化分析、结构化设计、结构化编程和结构化测试等。
面向数据结构方法
- 面向数据结构方法是结构化方法的变形,它着重数据结构而不是数据流。
- 结构化方法:以分析信息流为主,用数据流图来表示信息流;
- 面向数据结构方法:从分析数据结构入手,即分析信息结构,并用数据结构图来表示,再在此基础上进行需求分析,导出软件的结构。
- Warmer法、Jackson法以及DSSD(数据结构系统开发)方法等。
面向对象方法
- 起源: 面向对象编程语言
OOP(面向对象编程)—〉OOD(面向对象设计)+OOA(面向对象分析)----〉OOM(面向对象的软件开发方法) - 面向对象方法的开发步骤:
1)从问题陈述入手,构造系统模型(对象模型 )。
2)逐层分解成各级子系统。
原型法
- 原型法首先构造一个功能简单的原型系统,然后通过对原型系统逐步求精,不断扩充完善得到最终的软件系统。
- 原型法的主要优点:
1)一种支持用户的方法,使得用户在系统生存周期的设计阶段起到积极的作用;
2)它能减少系统开发的风险,特别是在大型项目的开发中,由于对项目需求的分析难以一次完成,应用原型法效果更为明显。
软件工程环境
软件工程环境的定义
美国国防部在STARS计划中,对软件工程环境定义如下:
“软件工程环境是一组方法、过程及计算机程序的整体化构建,支持从需求定义、程序生成直到维护的整个软件生存期”。
软件工程环境是相关的一组软件工具的集合,支持一定的软件开发方法或按照一定的软件开发模型组织而成。
- 一个理想的软件工程环境: 支持开发+支持管理的工具。
软件开发环境的特点:
- 数据库
- 软件工具的集成:软件工程环境提供软件工具的集成化,实现开发活动之间的全自动切换
- 友好的用户界面
- 信息提取的能力
- 分析能力
- 可裁减性和可扩充性
- 项目控制和管理
- 方法学的支持
整理自:>CCNU云课堂李蓉老师