【软件工程总复习】第一章 软件工程概述

  1. 软件工程定义(名词解释)

概括的说,软件工程是指导软件开发和维护的一门工程学科

软件工程是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。采用工程的概念、原理、技术和方法来开发与维护软件。

软件定义:(简答题)
1. 1983年IEEE的软件定义:
计算机程序、文档、运行程序必须的数据、方法、规则。方法和规则在文档中说明,在程序中实现。
2. 简化软件定义:
软件=程序+文档+数据
数据:是使程序能够适当处理的数据结构
程序:是能够完成预定功能和性能的可执行指令序列
文档:是开发、使用和维护过程程序所需要的图文资料
  1. IEEE的定义(简答题)

1. 是把系统的、规范的、可度量的途径应用于软件开发、运行和维护,也就是把工程应用于软件
2. 研究中提到的途径

3. 软件工程的发展已经历了四个重要阶段:

1、第一代软件工程 — 传统的软件工程
2、第二代软件工程 — 对象工程
3、第三代软件工程 — 过程工程
4、第四代软件工程 — 构件工程
  1. 三要素

软件工程方法学包括3个要素:方法、工具和过程
1. 方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题。
2. 工具:是为运用方法而提供的自动的或半自动的软件工程支撑环境。
3. 过程:是为了获得高质量的软件所需要完成的一系列任务框架,它规定了完成各项任务的工作步骤。

  1. 什么是软件危机(名词解释)

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

软件危机包含两方面的问题:
1. 如何开发软件,以满足对软件日益增长的需求;
2. 如何维护数量不断膨胀的已有软件。
  1. 软件技术

5.1 软件开发技术

软件结构、开发方法、工具与软件工程环境、软件工程标准化

软件工程技术:
软件开发方法学,软件开发工程,软件工程和软件工程环境

5.1.1软件开发(简答题)

软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。 软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。软件分为系统软件和应用软件,并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分

5.1.1.1 系统软件(项目软件)

系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。

一般来讲,系统软件包括操作系统和一系列基本的工具(比如编译器,数据库管理,存储器格式化,文件系统管理,用户身份验证,驱动管理,网络连接等方面的工具),是支持计算机系统正常运行并实现用户操作的那部分软件。

系统软件一般是在计算机系统购买时随机携带的,也可以根据需要另行安装。

5.1.1.2 程序软件(应用软件)

应用软件(Application)是和系统软件相对应的,是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合。

应用软件是为满足用户不同领域、不同问题的应用需求而提供的那部分软件。 它可以拓宽计算机系统的应用领域,放大硬件的功能。

5.2 软件管理技术

质量管理,软件工程经济学:成本估算,计划安排

软件工程管理:
软件管理学,软件经济学,软件心理学软件管理

5.3 两大类开发方法

5.3.1面向过程(面向数据流)

结构化方法是面向数据流的方法

5.3.2 面向对象(第九章)

  1. 软件生存周期

6.1 生命周期划分

软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。

组成:
1. 软件定义:软件定义时期通常进一步划分为3个阶段,即问题定义、可行性研究和需求分析,这个时期的总任务是:
1)确定软件开发工程必须完成的总目标;
2)确定工程的可行性;
3)导出实现工程目标应该采用的策略及系统必须完成的功能;
4)估计完成该工程需要的资源和成本,并且制定工程进度表。
2. 软件开发:开发时期具体设计和实现在前一个时期定义的软件,通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
3. 运行和维护:软件运行和维护的主要任务是使软件持久地满足用户的需求。出现下述三种情况的时候需要进行维护:
1)当软件在使用过程中发现错误时应该加以改正;
2)当环境改变时应该修改软件以适应新的环境;
3)当用户有新要求时应该及时改进软件以满足用户的新需要。

6.2 步骤

