软件工程-第0/1章总结

  1. 0-1 课程简介

 

    • A. 核心竟争力:

 

      • 1. 系统化、集成化、工程化的智能软件

 

        • a) 工程化的理论、方法和技术

 

    • B. 软件工程的概念
      用来研发软件的工程化方法

 

      • 1. 对软件工程的直观理解:
        应用计算机和软件科学中的理论方法来解决软件系统“从无到有”、“从有到好”的过程。

 

        • a) 从无到有(from scratch):软件构建

 

 

        • b) 从有到好(for better):软件管理与维护

 

 

 

      • 2. 传统的理解

 

        • a) 软件

 

          • (1) 控制计算机硬件功能及其运行的指令、例行程序和符 语言

 

        • b) 工程:

 

          • (1) 将科学及数学原理运用于实际用途的应用手段,即高效率、低成本的设计、制造和运行各类结构、机器、进程和系统

 

    • C. 为什么学习软件工程

 

      • 1. 制造软件”需要 会化分工

 

 

  1. 1-1 软件工程概论

 

    • A. 软件的基本概念
      一组对象或项目所形成的一个“配置”, 由程序、文档和数据等部分构成。

 

      • 1. 程序
        可被计算机硬件理解并执行的一组指令, 提供期望的功能和性能

 

      • 2. 数据
        程序能正常操纵信息的数据结构

 

      • 3. 文档
        与程序开发、维护和使用有关的图文材料

 

    • B. 软件工程产生的历史根源

 

      • 1. 软件开发失败的例子

 

      • 2. 软件开发中的“焦油坑”—程序员的烦恼

 

      • 3. 软件危机(Software Crisis)
        计算机软件的开发和维护过程所遇到的一系列严重问题

 

        • a) 为何出现这种情况

 

    • C. 软件工程的基本概念

 

      • 1. 软件工程”的提出

 

      • 2. 范围:
        – 软件开发过程(设计、开发、运行、维护)

– 软件开发中应遵循的原则和管理技术

– 软件开发中所采用的技术和工具

 

      • 3. 目标:
        – 高质量  – 按时交付  – 控制成本  – 满足用户需求

 

      • 4. 软件开发方法:
        使用预先定义好的一组模型表示方法、良好的设计技术与原则、质量保证标准等方面来组织软件开发的过程;

 

        • a) 结构化开发方法(Structured Analysis and Design Technique, SADT)
          – 以结构化程序设计为基础 

– 程序=数据结构+算法 

– 自顶向下:结构化需求分析…结构化设计(概要设计、详细设计)…面向过程的编码…测试

 

 

        • b) 面向对象开发方法(Object Oriented Analysis and Design, OOAD)
          – 以面向对象程序设计为基础  – 程序 = 对象 + 消息  – 软件分析与对象抽取…对象详细设计…面向对象的编码…面向对象的测试

 

 

        • c) 面向服务的软件开发方法(Service-oriented software engineering (SOSE))
          面向服务的软件开发是将应用程序的不同功能单元(称为服务) 进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

 

          • (1)

 

          • (2)

 

      • 5. 软件工具与软件工程环境

 

        • a) 工具:自动或半自动的软件支撑环境,辅助软件开发任务的完成,提高开发效率和软件质量、降低开发成本

 

        • b) 多个工具集成在一起,形成了软件工程开发环境CASE (Computer Aided Software Engineering),全面支持软件开发的全过程。

 

      • 6. 软件过程

 

      • 7. 软件工程管理

 

      • 8. 软件质量特性

 

        • a) 软件团队的很多人都整天和 bug 打交道,bug 的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性、可维护性

 

          • (1)

 

        • b) 软件质量

 

          • (1) 并不取决于开发人员自身,通常与客户、用户、维护人员等提出的要求密切相关

 

          • (2) 软件产品与需求相一致的程度,由一系列质量特性来描述

 

    • D. 软件分类

 

      • 1. 应用软件
        为满足特定应用领域、不同应用问题之需求的专用软件。

 

      • 2. 系统软件
        最靠近计算机硬件的一层软件 —— 控制和协调计算机及外部设备、支持应用软件开发与运行的软件。

 

      • 3. 支撑软件
        软件系统的中间层,支撑各种软件的开发、运行与维护的软件。

 

      • 4. 举例

 

    • E. 软件的四大特征

 

      • 1. 复杂性(complexity)
        软件要解决的现实问题通常很复杂,数据、状态、逻辑关系的可能组合导致了软件本身的复杂性;

软件无法以“制造”的方式被生产,只能采用手工开发方式, 这是一种人为、抽象化的智能活动(智力密集型),与人的水平密切相关,人类思维的不确定性导致了开发过程的复杂性;

 

      • 2. 不可见性(invisibility)
        尚未完成的软件是看不见的,无法像产品一样充分呈现其结构,使得人们在沟通上面临极大的困难,难以精确的刻画和度量。

 

      • 3. 易变性(changeability)
        软件所应用的环境由人群、法规、硬件设备、应用领域等因素汇集而成,而这些因素皆会频繁快速的变化。

 

      • 4. 一致性(conformity)
        各子系统的接口必须协同一致,而随着时间和环境的演变,要维持这样的一致性通常十分困难。

 

    • F. 软件为何需要不断的变化

 

      • 1. 变化”是永恒的主题

 

        • a) 软件必须不断的变化以适应新的计算环境或新技术的发展

 

        • b) 软件必须通过不断的功能增强以实现新的业务需求

 

        • c) 软件必须通过扩展以与其他软件系统进行互操作

 

        • d) 软件必须被不断的重构以使其生命周期得以延续

 

      • 2. 遗留系统( Legacy system):仍在使用中的软件系统, 可满足客户需求,但很难以“优雅的”方式对其进行演变以适应新需求或新环境

 

  1. 1-2 软件工程核心思想

 

    • A. 软件工程的本质

