部分内容来源于网络,侵删~

*软件工程概论 复习提纲*

一、基本概念、原理、方法和工具

1、软件工程基本概念

软件危机是指在计算机软件的开发和维护过程中遇到一系列严重问题。

产生软件危机的原因?
一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。

软件工程是指导计算机软件开发和维护的一门****工程学科****。采用工程的概念、原理、技术和方法来 *开发与维护软件* ,把经过时间考验而证明是正确的 *管理技术* 和当前能够得到的最好的 *技术方法* 结合起来,以经济地开发出 *高质量* 的软件并有效地 *维护* 它,这就是软件工程。

软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。

*软件工程方法*学包含3个要素:方法工具过程**

目前使用最广泛的软件工程方法学 ,分别是传统方法学面向对象方法学

传统方法学与面向对象方法学的区别以及各自的优缺点?

  • 传统方法学:也称为生命周期方法学或结构化范型。优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。

  • 面向对象方法学优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。

*软件生存周期*是指一个软件从提出开发要求开始直到软件报废**为止的整个时期。

*软件生命周期*软件定义软件开发运行维护******3个时期****组成。

通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型

软件生存周期八个阶段及其基本任务
①****问题定义*:要解决的问题是什么?
*可行性研究*:研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。
*需求分析*:确定目标系统必须具备哪些功能。
*总体设计*:设计出实现目标系统的几种可能的方案;制定出实现最佳方案的详细计划,设计程序的体系结构。
*详细设计*:设计出程序的详细规格说明,详细的设计每个模块,确定实现模块功能所需要的算法和数据结构。
*编码和单元测试*:写出正确的容易理解、容易维护的程序模块。
*综合测试*:通过各种类型的测试(及相应的调试)使软件达到预定的要求。
*软件维护****:通过各种必要的维护活动使系统持久地满足用户的需要。

可行性研究的目的就是 ****用最小的代价****在尽可能短的时间内确定问题是否能够解决

可行性研究的主要内容包括 *技术* 可行性、 *经济* 可行性和 *操作* 可行性3个方面。

*软件定义分3个阶段*,即问题定义可行性研究需求分析

软件需求分析的目标是深入描述软件的功能和性能,确定软件设计的约束和软件同其它系统元素的接口细节,定义软件的其它有效性需求。

*需求分析过程应该建立3种模型*,分别是数据模型功能模型行为模型

*软件开发时期由4个阶段组成*总体设计详细设计编码和单元测试综合测试。其中前两个阶段称为系统设计,后两个阶段称为系统实现。

简述何谓软件开发方法?请列举四种主要方法。
*软件开发方法*:结构化方法由结构化分析、结构化设计、结构化程序设计构成。它是一种面向数据流的开发方法。结构化方法总的指导思想是自顶向下、逐步求精。它的基本原则是功能的分解与抽象,它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题。
结构化方法、Jackson方法(数据结构)、维也纳开发方法、面向对象开发方法

什么是软件生存周期模型?请至少列举四种主要模型?
答:软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。软件生存周期模型确立了软件开发和演绎中各阶段的次序限制以及各阶段或机动的准则,确立开发过程所遵守的规定和限制,便于各种活动的协调,便于各种人员的有效通信,有利于活动重用,有利于活动管理。

常见的软件生存周期模型有****瀑布模型**演化模型**螺旋模型**喷泉模型****等。

软件生命周期模型的优缺点

  1. 瀑布模型
    1. 优点:有利于大型软件开发过程中人员的组织、管理有利于软件开发方法和工具的研究,从而提高了大型软
      件项目开发的质量和效率.
    2. 缺点:(1)开发过程一般不能逆转,否则代价太大;(2)实际的项目开发很难严格按该模型进行;
  2. 增量模型(演化模型)
    1. 优点:(1)采用增量模型的优点是人员分配灵活,刚开始不用投入大量人力资源;(2)如果核心产品很受
      欢迎,则可增加人力实现下一个增量;(3)可先发布部分功能给客户,对客户起到镇静剂的作用
    2. 缺点:(1)并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构
  3. 螺旋模型
    1. 优点:(1)设计上的灵活性可以在项目的各个阶段进行变更;(2)以小的分段来构建大型系统,使成本计
      算变得简单容易:
    2. 缺点:过多的迭代次数会增加开发成本,延迟提交时间
  4. 喷泉模型(适用于面向对象方法学)
    1. 优点:喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
    2. 缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

软件可靠性是程序在给定的****时间间隔内****,按照规格说明书的规定成功的运行的概率。

软件的可用性是程序在给定的时间点,按照规格说明书的规定,成功的运行的概率。

****软件测试****是通过人工操作或软件自动运行的方式来检验软件是否满足用户需求的过程。

