软件工程学习笔记

本文是笔者课程学习的复习笔记。

Posted by 南三号 on May 2, 2018

软件工程笔记

一. 概述

  • 软件

  • 软件工程学

  • 软件工程中的常见问题

  • 软件生存周期

  • 职业和道德上责任

1. 软件

1.1 组成

由计算机程序,数据,文档组成

1.2 特点:

  • 抽象性:就像某些分层模型,各层都是抽象出来进行描述,而不是真的实在存在。

  • 无磨损性:导致利润不错

  • 对计算机硬件依赖性:会有硬件成本

  • 软件的手工开发方式

  • 软件本身复杂性

  • 软件的高成本

1.3 分类:

  • 系统软件:操作系统、数据库管理系统、设备驱动程序等。
  • 支撑软件:文本编辑程序、文件格式化程序、磁盘向磁带数据传输的程序、支持需求分析、设计、实现、测试和支持管理的软件。
  • 应用软件:商业数据处理软件、工程与科学计算软件、计算机辅助设计/制造软件、系统仿真软件、智能产品嵌入软件、医疗、制药软件、办公自动化软件。

1.4 发展

  • 程序设计阶段 — 50至60年代
  • 程序系统阶段 — 60至70年代:开发模型,支持工具,开发方法的研究
  • 软件工程阶段 — 80年代以后:面向对象,软件生产,软件复用,软件生产管理

1.5 软件危机

  • 计算机更加强大
  • 问题更复杂,工程更大

2. 软件工程

软件工程致力于专业化软件开发的理论、方法和工具研究。

  • 方法Methods
  • 工具Tools
  • 过程Process

3. 软件工程中的常见问题

3.1 软工与计算机的区别:

  • 计科:提供理论方法
  • 软工:解决实际问题
  • 两者有重叠有不同。计科提供理论基础,软工赋予实际意义。

3.2 软件过程

  • 软件描述
  • 软件开发
  • 软件有效性验证
  • 软件进化

3.3 软件过程模型

是从一特定的角度提出的软件过程的简化描述,如瀑布模型。

3.4 软件工程是系统工程的一部分

3.5 软件工程成本

  • 60%的成本是开发成本, 40% 是测试成本. 对于定制软件, 软件进化成本会超过开发成本

  • 软件开发成本是依赖于系统的开发方法系统特性的要求

  • 软件成本的分布依赖于所采用的开发模型

3.6 CASE是计算机辅助软件工程

3.7 属性

  • 可维护性
  • 可依赖性
  • 有效性
  • 可用性

4. 软件生存周期

  • 制定计划(Planning):问题定义与可行性研究

  • 需求分析和定义(Requirement Analysis and Definition)

  • 软件设计( Software Design)

  • 程序编写(Coding, Programming)

  • 软件测试(Testing)

  • 运行/维护(Running/Maintenance)

二. 基于计算机的系统工程

要点:

  • 系统工程是一个复杂而又困难的过程,系统工程学包括很多学科的内容

  • 系统总体特性是系统作为总体表现出来的特性,而不是任何部分所能表现出来的特性

  • 系统体系结构模型一般都用方块图来表示,主要说明子系统极其之间的关系。
  • 系统工程过程通常包括描述、设计、开发和集成

目录:

  • 系统、系统工程
  • 系统总体特性
  • 系统及其环境
  • 系统模型
  • 系统工程过程
    • 系统需求定义
    • 系统设计
    • 子系统开发
    • 系统整合
    • 系统安装
    • 系统操作
    • 系统进化
    • 系统退役
  • 系统获得

敏捷软件开发

  • 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
  • 注重过程,just enough。
  • 常见的敏捷开发:XP,scrum