第一章 软件工程概述
Q1 软件的定义
软件 = 程序 + 数据 + 文档
- 程序:按事先设计的功能和性能需求执行的指令序列。
- 数据:程序能正常操纵信息的数据结构。
- 文档:与程序开发、维护和使用有关的图文材料。
Q2 软件的特点/特征
- 软件是逻辑产品,是设计开发的,不是生产制造的。
- 软件开发的环境对产品影响较大。
- 软件开发的时间和工作量难以估计,几乎无客观的衡量标准。
- 软件生产是简单的拷贝,但大多数都是定制。
- 软件完全测试非常困难。
- 软件不会磨损和老化,但会经历多次修改。
- 软件维护易产生新的问题。
Q3 软件危机的概念
在计算机软件的开发和维护过程中所遇到的一系列严重问题。
- 项目超出预算
- 项目超过计划完成时间
- 软件运行效率很低
- 软件质量差
- 软件通常不符合要求
- 项目难以管理并且代码难以维护
- 软件不能交付
Q4 软件危机产生的原因:
- 客观原因:软件本身的特点
- 软件是逻辑部件,缺乏可预见性。
- 软件维护困难。
- 软件越来越庞大复杂,需要分工协作。
- 主观原因:不正确的开发方法
- 需求分析不充分或者存在错误。
- 开发过程不规范,错误地认为软件开发等于程序编写。
- 不注重文档工作,软件难以维护。
Q5 解决软件危机的方法
- 对计算机软件有一个正确的认识。
- 认识到软件开发是一个组织良好、管理严密、各类人员协同配合共同完成的工程项目。
- 推广和使用在实践中总结出来的成功开发软件的技术和方法。
- 开发和利用更好的软件工具。
Q6 IEEE计算机协会将软件工程定义为
- 应用系统化的、学科化的、定量的方法来开发、运行和维护软件,即将工程运用到软件。
- 对1中各种方法的研究。
Q7 软件工程的目标
软件工程的目标是在给定的时间和预算内,按照用户的需求,开发易修改、高效、可靠、可维护、适应力强、可移动、可重用的软件。
Q8 软件工程的层次(三要素)
- 工具:它为软件工程的过程和方法提供自动化或半自动化的工具支持。
- 方法:软件工程方法是完成软件工程项目的技术手段。
- 过程:过程贯穿于软件开发的各个环节,在各个环节之间建立里程碑。