完整的软件测试一般要经过单元测试、集成测试、确认测试和系统测试等4个阶段。

黑盒测试、白盒测试的概念

  • 黑盒测试:将软件看做一个黑盒子,不考虑其内部结构和处理过程,只按照规格说明书的规定,测试软件是否能够正确接收输入数据,产生正确的输出数据。即测试程序是否正确的实现了其功能,又称为“功能测试”。
  • 白盒测试:完全知道程序的内部结构和处理算法,因此可以将程序看作一个透明的白盒子,根据程序内部的逻辑结构测试程序内部的主要执行通路是否能够按照预定的要求正确工作。又称“结构测试”。

软件维护:是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。

软件维护的类型

  • 改正性维护:诊断和改正错误的过程(17%~21%)。
  • 适应性维护:为了和变化了的环境适当地配合而进行的修改软件的活动(18%~25%)。
  • 完善性维护:为了满足在用户提出的增加新功能或修改已有功能的要求和一般性的改进要求(50~66%)。
  • 预防性维护:(4%)

2、软件设计原则、设计模式、软件体系结构风格

设计原理?
模块化;抽象;逐步求精;信息隐藏和局部化;模块独立;

****模块化****是指 把程序划分成独立命名切可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。

*模块划分原则*
衡量模块独立程序的两个定性标准是 *内聚**耦合*模块独立性越强,高内聚低耦合

内聚是用来度量一个模块内部各个元素彼此结合的紧密程度。
内聚分类(程度从低->高):偶然内聚=>逻辑内聚=>时间内聚=>过程内聚=>通信内聚=>顺序内聚=>功能内聚

耦合是对一个软件结构内不同模块之间互连程序的度量。
耦合分类(程度从低->高):无直接耦合=>数据耦合=>标记耦合(特征耦合)=> 控制耦合 => 外部耦合 => 公共耦合

设计原则:

①开闭原则;②单一职责原则;③接口隔离原则;④依赖倒转原则;⑤里氏替换原则;⑥迪米特法则。

*经典软件体系结构风格*

在这里插入图片描述

3、软件工程基本原理和工具

*系统流程图* 是概括地描绘物理系统的传统工具;而 *数据流图* 是系统逻辑功能的图形表示工具。

掌握数据流图的变换流、事务流,以及如何依据数据流图设计出软件功能框架结构图。

程序流程、N-S盒图、PAD

模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图形符号和组织这些符号的规则组成。

分析建模的用处是为了更好地理解复杂事物。

**数据模型中包含3种相互关联的信息:**数据对象、数据对象的属性及数据对象彼此间相互连接的关系。

**结构程序设计的定义:**如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制接口进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

在结构化分析中,用于描述加工逻辑的主要工具有三种,即:结构化语言判定表判定树

数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。

数据字典应该有下列4类元素的定义组成:

①数据流;②数据流分量(即数据元素)③数据存储 ④处理

二、分析设计

图形概述

数据字典

在这里插入图片描述

在这里插入图片描述

程序流程图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

盒图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

PAD 图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

判定表、判定树

某航空公司规定,乘客可以免费托运重量不超过30Kg的行李。当行李重量超过30kg时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常人少一半。用判定表和判定树描述行李计算算法。

左上部列出所有条件,左下部所有可能的动作。右上部是所有各种条件组合,右下部是每种条件组合相对应的动作。

img

img

例题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里答案不标准,使用应该为《includes》,扩展改为《extends》。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

er图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

软件结构图:

在这里插入图片描述

对象模型:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

设计模式:

1、工厂模式类图

在这里插入图片描述

2、实现步骤
  (一)创建一个接口:Shape.java

public interface Shape {
   void draw();
}

(二)创建实现接口的实体类:
Rectangle.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Circle.java

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}

(三)创建一个工厂,生成基于给定信息的实体类的对象:ShapeFactory.java

public class ShapeFactory {
    
   //使用 getShape 方法获取形状类型的对象
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }        
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      return null;
   }
}

(四)使用该工厂,通过传递类型信息来获取实体类的对象:FactoryPatternDemo.java

public class FactoryPatternDemo {

   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();

      //获取 Circle 的对象,并调用它的 draw 方法
      Shape shape1 = shapeFactory.getShape("CIRCLE");
     
      //调用 Circle 的 draw 方法
      shape1.draw();
     
      //获取 Rectangle 的对象,并调用它的 draw 方法
      Shape shape2 = shapeFactory.getShape("RECTANGLE");
     
      //调用 Rectangle 的 draw 方法
      shape2.draw();
     
      //获取 Square 的对象,并调用它的 draw 方法
      Shape shape3 = shapeFactory.getShape("SQUARE");
     
      //调用 Square 的 draw 方法
      shape3.draw();
   }
}

(五)执行程序,输出结果

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