软件生命周期各阶段的基本任务:
1. 问题定义:“要解决的问题是什么?”,粗略计划;
2. 可行性研究(粗略、不准确):”是否有行得通的解决方案?“,经济、技术、社会(操作)可行性;
3.需求分析(完整、准确、清晰、具体):”为了解决这个问题,目标系统必须做什么“,目标系统的需求。这里所用到的正式文档通常称为软件需求规格说明书(SRS);
4. 总体设计(概要设计):”概括地说,应该怎样实现目标系统?“,主要是设计出实现目标系统的几种可能的方案。分析每种方案,推荐一个最佳方案并制定出详细计划。设计程序的体系结构。总体设计说明书用来记录总体设计结果。
5. 详细设计(模块设计):”应该怎样具体地实现这个系统呢?“,这个阶段详细地设计每个模块,确定实现模块功能所需要的具体算法数据结构。详细设计说明书是用适当表达工具表达算法和数据结构。
6. 编码和单元测试(实现):关键任务是写出正确的、容易理解的、容易维护的程序模块。程序员把详细设计的结果翻译成用选定的高级编程语言书写的程序,最后对编好的各个模块进行测试(选择语言、工具翻译、详细设计、结果、测试模块);
7. 综合测试:任务是集成测试、系统测试、验收测试
1)集成测试:把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试,通过测试使软件达到预定要求(测试报告:测试计划、测试方案、测试结果);
2)验收测试:是按照软件需求规格说明书的规定(SRS),由用户对目标系统进行验收;
8. 软件维护:是通过各种必要的维护活动使系统持久地满足用户的需要。

6.3 生存周期模型(简答题)

生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。

6.3.1 瀑布模型

特点:
1. 阶段间具有顺序性和依赖性
2. 推迟实现的观点
3. 质量保证的观点(文档、评审)

适合的项目:
1. 在项目开始前,项目的需求很明确
2. 在项目开始前,解决方案也很明确
3.类似的项目如:
1)公司的财务系统
2)库存管理系统
3)短期项目

6.3.2 V模型

适合的项目:
1. 在项目开始前,项目的需求很明确
2. 在项目开始前,解决方案也很明确
3.对系统的性能安全很严格的项目
4.类似的项目如:
1)航天飞机等
2)公司的财务系统

6.3.3 快速原型模型

适合的项目:
1. 在项目开始前,项目的需求不明确
2. 需要减少项目需求的不确定性
3. 类似的项目如:
1)确定显示界面
2)第一次开发的产品,验证可行性

6.3.4 增量模型

适合的项目:
1. 项目开始,明确了需求的大部分,但是需求可能会发生变化
2. 对于市场和用户把握不是很准,需要逐步了解
3. 对于庞大和复杂功能的系统进行功能改进(大系统改造),就需要一步一步实施的。

6.3.5 螺旋模型

对于大型软件,之开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。

螺旋模型沿着螺旋旋转,在四个象限上分别表达了四个方面的活动。
1. 制定计划:确定软件目标,需求和选定实施方案,弄清项目开发的限制条件
2. 风险分析:评估所选方案,考虑如何识别和消除风险
3. 实施工程:实施软件开发,编码,测试等
4. 客户评估:评价开发工作,提出修正建议,规划下期任务

适合的项目:
1. 风险是主要的制约因素
2. 不确定因素和风险限制了项目进度
3. 用户对自己的需求也不是很明确
4. 需要对一些基本的概念进行验证
5. 可能发生一些重大的变更
6. 项目规模很大
7. 项目中采用了新技术

6.3.6 喷泉模型

适合于面向对象开发方法(其它模型面向过程)

特点:
1. 开发过程有分析、系统设计、软件设计和实现4个阶段;
2. 各阶段相互重叠,它反映了软件过程并行性的特点;
3. 以分析为基础,资源消耗成塔型;
4. 反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗;
5. 强调增量开发,整个过程是一个迭代的逐步提炼的过程。

猜你喜欢

转载自blog.csdn.net/weixin_51911075/article/details/128794726