用严格的规范和管理手段来缩小偏差, 通过牺牲“时间”来提高“质量”

 

      • 1. 任何软件系统开发的共同本质在于
        从现实空间的需求到计算机空间的软件代码之间的映射与转换;

 

      • 2.

 

      • 3. 软件工程的两个映射

 

        • a) 软件工程的作用

为了实现以上两个映射,软件工程需要解决以下问题:  – 需要设置哪些抽象层次——单步映射步映射步– 每一抽象层次的概念、术语与表达方式——公式形字nbsp; – 相邻的两个抽象层次之间如何进行映射——需要遵循哪些途径和原则br>概念映射
业务逻辑映射

 

        • b) 概念映射
          问题空间的概念与解空间的模型化概念之间的映射

 

        • c) 业务逻辑映射
          问题空间的处理逻辑与解空间处理逻辑之间的映射

 

    • B. 软件工程:不同抽象层次之间的映射过程

 

      • 1. 需求分析
        在一个抽象层上建立需求模型的活动,产生需求规约(Requirement Specification),作为开发人员和客户间合作的基础,并作为以后开发阶段的输入。

现实空间的需求 ? 需求规约

 

      • 2. 软件设计
        定义了实现需求规约所需的系统内部结构与行为,包括软件体系结构、数据结构、详细的处理算法、用户界面等,即所谓设计规约(Design Specification),给出了实现软件需求的软件解决方案。

需求规约 ? 设计规约

 

      • 3. 实现
        由设计规约到代码的转换,以某种特定的编程语言,对设计规约中的每一个软件功能进行编码。

设计规约 ? 代码

 

      • 4. 验证/确认
        一种评估性活动,确定一个阶段的产品是否达到前阶段确立的需求(verification),或者确认开发的软件与需求是否一致 (validation)

 

    • C. 软件工程所关注的对象

软件工程具有“产品与过程二相性”的特点,必须把二者结合起来去考虑,而不能忽略其中任何一方。

 

      • 1. 产品:
        各个抽象层次的产出物

 

      • 2. 过程:
        在各个抽象层次之间进行映射与转换

 

 

    • D. 软件工程所关注的目标

 

      • 1. 功能性需求
        软件所实现的功能达到它的设计规范和满足用户需求的程度

 

        • a) 是否达到功能
          功能1、功能2、…、功能n

 

        • b) 完备性
          软件能够支持用户所需求的全部功能的能力;

 

        • c) 正确性:
          软件按照需求正确执行任务的能力

 

        • d) Summary

正确性描述软件在需求范围之内的行为,而健壮性描述软件在需求范围之外的行为
正确性:
健壮性

 

        • e) 健壮性
          在异常情况下,软件能够正常运行的能力

 

        • f) 可靠性
          在给定的时间和条件下,软件能够正常维持其工作而不发生故障的能力

 

      • 2. 非功能性需求
        系统能够完成所期望的工作的性能与质量

 

        • a) 效率:
          软件实现其功能所需要的计算机资源的大小,“时间-空间”

 

        • b) 可用性
          用户使用软件的容易程度,用户容易使用和学习

 

        • c) 可维护性
          软件适应“变化”的能力,系统很容易被修改从而适应新的需求或采用新的算法、数据结构的能力

 

        • d) 可移植性
          软件不经修改或稍加修改就可以运行于不同软硬件环境(CPU、OS 和编译器)的能力

 

        • e) 清晰性
          易读、易理解,可以提高团队开发效率,降低维护代价;

 

        • f) 安全性:
          在对合法用户提供服务的同时,阻止未授权用户的使用

 

        • g) 兼容性
          不同产品相互交换信息的能力

 

        • h) 经济性:
          开发成本、开发时间和对市场的适应能力

 

        • i) 商业质量
          上市时间、成本/受益、目标市场、与老系统的集成、生命周期长短等

 

    • E. 软件工程的核心概念

 

      • 1. 复用(Reuse)

 

      • 2. 分而治之(Divide and Conquer)

 

        • a) 如何的分解策略可以使得软件更容易理解、开发和维护

 

      • 3. 折中(Trade-off)

 

        • a) 如何调和矛盾(需求之间、人与人之间、供需双方之间,等等)

 

      • 4. 演化(Evolution)

 

        • a) 核心问题:在设计软件的初期,就要充分考虑到未来可能的变化,并采用恰当的设计决策,使软件具有适应变化的能力。  ? 即:可修改性、可维护性、可扩展性;

 

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月8日
下一篇 2020年6月8日

相关推荐