软件的定义:
软件:计算机系统中的程序及其文档
- 程序是计算任务的处理对象和处理规则的描述
- 文档是为了便于了解程序所需的阐明性资料
软件的特点:
- (1)软件是无形的、不可见的逻辑实体
- 它的正确与否,一直到程序在机器上运行才能知道
- 这就给设计、生产和管理带来许多困难
- (2)软件是设计开发的,而不是生产制造的
- (3)软件在使用过程中没有磨损、老化的问题
- (4)软件是定制开发的
- 虽然整个工业向着基于构件的构造模式发展
- 然而大多数软件仍是根据实际的顾客需求定制的
- (5)软件是复杂的
- 软件涉及人类社会的各行各业
- 软件开发常常涉及其他领域的专业知识。这对软件工程师提出了很高的要求。
- (6)软件的开发成本高
- (7)软件易于复制
- (8)软件质量要求较高
- (9)软件的开发与运行都离不开相关的计算机系统环境
- (10)软件开发工作牵涉到很多社会因素
- 如机构设置、体制和管理方式,以及人们的观念和心理
软件的种类:
按照软件的功能划分,软件一般可以分为系统软件、支撑软件和应用软件三类。
说明:
软件是软件工程的研究对象,也是软件工程的产品形态与客观存在。
工程是将理论和知识应用于实践的科学,其目的是经济有效地解决实际问题。
- 1946 年计算机刚诞生时,人们采用机器码编制程序(机器码指令为了驱动计算机硬件工作),没有独立的软件的概念
- 1947 年,冯 · 诺依曼首次提出用流程图描述计算机的运行过程,使人们认识到程序设计师完全不同于硬件研制的另一项工作,从此,软件的开发和研究才逐渐开始独立地进行。
- 现在,在信息产业中,微电子是基础,计算机和网络是载体,软件是核心。
- 个人程序时期(1947 年 - 1950 年代末)
- 在这个时期,程序员使用的开发语言主要是机器语言和汇编语言,负责从程序的开发、运行和维护的全过程,这是一种私人化的软件环境。
- 软件作坊时期(1960 年代初 - 1960 年代末)
- 多人分工合作,共同完成一个程序的编制,需要对项目开发进行管理,即所谓 "作坊式生产方式"
- 这一时期,出现了 FORTRAN、COBOL 等高级程序设计语言
- 软件工程时期(1970 年代初至今)
- 随着计算机应用领域的进一步扩大,软件的规模和复杂性也在不断增加
- 出现了 ”软件危机“
软件危机的现象:
- 软件质量差,可靠性难以保证
- 成本难以控制,很少有在预算内完成的
- 开发进度难以把握,周期拖得很长
- 可维护性较差,维护人员和费用不断增加
为解决软件危机,提出了软件工程的概念!
其目的是倡导以工程的原理、原则和方法进行软件开发,以解决软件危机。
IEEE(IEEE93)中的软件工程定义:
- 将系统化的、规范的、可量化的方法应用到软件的开发、运行及维护中,即将工程化方法应用于软件。
软件工程可定义为三元组:<目标,原则,活动>
- (1)给出了软件所涉及软件工程的工程要素
- (2)给出了各要素之间的关系
- (3)给出了软件工程学科所研究的主要内容
软件工程的目标是:生产具有正确性、可用性以及开销合宜的产品
- 正确性:指软件产品达到预期功能的程度
- 可用性:指软件基本结构、实现及文档为用户可用的程度
- 开销合宜:指软件开发、运行的整个开销满足用户要求的程度
指生产一个最终满足需求且达到工程目标的软件产品所需要的步骤,主要包括需求、设计、实现、确认和支持等活动。
1 需求
- 定义问题,即建立系统模型
- 主要任务包括:
- 需求获取
- 需求定义(即定义问题)系统功能的一个正确的陈述
- 需求规约:系统需求规格说明
- 需求验证
2 设计
- 设计包括总体设计(也叫概要设计)和详细设计
- 总体设计建立整个软件体系结构
- 包括子系统、模块(或构件)以及相关层次的说明、每一模块(或构件)的接口定义
- 详细设计针对总体设计结果,给出体系结构中每一模块或构件的详细描述
- 即给出它们的数据结构说明和实现算法
3 实现
- 把设计结果转换为可执行的程序代码
- 具体做法:
- (1)选择可用的模块或构件
- (2)或以一种选定的语言,对每一模块或构件进行编码
4 确认
- 确认活动贯穿于整个开发过程
- 实现完成后的确认,保证最终产品满足用户的需求
- 确认活动主要包括:
- 需求复审、设计复审以及程序测试,主要任务是:软件测试
5 支持活动
- 支持活动包括修改和完善
- 它为系统的运行提供完善性维护、纠错性维护和适应性维护
- 选取适宜的开发模型
- 提供高质量的工程支持
- 重视开发过程的管理
[1] 北京大学 - 真棒 - 软件工程(🌱 视频学习入口)
[2] 清华大学 - 邹欣 - 软件工程(🌱 视频学习入口)