软件工程知识总结

一,软件危机

 

1,软件危机的定义:

 

软件危机是指在计算机软件开发和维护时所遇到的一系列问题。软件危机主要包含两方面的问题:一是如何开发软件以满足社会对软件日益增长的需求;二是如何维护数量不断增长的已有软件。

 

2,软件危机产生的原因:

 

  • 软件产品往往规模庞大,给软件的开发和维护带来客观的困难。
  • 软件在使用时可能出现开发时没有预料到的问题。
  • 软件开发技术落后,生产方式和开发工具落后。
  • 软件开发人员忽视软件需求分析的重要性,对软件可维护性不重视。

 

3,软件危机的主要表现形式:

 

  • 软件的发展速度跟不上硬件的发展和用户的需求。
  • 软件的成本和开发进度不能预先估计,用户不满意。
  • 软件产品质量差,可靠性不能保证。
  • 软件产品可维护性差。
  • 软件没有合适的文档资料。

 

4,解决软件危机的途径:

 

  • 使用良好的开发技术和方法。
  • 使用好的软件开发工具,提高软件生产效率。
  • 有良好的组织,严密的管理,各方面人员相互配合共同完成任务。

 

 

二,软件工程

 

1,软件的定义:

 

软件是指能够实现预定功能和性能的可执行的计算机程序,使程序正常运行所需要的数据,和文档的完整集合。

 

2,软件工程定义:

 

软件工程是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户需求的软件产品的定义、开发、发布和维护的工程或进行研究的学科。它采用工程的概念、原理、技术和方法来开发与维护软件,目标是实现软件的优质高产。

 

 

三,软件生存周期

 

1,软件生存周期的定义:

 

软件产品从问题定义开始,经过开发、使用和维护,直到最后被淘汰的整个过程就是软件生存周期,也称软件生命周期。

 

2,软件生存周期的划分(瀑布模型):

 

  • 软件计划:
    • 问题定义
    • 可行性研究
    • 需求分析
  • 软件开发:
    • 软件设计:
      • 概要设计
      • 详细设计
    • 软件实现:
      • 程序设计
      • 软件单元测试
    • 综合测试阶段
  • 软件运行维护

 

 

四,软件开发六大模型优、缺点

 

1,瀑布模型:

 

特点:规范的、文档驱动的方法。开发阶段按顺序进行,适合需求分析较明确,开发技术较成熟的情况。

优点:(软件生存周期阶段间的顺序性和依赖性,推迟软件编码的观点,保证质量。)

有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。

缺点:(不适合需求模糊的系统,开发初始阶段很难弄清系统需求。)

(1)开发过程一般不能逆转,否则代价太大;

(2)实际的项目开发很难严格按该模型进行;

(3)客户往往很难清楚地给出所有的需求,而该模型却要求如此。

(4)软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。

使用范围:

(1)用户的需求非常清楚全面,且在开发过程中没有或很少变化;

(2)开发人员对软件的应用领域很熟悉;

(3)用户的使用环境非常稳定;

(4)开发工作对用户参与的要求很低。

 

2,快速原型模型:

 

特点:构建原型系统让用户试用并收集用户意见,获取用户真实需求。

优点:只要使用得当,就能减少软件的总成本,缩短开发周期。

(克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。)

(1)可以得到比较良好的需求定义,容易适应需求的变化;

(2)有利于开发与培训的同步;

(3)开发费用低、开发周期短且对用户更友好。

这种模型适合预先不能确切定义需求的软件系统的开发。

缺点:

(1)客户与开发者对原型理解不同;

(2) 准确的原型设计比较困难;

(3) 不利于开发人员的创新。

所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。

使用这个模型的前提是要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。

使用范围:

(1)对所开发的领域比较熟悉而且有快速的原型开发工具;

(2)项目招投标时,可以以原型模型作为软件的开发模型;

(3)进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。

 

3,增量模型

 

特点:

优点:(能够在早期向用户提交部分产品且易于维护)

(1)采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源;

(2)如果核心产品很受欢迎,则可增加人力实现下一个增量;

(3)可先发布部分功能给客户,对客户起到镇静剂的作用。

缺点:(软件的体系结构必须是开放的。)

(1)并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构;

(2)增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。

使用范围:

(1)进行已有产品升级或新版本开发,增量模型是非常适合的;

(2)对完成期限严格要求的产品,可以使用增量模型;

(3)对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的。

 

4,喷泉模型

 

特点:适用于面向对象方法

是一种以用户需求为动力,以对象作为驱动的模型,适合面向对象开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,开发过程具有迭代性和无间隙性。

优点:各个阶段没有明显的界限,开发人员可以同步进行开发。

可以提高软件项目开发效率,节省开发时间。

缺点:

由于各开发阶段是重叠的,因此在开发过程中需要大量开发人员,不利于项目管理。开发过程过于无序。

适用范围: 

面向对象的软件开发过程

 

 

5,螺旋模型

 

特点:

 螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险,即是在每个阶段之前都增加了风险分析过程。

优点:

对可选方案和约束条件的强调有利于已有软件的重用,也有利于把软件质量作为软件开发的一个重要目标;