Q9 软件工程的发展已经历了四个重要阶段:
- 第一代软件工程 — 传统的软件工程
- 第二代软件工程 — 对象工程
- 第三代软件工程 — 过程工程
- 第四代软件工程 — 构件工程
Q10 软件工程的七原则
- 使用阶段性生命周期计划的管理。
- 进行连续的验证。
- 保证严格的产品控制。
- 使用现代化编程工具/工程实践。
- 保持清晰的责任分配。
- 用更少更好的人。
- 保持过程改进。
Q11 软件的分类
- 系统软件
操作系统、数据库管理系统、设备驱动程序、通信处理程序。 - 支撑软件
文本编辑程序、文件格式化程序、程序库程序。 - 应用软件
第二章 过程模型
Q1 软件过程的定义
软件过程可以定义软件生产的一系列活动,这些活动贯穿于软件开发的整个过程。
五个步骤(通用模型)
- 沟通:包括软件设计者与客户沟通、客户提出要求、软件设计者收集资料以及其他相关活动。
- 计划:软件开发小组讨论使用何种方法以及何种工具来实现客户需求。
- 建模:软件开发小组讨论选择何种模型来满足需求,不同的需求需要不同的模型。
- 构造:编码和测试。
- 部署:软件交付给客户,客户给出意见和反馈,软件实施小组改进软件。
软件生命周期的概念
软件有一个从孕育、诞生、成长、成熟到衰亡的生存过程,这个过程即软件生命周期。
Q2 能力成熟度模型
- 初始级:工作无序,缺乏健全的管理制度。(有能力的人和个人英雄主义)
- 可重复级:管理制度化,建立了基本的管理制度和规程,初步实现标准化。(基本的项目管理)
- 已定义级:过程标准化,工作和管理工作均已实现标准化、文档化。(过程标准化)
- 量化管理级:产品和过程已建立了定量的质量目标,开发活动中的生产率和质量是可度量的。(量化管理)
- 优化级:持续的过程改进,拥有防止出现缺陷、识别薄弱环节以及加以改进的手段。(持续的过程改进)
Q3 软件过程模型
软件过程模型是软件开发的全部过程、活动和任务的结构框架。它能直观地表达软件开发的全过程,明确规定要完成的主要任务和开发策略。
软件过程模型也常被称为:软件开发模型、软件生存周期模型、软件工程范型。
Q4 瀑布模型
软件开发过程与软件生命周期是一致的。规定了各项软件工程活动,以及它们自上而下相互衔接的固定次序。是以文档为驱动的模型。
- 特点:
- 阶段间具有顺序性和依赖性。
- 推迟实现的观点。
- 每个阶段必须完成规定的文档,每个阶段结束前完成文档审查,及早更正错误。
- 每个阶段都有与其相关联的里程碑和可交付产品。
- 缺点:
- 线性模型太过理想化
- 各个阶段划分完全固定,阶段间产生大量文档,极大的增加了工作量。
- 由于开发模型是线性的,用户只有等到整个开发过程的末期才能见到开发成果,从而增加了开发风险。
- 早期的错误要等到开发后期的测试阶段才能发现,进而带来了严重的后果。
- 优点
- 在消除软件非结构化,促进软件开发工程化方面起到了很大的作用,提供了软件开发的基本框架。
- 适用场合
- 瀑布模型适用于需求明确、技术成熟、工程管理较为严格的场合。
Q5 推迟实现的观点
- 过早地考虑程序的实现,常常导致大量返工,有时甚至给开发人员带来灾难性的后果。
- 瀑布模型在编码以前安排了分析阶段和设计阶段,并且明确宣布,这两个阶段都只考虑目标系统的逻辑模型,不涉及软件的物理实现。
- 把逻辑设计与物理设计清楚地划分开来,尽可能推迟程序的物理实现,这是瀑布型软件开发的一条重要的指导思想。
Q6 增量过程模型(RAD、增量模型)
增量模型:是一种非整体的开发模型,进化式的开发过程。
具体方法:它允许从部分软件定义出发,先建立一个不完整的系统,通过测试这个系统取得经验和反馈,进一步扩充和完善系统。如此反复进行,直至软件人员和用户对所设计的软件系统满意为止。
- 增量模型的特点
- 增量是小而可用的软件。
- 在前面增量的开发基础上开发后面的增量。
- 每个增量的开发可以使用瀑布模型或者原型模型。
- 迭代的思路。
- 增量模型的优点
- 不需要提供完整的需求,只要有一个增量包的出现,开发就可以进行。
- 在项目初始阶段不需要投入太多的人力资源。
- 增量可以有效地管理技术风险。
- 软件能够较早的进入市场。
- 增量模型的缺点
- 每个增量必须提供一些系统功能,这使开发者很难根据用户需求给出大小合适的增量。
- 软件必须具备开放式的体系结构。
- 易退化成边做边改的模式,使软件开发失去整体性。
- 适用场合
- 适用于软件开发需求可能发生变化,具有较大风险或者希望尽早进入市场的项目。
Q7 快速应用开发模型
快速应用开发模型是一个增量过程模型,强调短暂的开发周期。快速应用开发模型是瀑布模型的高速变体,基于组件的构建方法实现。
- RAD模型的缺点
- 对于大型项目而言,RAD需要足够多的人力资源。
- 开发者和客户都要实现承诺,否则将导致项目的失败。
- 并非所有的系统都适合(不能合理模块化的系统、高性能需求的系统、技术风险很高的系统均不适合)。
Q8 演化模型
演化模型的思想是首先实现软件最核心、最重要的功能。包括原型模型和螺旋模型。
Q9 原型模型
- 适用情况
- 客户定义了一个总体目标集,但不清楚系统的具体输入输出。
- 开发者不确定算法的效率、软件与操作系统是否兼容以及客户与计算机的交互方式。
- 优点
- 减少需求不明确带来的风险。
- 缺点
- 设计者在质量和原型之间有所折中。
- 客户意识不到一些质量问题。
- 快速建立起来的系统加上连续的修改可能会导致原型质量低下。
- 构造原型所采用的工具不一定主流。
Q10 螺旋模型
螺旋模型结合了瀑布模型和原型模型的特点。螺旋模型强调风险管理,因此该模型适用于大型系统的开发。螺旋模型的四个象限分别代表了:制定计划、风险分析、实施工程、客户评估。
- 螺旋模型的优点
- 支持用户需求的动态变化。
- 原型可以看作形式的,可执行的需求规格说明,易于用户和开发者的共同理解,还可以作为继续开发的基础,并为用户参与所有关键决策提供了方便。
- 螺旋模型强调原型的可扩充性和可修改性。原型的进化贯穿整个软件生存周期,有助于目标软件的适应能力。
- 螺旋模型为项目管理人员及时调整管理决策提供了方便,进而降低了风险。
- 螺旋模型的缺点
- 如果每次迭代的效率不高,致使迭代的次数过多,将会增加成本,推迟提交时间。
- 需要丰富的风险评估经验和专门的知识,要求开发队伍水平较高。
Q11 喷泉模型
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
- 优点

最低0.47元/天 解锁文章
1703

被折叠的 条评论
为什么被折叠?



