Skip to content

Latest commit

 

History

History
executable file
·
190 lines (101 loc) · 5.96 KB

软件工程学习笔记.md

File metadata and controls

executable file
·
190 lines (101 loc) · 5.96 KB

软件工程

第一章 软件工程概论

软件的定义及特点

软件的定义:

软件:计算机系统中的程序及其文档

  • 程序是计算任务的处理对象和处理规则的描述
  • 文档是为了便于了解程序所需的阐明性资料

软件的特点:

  • (1)软件是无形的、不可见的逻辑实体
    • 它的正确与否,一直到程序在机器上运行才能知道
    • 这就给设计、生产和管理带来许多困难
  • (2)软件是设计开发的,而不是生产制造的
  • (3)软件在使用过程中没有磨损、老化的问题
  • (4)软件是定制开发的
    • 虽然整个工业向着基于构件的构造模式发展
    • 然而大多数软件仍是根据实际的顾客需求定制的
  • (5)软件是复杂的
    • 软件涉及人类社会的各行各业
    • 软件开发常常涉及其他领域的专业知识。这对软件工程师提出了很高的要求。
  • (6)软件的开发成本高
  • (7)软件易于复制
  • (8)软件质量要求较高
  • (9)软件的开发与运行都离不开相关的计算机系统环境
  • (10)软件开发工作牵涉到很多社会因素
    • 如机构设置、体制和管理方式,以及人们的观念和心理

软件的种类:

按照软件的功能划分,软件一般可以分为系统软件、支撑软件和应用软件三类。

说明:

软件是软件工程的研究对象,也是软件工程的产品形态与客观存在。

工程是将理论和知识应用于实践的科学,其目的是经济有效地解决实际问题。

软件工程的起源和概念

软件工程的起源

  • 1946 年计算机刚诞生时,人们采用机器码编制程序(机器码指令为了驱动计算机硬件工作),没有独立的软件的概念
  • 1947 年,冯 · 诺依曼首次提出用流程图描述计算机的运行过程,使人们认识到程序设计师完全不同于硬件研制的另一项工作,从此,软件的开发和研究才逐渐开始独立地进行。
  • 现在,在信息产业中,微电子是基础,计算机和网络是载体,软件是核心。

软件开发的三个阶段

  • 个人程序时期(1947 年 - 1950 年代末)
    • 在这个时期,程序员使用的开发语言主要是机器语言和汇编语言,负责从程序的开发、运行和维护的全过程,这是一种私人化的软件环境。
  • 软件作坊时期(1960 年代初 - 1960 年代末)
    • 多人分工合作,共同完成一个程序的编制,需要对项目开发进行管理,即所谓 "作坊式生产方式"
    • 这一时期,出现了 FORTRAN、COBOL 等高级程序设计语言
  • 软件工程时期(1970 年代初至今)
    • 随着计算机应用领域的进一步扩大,软件的规模和复杂性也在不断增加
    • 出现了 ”软件危机“

软件危机的现象:

  • 软件质量差,可靠性难以保证
  • 成本难以控制,很少有在预算内完成的
  • 开发进度难以把握,周期拖得很长
  • 可维护性较差,维护人员和费用不断增加

image-20200512203321481

为解决软件危机,提出了软件工程的概念!

其目的是倡导以工程的原理、原则和方法进行软件开发,以解决软件危机。

软件工程的定义

IEEE(IEEE93)中的软件工程定义:

  • 将系统化的、规范的、可量化的方法应用到软件的开发、运行及维护中,即将工程化方法应用于软件。

软件工程框架

软件工程可定义为三元组:<目标,原则,活动>

  • (1)给出了软件所涉及软件工程的工程要素
  • (2)给出了各要素之间的关系
  • (3)给出了软件工程学科所研究的主要内容

软件工程的目标

软件工程的目标是:生产具有正确性、可用性以及开销合宜的产品

  • 正确性:指软件产品达到预期功能的程度
  • 可用性:指软件基本结构、实现及文档为用户可用的程度
  • 开销合宜:指软件开发、运行的整个开销满足用户要求的程度

软件工程的活动

指生产一个最终满足需求且达到工程目标的软件产品所需要的步骤,主要包括需求设计实现确认支持等活动。

1 需求

  • 定义问题,即建立系统模型
  • 主要任务包括:
    • 需求获取
    • 需求定义(即定义问题)系统功能的一个正确的陈述
    • 需求规约:系统需求规格说明
    • 需求验证

2 设计

  • 设计包括总体设计(也叫概要设计)和详细设计
  • 总体设计建立整个软件体系结构
    • 包括子系统、模块(或构件)以及相关层次的说明、每一模块(或构件)的接口定义
  • 详细设计针对总体设计结果,给出体系结构中每一模块或构件的详细描述
    • 即给出它们的数据结构说明和实现算法

3 实现

  • 把设计结果转换为可执行的程序代码
  • 具体做法:
    • (1)选择可用的模块或构件
    • (2)或以一种选定的语言,对每一模块或构件进行编码

4 确认

  • 确认活动贯穿于整个开发过程
  • 实现完成后的确认,保证最终产品满足用户的需求
  • 确认活动主要包括:
    • 需求复审、设计复审以及程序测试,主要任务是:软件测试

5 支持活动

  • 支持活动包括修改和完善
  • 它为系统的运行提供完善性维护、纠错性维护和适应性维护

软件工程的原则

  • 选取适宜的开发模型
  • 提供高质量的工程支持
  • 重视开发过程的管理

image-20200512215643930

参考资料

[1] 北京大学 - 真棒 - 软件工程(🌱 视频学习入口

[2] 清华大学 - 邹欣 - 软件工程(🌱 视频学习入口