软件工程笔记1-简介

less than 1 minute read

Published:

爱之悖论:我们同时爱着速朽之身与不朽之魂。若无身之吸引,爱者无法爱魂。于爱者,所欲之身即为魂。


软件工程简介

软件;计算机系统中与硬件相互依存的另一部分,是包括程序、数据、相关文档的完整集合

文档:与程序的开发,维护,使用有关的图文材料。

软件的特性:

  1. 形状特性:软件是无形的,不可见的逻辑实体
  2. 智能特性:软件体现了知识实践经验和人类的智慧,具有一定的智能
  3. 开发特性:尚未实现软件开发的全自动化,软件开发仍然充满个人行为和个人因素
  4. 质量特性:目前无法得到完全没有缺陷的软件产品
  5. 生产特性:软件的复制简单,成本有限
  6. 管理特性:知识性劳动者的智力劳动管理
  7. 环境特性:软件对计算机系统环境有不可摆脱的依赖性
  8. 维护特性:软件投入使用后需要维护,且和传统产业的维护有很大区别
  9. 废弃特性:软件不是因“用坏”而废弃的
  10. 应用特性:软件应用广泛,在各个领域都有应用

软件的分类

  1. 系统软件:操作系统,DMBS,设备驱动,通信网络处理程序
  2. 支撑软件(工具软件):项目管理工具、配置管理工具等
  3. 应用软件:略
  4. 可复用软件:标准函数库、类库、构件库等

软件危机:软件发张速度远远滞后于硬件发展速度,不能满足社会日益增长的软件需求,软件发开周期长,成本高,质量差,维护困难

  1. 缺乏软件开发的经验和有关软件开发数据的积累
  2. 软件人员与用户交流存在障碍,除了知识背景的差异,缺少合适的交流方法需求描述工具
  3. 软件开发过程不规范
  4. 随着软件规模变大,其复杂性往往会呈指数级升高
  5. 缺少有效的软件评测手段,提交用户的软件质量差

软件危机的典型表现:

  • 软件开发成本和进度难以估计
  • 软件成品难以满足用户需求
  • 软件质量难以保证,软件难以维护
  • 软件没有适当的文档资料
  • 软件成本在计算机系统总成本中所占比例逐年上升
  • 软件开发生产率提高的速度,跟不善硬件的发展和计算机应用普及的速度

引发软件危机的原因:

  • 缺乏软件开发经验和开发数据的积累,开发计划难以指定
  • 开发人员与用户的交流存在障碍,需求获取不充分或存在错误
  • 软件开发过程不规范
  • 没有科学严格的管理(软件复杂性随规模指数提升,需要分工)
  • 缺乏保证产品质量有效的软件评测手段

软件工程:指导计算机软件开发和维护的工程学科,运用先进的软件开发技术和管理方法提高软件质量和生产率

软件工程的基本原理:

  • 用分阶段的生命周计划严格管理
  • 坚持进行阶段评审
  • 实行严格的产品控制
  • 采用现代程序设计技术
  • 结果能清楚的审查
  • 开发小组的人员应该少而精
  • 承认不断改进软件工程实践的必要性

软件工程的目标:低成本开发、按时交付、易于维护、高可靠性、高性能

软件工程方法学三个要素:方法、工具、过程

软件的质量特性:功能性、可靠性、可使用性、效率、可维护性、可移植性

软件生存周期:软件定义、软件开发、运行维护

问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试、维护

(问题当以和可行性分析可以合并)

软件定义时期:

  • 确定总目标和可行性
  • 导出策略和系统功能
  • 估计资源和成本
  • 执行工程进度表

需求分析和定义:

  • 对用户提出的要求进行分析和给出详细的定义
  • 对目标系统提出完整、准确、清晰、具体的需求
  • 编写软件需求说明书或系统功能说明书及初步的系统用户手册

软件开发时期

任务:具体设计和实现前一个阶段定义的软件

  • 概要设计:怎样实现目标系统
    • 设计程序的体系结构,确定程序由哪些模块组成以及模块之间的关系
    • 提交概要设计说明书
  • 详细设计:要怎样实现系统
    • 详细设计每个模块,确定实现模块功能需要的算法和数据结构
    • 提交如软件的详细设计说明书
  • 程序编码和单元测试
    • 提交源程序,详尽的程序说明和单元测试报告
  • 集成测试和系统测试:
    • 通过各种类型的测试使软件达到预定的要求
    • 提交测试计划,详细测试方案以及实际测试结果
  • 软件运行维护时期:改进性维护,适应性维护,完整性维护,预防性维护

开发中的典型文档

  • 软件需求规格说明书:描述将要开发的软件要做什么
  • 项目计划:描述完成的任务和顺序,估计所需的时间和工作量
  • 软件测试计划:如何测试,使其确保软件应事先的功能,达到预期性能
  • 软件设计说明书:描述软件的结构,包括概要设计及详细设计
  • 用户手册

软件工程方法概述:

软件工程学三要素:过程、方法、工具

  • 结构化方法

    将软件生命周期全过程依次划分为若干阶段,采用结构化技术完成每个阶段的任务

    1. 强调自顶向下开发
    2. 要么面向行为,要么面向数据,缺乏结合两者的机制
  • 面对对象方法学
    1. 将数据和对数据的操作紧密结合起来的方法
    2. 认为开发时多次反复迭代的演化过程
    3. 对概念和表示方法上保持一致,保证各项开发活动之间的平滑过渡
    4. 对大型、复杂及交互性比较强的系统,使用面对对象方法学更有方法
  • 形式化方法

    基于形式化数学变换的软件开发方法,将系统的规格说明转化成可执行的程序。

1. 软件需求规格说明用数学符号细化表达为形式化规格说明
2. 设计、实现、单元测试等有一个变化开发过程替代,通过一系列变化将形式化规格说明细化为程序

软件工程原则:

  1. 抽象,自顶向下,逐层细化
  2. 模块化
  3. 信息隐蔽和数据封装
  4. 局部化:集中逻辑上相互关联的计算机资源
  5. 一致性:整个软件系统模块使用一致的设计策略,编程风格,照程序内部接口的一致性,软件与硬件接口的一致性,系统规格说明与系统行为的一致性
  6. 完备性:软件系统中不丢失任何成分
  7. 可检测性

软件工程基本原则

  1. 按软件生存期分阶段指定计划并认真实施
  2. 坚持进行阶段评审
  3. 坚持严格的产品控制
  4. 使用现代程序设计技术
  5. 明确责任,使得工作结果能够得到清楚的审查
  6. 用人少而精
  7. 不断改进开发过程