减少了过多测试(浪费资金)或者不足(产品故障多)所带来的风险;

在螺旋中维护的只是模型的另一个周期,在维护和开发之间没有本质的区别

(1)设计上的灵活性,可以在项目的各个阶段进行变更;

(2)以小的分段来构建大型系统,使成本计算变得简单容易;

(3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;

(4) 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。

缺点:

(1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失;

(2)过多的迭代次数会增加开发成本,延迟提交时间。

使用范围:

适用于大规模内部开发项目,分析风险和排除风险。

螺旋模型只适合于大规模的软件项目。

 

 

6,统一过程(RUP)

 

特点:

适用于面向对象方法,使用统一建模语言UML,采取用例驱动和构架优先的策略,迭代增量的构造方法。

优点:

提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。

缺点:

RUP只是一个开发过程,并没有涵盖软件过程的全部 内容,例如它缺少关于软件运行和支持等方面的内容;此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。可以说 RUP是一个非常好的开端,但并不完美,在实际的 应用中可以根据需要对其进行改进并可以用OPEN和OOSP等其他软件过程的相关内容对RUP进行补充和完善。

 

 

五,需求分析

 

1,需求分析步骤:

 

  • 建立系统模型
  • 写出需求规格说明
  • 修正开发计划
  • 制定初步的测试计划
  • 编写初步的用户手册
  • 编写数据要求说明书
  • 复审

 

 

 

六,E-R图,数据流图,状态转换图,数据字典

 

1E-R图——数据模型——描述实体之间的关系

 

实体:矩形框表示

关系:用菱形表示

属性:椭圆或圆角矩形

 

2,数据流图——功能模型——描述数据在系统中如何变换

 

数据源点或终点:正方形或正方体

数据处理:圆角矩形或圆形

数据存储:两端用同向圆弧封闭的平行横线或开口矩形

数据流:箭头

*:表示数据流之间是“与”关系

+:表示数据流之间是“或”关系

 

 

3,状态转换图——行为模型——描述系统的各种行为模式和不同状态间的转换

 

椭圆:表示实体的一种状态

箭头:表示从箭头出发的状态可以转换到箭头所指的状态

事件: 箭头附近可标出引起状态转换的事件名

实心圆:指出该实体被创建后所处的初始状态

内部实心的同心圆:表示实体的最终状态

 

4,数据字典

 

数据字典(DD)是对数据流图中出现的所有数据元素、数据流、文件、处理的定义的集合。作用是在软件分析和设计过程中提供数据描述,是数据流图必不可少的辅助资料。

 

数据字典通常由数据元素、数据流、数据存储、和数据处理组成

 

 

七,软件结构化设计

 

1,软件结构化设计基本要点:

 

  • 软件系统由层次结构的模块构成;
  • 模块是单入口、单出口的
  • 模块构造和联结的基本准则是模块独立
  • 软件系统结构用图来描述

 

2,软件结构化设计的基本原理:

 

软件的模块化、模块的独立性、抽象和逐步求精、信息隐蔽和局部化。

 

3,模块化的分割标准

 

  • 模块大小
  • 耦合:模块之间的联系程度——尽量使用数据耦合,少有控制耦合和特征耦合,不采用内容耦合,控制公共环境耦合
  • 内聚:模块内的软件元素的联系程度——内聚按紧密程度从高到低排序,次序为:功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚
  • 信息隐蔽:模块信息的隐蔽程度

 

4,判定树,判定表

 

 

5,流程图、盒图与PAD图相互转化

 

 

 

 

八,软件测试

 

1,软件测试定义:

 

软件测试是由人工或计算机来执行或评价系统的过程,已验证它是否满足规定的需求,测试的根本任务是发现软件中的错误,测试过程的早期使用白盒法,后期使用黑盒法。

 

2,软件测试的目的

 

使用尽可能少的高效测试数据,从而尽可能多的发现软件中的错误

 

3,白盒和黑盒

 

 

 

 

九,软件维护

 

1,软件维护的种类

 

  • 改正性维护
  • 适应性维护
  • 完善性维护
  • 预防性维护

 

2,软件维护的特点

 

  • 结构化维护与非结构化维护差别巨大
  • 维护的代价高昂
  • 维护的问题很多

 

3,软件维护的过程

 

  • 维护组织
  • 维护文件
  • 维护工作流程
  • 对维护的评价
  • 软件维护的副作用

 

5,软件重用

 

软件重用是指在软件开发,维护过程中不作修改或稍作修改就可以重复使用相同或相似的软件元素的过程。这些软件元素包括应用领域知识、开发经验、设计经验、体系结构、需求分析文档、设计文档、程序代码和测试用例等。对于新的软件开发项目而言,他们是构成整个软件系统的部件,或者在软件开发过程中可发挥某种作用、通常把这些软件元素称为软件构件。

 

6,逆向工程·

 

逆向工程是指根据已有的源代码构造中间产品,包括重新创建设计和规约

 

7,再工程

 

再工程是指在逆向工程所获得信息的基础上,重新进行软件设计,重构已有系统的一个新版本。

你可能感兴趣的:(软件工程知识总结)