软件工程学习笔记

软件工程

记载一下软件工程中重要的定义.

一、软件工程引论

软件工程的定义

软件工程是一门学科,目的是生产出没有错误的软件,按时并且在预算交付,满足用户的需求。更进一步,当用户的需求改变时,软件必须易于修改。

软件危机

软件危机指软件产品的质量低得通常不能接受,并且不能满足交付日期和预算限制。是指在计算机软件开发和维护过程中遇到的一系列的问题。

软件工程的目标以及多目标之间的矛盾

软件工程的目标:

  1. 软件开发的成本较低
  2. 软件功能能满足用户的需求
  3. 软件性能较好
  4. 软件可靠性高
  5. 软件易于使用,维护和移植
  6. 能按时完成开发任务,及时交付使用

矛盾:

  1. 如果只考虑降低开发成本,很可能同时也降低了软件的可靠性。
  2. 如果一味追求软件的性能,可能开发出的软件对硬件的依赖性较强,从而影响软件的可移植性。

二、软件生命周期及其阶段和模型

软件生命周期指的是,软件产品从功能确定、设计、开发成功、投入使用,并在使用中不断修改、完善,直至被新的软件替代,从而停止软件使用的全过程。

软件生命周期分为几个阶段:可行性研究、项目计划、需求分析、总体设计、详细设计、编码实现、系统运行维护。

软件生命周期模型:

  • 进化树模型:与现实世界软件开发最接近的模型,与「迭代-递增模型」等价
  • 瀑布模型:纪律强制性的方法,文档驱动。
  • 快速原型开发模型
  • 同步-稳定模型
  • 开源模型
  • 敏捷过程原型
  • 螺旋模型:风险驱动
  • 迭代-递增模型

各种模型的特点:

瀑布模型的特点:

  1. 线性化结构
  2. 各阶段具有里程碑特征
  3. 基于文档的驱动
  4. 严格的阶段评审机制

原型模型的两种实现方案各有什么特点

  • **抛弃式原型:**这种原型在目的达到后被抛弃,原型不做为最终产品
  • **进化式原型:**这类原型的形成和发展是逐步完成的,他是高度动态迭代和高度动态循环,是对付变化最有效的方式
  • **增量式模型:**系统是一段一段地增量构造,增量式开发实在软件总体设计基础上进行的。

大型项目用螺旋模型的原因

螺旋模型的优越性在于它吸收了「进化」的概念,使得开发人员和用户对每一个演化层出现的风险均有所了解,并对此做出反应。使用该模型需要丰富的风险评估经验和专门的知识。所以适合大项目。

三、结构化需求分析

需求分析及其任务

**需求分析:**开发人员准确的理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。

基本任务:

  1. 问题识别:双方确定问题的综合需求
  2. 分析与综合:导出软件逻辑模型
  3. 编写文档:包括编写「需求规格说明书」,「初步用户使用手册」,「确认测试计划」,「修改完善软件开发计划」

重要概念:

  • 需求工程的主要目的是:解决系统是「做什么」的问题。

  • 需求分析最后产生的结果是产生「需求规格说明书」

  • 需求分析的主要方法是「结构化分析方法」

  • 结构化分析(SA)的主要描述手段是:DFD图、数据字典、加工说明

数据字典的作用

  • 没有数据字典,数据流图就不合格。
  • 没有数据流图,数据字典也没有作用。

数据字典的重要用途是作为分析阶段的工具。在数据字典中建立严密一致的定义有助于改进分析人员和用户之间的通信,避免许多误解的发生。

数据字典对下列 4 类元素进行定义:

  1. 数据项
  2. 数据流
  3. 数据存储(文件)
  4. 加工

重要概念:

  • 数据流图是表达系统内部数据运动的图形化技术。
  • 数据流(DFD)中的每个加工至少需要一个输入流和一个数处理

结构化分析方法

结构化分析是适用于分析典型的数据处理系统的,以结构化的方式进行系统定义的分析方法。

结构化分析(SA),对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程。

四、结构化软件设计

概要设计的任务和步骤

任务:

  1. 建立目标系统的总体架构
  2. 给出每个功能模块的功能描述、数据接口和调用关系,规定设计限制,外部文件及全局数据定义。
  3. 设计数据库及数据结构。
  4. 编写文档

步骤:

  1. 制定规范
  2. 体系结构设计
  3. 软件结构设计
  4. 公共数据结构设计
  5. 安全性设计
  6. 故障处理设计
  7. 编写文档
  8. 概要设计评审。

重要概念:

  1. 在面向数据流的软件设计方法中,一般将信息分为变换流和事务流
  2. 耦合度分为 7 级,最松散的耦合是:非直接耦合
  3. 判定表和判定树能够清晰的表达出各种动作之间的对应关系。
  4. 软件的宽度指其控制的跨度

五、面向对象的需求分析

对象和类的联系及区别

对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的一组服务组成。

类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。

类由数据和方法集成,它是关于对象性质的描述,包括外部特性和内部实现两个方面。类是具有相同属性和行为的一组相似对象的抽象,在现实世界中并不能真正存在。类好比是一个对象模板,根据需要用它可以产生多个对象(即类的实例)。因此类所代表的是一个抽象的概念或事物,类是静态概念;在客观世界中实际存在的是类的实例,即对象,对象是动态概念。类是对象的抽象,有了类之后,对象则是类的具体化,是类的实例。

继承和多态的作用

继承(Inheritance)是面向对象方法学中的核心概念,它是指从一个类的定义中可以派生出另一个类的定义,被派生出的类(子类)可以自动拥有父类的全部属性和服务。继承简化了人们对现实世界的认识和描述,在定义子类时不必重复定义那些已在父类中定义过的属性和服务,只要说明它是某个父类的子类,并定义自己特有的属性和服务即可。继承机制是组织构造和复用类的一种工具。

多态性(Polymorphism)是指同名的方法或操作在不同类型的对象中有各自相应的实现。 在存在继承关系的一个类层次结构中,不同层次的类可以共享一个操作,但却有各自不同的实现。多态性机制不但为软件的结构设计提供了灵活性,减少了信息冗余,明显提高了软件的可复用性和可扩充性。

重要概念:

  1. 用「聚合关系」可明确的表示两类事物之间存在的整体/部分形式的关联关系。

最后修改于 2018-12-25

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。