软件工程(吕云翔第二版)部分简答题答案

第一章

与计算机硬件相比,计算机软件有哪些特点?

软件工程的基本原则

软件工程研究的内容

软件工程三要素

第二章

如何理解软件生命周期的内在特征?

对比瀑布模型、快速原型模型、增量模型、螺旋模型

在同一软件开发过程模型中核心工作流程包含哪些?

当需求不能一次搞清楚,且系统需求比较复杂时应选用哪种开发模型比较适合?

敏捷过程的核心价值观有哪些?它对传统方法的“反叛”体现在哪些方面?

什么是软件过程?它与软件工程方法学有何关系?

第四章

如何理解需求分析的作用和重要性

如何理解结构化需求分析方法的基本思想

请简述数据字典的作用。

第五章

请简述软件设计与需求分析的关系

请简述软件设计的目标和任务

软件设计如何分类,分别有哪些活动?

什么是模块、模块化软件设计为什么要模块化?

请简述结构化设计的优点

请简述用户界面设计应该遵循的原则

改进的Jackson图与传统的Jackson图相比有哪些优点?

为什么说“高内聚、低耦合”的设计有利于提高系统的独立性?

第六章

与结构化开发过程相比, 为什么面向对象能更真实地反映客观世界?

什么是面向对象方法?面向对象方法的特点有哪些?

什么是类?类与传统的数据类型有什么关系?

UML的作用和优点有哪些?

用例脚本有何作用?

类之间的外部关系有至有几种类型?每种关系表达什么语义?

第七章

请简述面向对象分析的过程。

什么是动态模型?

什么是对象模型?

什么是功能模型?

第八章

软件体系结构的作用体现在哪些方面?

什么是软件质量属性?

MVC模型有什么特点?

良好的软件体系结构设计有什么好处?

第九章

请比较结构化软件设计方法和面向对象软件设计方法

请简述面向对象设计的启发规则。

请简述面向对象的设计原则。

第十章

在选择编程语言时,通常要考虑哪些因素?

请简述编程风格的重要性。要形成良好的编程风格可以从哪些方面做起?

编程语言主要有哪几类?总结每类语言的优缺点。

对标识符命名时,要注意哪些原则?

为什么要对源程序进行注释?

第十一章

请对比白盒测试法和黑盒测试法

软件测试的目的是什么

请简述软件测试的原则

单元测试、继承测试和系统测试各自的主要目标是什么?它们之间有什么不同?相互间有什么关系?

为什么要进行软件维护?软件维护的作用有哪些?

第一章

与计算机硬件相比,计算机软件有哪些特点?

  1. 具有抽象性
  2. 无明显的制造过程
  3. 存在退化问题
  4. 尚未摆脱人工的开发方式
  5. 对计算机系统有着不同程度的依赖性
  6. 软件本身是复杂的
  7. 成本相当昂贵
  8. 相当多的软件工程设计社会因素

软件工程的基本原则

  1. 用分阶段的生命周期计划进行严格的管理
  2. 坚持进行阶段评审
  3. 实行严格的产品控制
  4. 采用现代程序设计技术
  5. 软件工程结果应能被清楚地审查
  6. 开发小组的人员应该少而精
  7. 承认不断改进软件工程实践的必要性

软件工程研究的内容

  1. 软件开发方法
  2. 软件开发模型
  3. 软件支持过程
  4. 软件管理过程

软件工程三要素

过程、方法、工具

第二章

如何理解软件生命周期的内在特征?

软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用以及产品版本的不断更新,到最终该产品被市场淘汰的全过程。软件生命周期这个概念从时间的角度将软件的开发和维护的复杂过程分解为了若干个阶段,每个阶段都完成特定的相对独立的任务。由于每个阶段的任务相对于总任务难度会大幅度降低,在资源分配、时间把握和项目管理上都会比较容易控制。合理地划分软件生命周期的各个阶段,使各个阶段之间既相互区别又相互联系,为每个阶段赋予特定的任务。

对比瀑布模型、快速原型模型、增量模型、螺旋模型

  • 瀑布模型:一种线性开发模型,过程模型简单,容易执行,具有不可回溯性,无法适应变更。

  • 快速原型模型:迅速建造一个可以运行的软件原型,但后续的连续修改会导致产品质量低下。

  • 增量模型:将待开发的软件系统模块化和组件化,但要求待开发的软件可以被模块化。

  • 螺旋模型:将瀑布模型和快速原型模型结合起来,增加了风险分析,但控制管理复杂。

在同一软件开发过程模型中核心工作流程包含哪些?

业务建模、需求、分析和设计、实现、测试和部署

当需求不能一次搞清楚,且系统需求比较复杂时应选用哪种开发模型比较适合?

螺旋模型

敏捷过程的核心价值观有哪些?它对传统方法的“反叛”体现在哪些方面?

核心价值观:

  1. 个体与交互高于过程和工具
  2. 可运行软件高于详尽的文档
  3. 与客户协作高于合同(契约)
  4. 对变更及时响应高于遵循计划

反叛:

  1. 强调灵活性
  2. 客户合作和响应变化
  3. 个体和互动的重要性
  4. 可工作的软件优先

什么是软件过程?它与软件工程方法学有何关系?

软件过程是指为了获得高质量软件产品,在软件工具支持下,由软件人员完成的一系列软件工程活动的框架,软件过程是软件工程方法学的3个重要组成部分之一。

第四章

如何理解需求分析的作用和重要性

需求分析是一个非常重要的过程,它完成的好坏直接影响了后续软件开发的质量。

如何理解结构化需求分析方法的基本思想

结构化的需求分析方法是一种面向数据流的需求分析方法,其中数据作为独立实体转换,数据建模定义了数据的属性和关系,操作数据的处理建模表明当数据在系统流动时处理如何转换数据。

请简述数据字典的作用。

数据字典用于定义数据流图中各个图元的具体内容,为数据流图中出现的图形元素做出确切的解释。

第五章

请简述软件设计与需求分析的关系

软件设计就是要把需求规格说明书中归纳的需求转换为可行的解决方案,并把解决方案反映到设计说明书里。需求分析回答软件系统能“做什么”的问题,而软件设计就是要解决“怎么做的问题”。

请简述软件设计的目标和任务

  1. 实现实现用户需求
  2. 构建清晰的软件结构
  3. 定义系统的架构
  4. 设计合适的算法和数据结构
  5. 定义接口和交互方式
  6. 考虑软件质量属性
  7. 管理复杂性

软件设计如何分类,分别有哪些活动?

数据设计:数据模型、信息模型

体系结构设计:提供软件的整体视图

接口设计:信息如何流入和流出系统

构件设计:描述内部细节,定义数据结构,定义算法细节,允许访问所有接口

部署设计:软件功能和子系统的物理环境分布

什么是模块、模块化软件设计为什么要模块化?

模块是数据说明、可执行语句等程序对象的集合,是构成程序的基本构件,可以被单独命名并通过名字来访问。

软件模块化的目的是建立可重用的软件组件,在不需要修改或仅作少量修改的情况下,可再次用来组建新的软件系统,提高软件的开发周期和可靠性。

请简述结构化设计的优点

结构化设计具有模块化和可维护性、可重用性、可理解性和可读性、错误隔离和调试、灵活性和可扩展性,以及促进合作和并行开发的优点

请简述用户界面设计应该遵循的原则

  1. 至于用户控制之下
  2. 减少用户的记忆负担
  3. 保持页面一致

改进的Jackson图与传统的Jackson图相比有哪些优点?

  1. 可以清晰地表示层次结构,易于对自顶向下的结构进行描述
  2. 结构易懂、易用,并且比较直观、形象
  3. 不仅可以表示数据结构,也可以表示程序结构

为什么说“高内聚、低耦合”的设计有利于提高系统的独立性?

  1. 模块之间的耦合程度越低,相互影响就越小,发生异常后产生连锁反应的概率就越低
  2. 在修改一个模块时,低耦合的系统可以把修改范围尽量控制在最小的范围内
  3. 对一个模块进行维护时,其他模块的内部程序的正常运行不会受到较大的影响

第六章

与结构化开发过程相比, 为什么面向对象能更真实地反映客观世界?

它提供了更灵活、可维护和可扩展的开发方式,使得软件系统更能够符合真实世界的复杂性和多样性。

什么是面向对象方法?面向对象方法的特点有哪些?

面向对象的方法是为了模拟现实世界,使各种不同的现实世界系统在计算机中得以实现,进而为工作、学习、生活提供帮助。

特点:

  1. 把数据和操作封装在一起,形成对象。对象是构成软件系统的基本构件
  2. 把特征相似的对象抽象为类
  3. 类之间可以存在继承或被继承的关系,形成软件系统的层次结构
  4. 对象类之间通过发送消息进行通信
  5. 将对象的私有信息封装起来。

什么是类?类与传统的数据类型有什么关系??

一种数据类型的抽象,用于描述具有相似特征和行为的一组对象。

类是一种自定义的数据类型, 类定义了对象的结构和行为, 类支持封装和抽象。

UML的作用和优点有哪些?

作用:UML是一种通用的可视化建模语言,可以用来描述、可视化、构造和文档化软件密集系统的各种工作。

优点:

  1. UML语言使系统建模过程标准化,统一化,规范化。
  2. UML在整个软件开发过程中采用相同的概念和表示方法,在不同的开发阶段,不必转换概念和表示方法,避免了传统软件开发方法的两个鸿沟。
  3. UML采用图形化的表现形式。产生的模型易于理解,易于开发人员与用户之间的沟通,从而能够及时得到用户的反馈信息。
  4. 用UML进行系统建模所得到的建模制品不仅仅包括各种模型框图,还有大量丰富的文档,这些文档给系统后期的维护工作带来了便捷。
  5. UML不是一门程序设计语言,但可以使用代码生成工具将UML模型转换为多种程序设计语言代码,或使用反向生成工具将程序源代码转换为UML模型。

用例脚本有何作用?

可以被自动化执行,帮助重现缺陷,并提供标准化的测试方法和规范。用例脚本还促进团队协作和评估测试覆盖度,有助于提高测试效率和质量。

类之间的外部关系有至有几种类型?每种关系表达什么语义?

类之间的外部关系:关联、依赖、泛化、实现

关联:表达模型元素间的一种语义关系

依赖:表示的两个元素之间语义上的联系

泛化:描述类的一般-特殊关系

实现:将一个模型连接到另外一个模型

第七章

请简述面向对象分析的过程。

  1. 首先要找到系统的操作者,既用例的参与者
  2. 可以把参与者执行的每一个系统功能都看作一个用例
  3. 确定了系统的所有用例之后,就可以开始识别目标系统中的对象和类了,把具有相似属性和操作的对象定义为了一个类

什么是动态模型?

动态模型描述对象和关系的状态、状态转换的触发事件、对象的服务(行为)。

什么是对象模型?

对象模型描述了现实世界中的“类与对象”以及它们之间的关系,表示了目标系统的静态数据结构。

什么是功能模型?

功能模型表明了系统中数据之间的依赖关系,以及有关的数据处理功能,它由一组数据流图组成。

第八章

软件体系结构的作用体现在哪些方面?

  1. 规范软件开发的基础结构
  2. 便于开发人员与用户的沟通
  3. 模块化、层次化设计,有利于减少返工,提高效率
  4. 便于系统开发前期、后期的筹备与服务

什么是软件质量属性?

软件系统在其生存周期过程中所表现出的各种特征

MVC模型有什么特点?

MVC可以最大化地重用代码,且灵活性极高

良好的软件体系结构设计有什么好处?

能够提高软件系统的质量、可维护性和可扩展性,降低开发和维护成本,并提供更好的用户体验。它是构建高质量软件的基础

第九章

请比较结构化软件设计方法和面向对象软件设计方法

思维方式:

结构化设计方法:采用自顶向下的思维方式

面向对象设计方法:采用自底向上的思维方式

模块化与抽象:

结构化设计方法:强调模块化,将系统划分为独立的模块

面向对象设计方法:强调对象和类的抽象,将系统划分为一组相互关联的对象

数据与行为:

结构化设计方法:将数据和行为分离,通过过程和函数对数据进行操作和处理

面向对象设计方法:将数据和行为封装在对象中,通过对象的方法来操作和处理数据

继承与多态:

结构化设计方法:没有直接支持继承和多态的概念

面向对象设计方法:支持继承和多态

重用性:

结构化设计方法:通过模块化和函数的重用来实现代码的重用性

面向对象设计方法:通过类和对象的重用来实现代码的重用性

封装和信息隐藏

结构化设计方法:没有提供明确的封装和信息隐藏机制

面向对象设计方法:通过类的封装来隐藏内部实现细节

请简述面向对象设计的启发规则

  1. 设计结果应该清晰易懂
  2. 类等级深度应该适当
  3. 要尽量设计简单的类
  4. 使用简单的协议
  5. 使用简单的操作
  6. 把设计的变动减至最小

请简述面向对象的设计原则

  1. 模块化
  2. 抽象化
  3. 信息隐藏
  4. 低耦合
  5. 高内聚
  6. 复用性

请简述系统设计和对象设计。

系统设计关注于确定实现系统的策略和目标系统的高层结构。

对象设计以问题域的对象设计为核心,其结果是一个详细的对象模型。

第十章

在选择编程语言时,通常要考虑哪些因素?

  1. 待开发系统的应用领域,即项目的应用范围
  2. 用户的要求
  3. 将使用何种工具进行软件开发‘
  4. 软件开发人员的喜好和能力
  5. 软件的可移植性要求
  6. 算法和数据结构的复杂性
  7. 平台支持

请简述编程风格的重要性。要形成良好的编程风格可以从哪些方面做起?

重要性:具有良好编程风格的源程序具有较强的可读性、可维护性、同时还能提高团队开发的效率。

①版权和版本声明、②程序版本、③注释、④命名规则、⑤数据说明、⑥语句构造、⑦输入\输出、⑧效率

编程语言主要有哪几类?总结每类语言的优缺点。

机器语言

优点:执行速度快

缺点:对程序员的要求较高,花费时间长,直观性差,容易出错

汇编语言

优点:可高效地访问、控制计算机的各种硬件设备

缺点:不能直接识别汇编语言

高级语言

优点:易懂、易记、易改、移植性较强

缺点:经过解释或编译才能被计算机识别、执行,其效率比汇编语言低

对标识符命名时,要注意哪些原则?

  1. 清晰和可读性
  2. 一致性
  3. 可搜索性
  4. 避免缩写和缩写词
  5. 规范和命名约定
  6. 避免保留字和关键字
  7. 区分大小写
  8. 使用具有描述性的名称
  9. 避免命名的重复

为什么要对源程序进行注释?

注释有利于软件开发人员之间以及开发人员和用户之间进行交流的重要途径,有利于日后的软件维护。

第十一章

请对比白盒测试法和黑盒测试法

黑盒测试:不涉及程序结构,用软件规格说明书生成测试用例,可适用于从单元测试到系统验收测试,某些代码段得不到测试。

白盒测试:考察程序逻辑结构,用程序结构信息生成测试用例,主要适用于单元测试和集成测试,对所有逻辑路径进行测试。

软件测试的目的是什么

发现软件产品中存在的软件缺陷,进而保证软件产品的质量。

请简述软件测试的原则

  1. 不可能完全测试
  2. 测试中有风险存在
  3. 软件测试只能表明缺陷的存在,而不能证明软件产品没有缺陷
  4. 软件产品中所存在的错误数与已发现的错误数成正比
  5. 要避免软件测试的杀虫剂现象
  6. 在软件测试用例时,应包括输入数据和预期输出结果两个部分,并且,输入数据应该包括合法的情况和非法的情况
  7. 集中测试容易出错或错误较多的模块
  8. 应该长期保留所有的测试用例
  9. 使开发人员和测试人员分立
  10. 测试工作应尽早开始,并且贯穿整个开发过程中

单元测试、继承测试和系统测试各自的主要目标是什么?它们之间有什么不同?相互间有什么关系?

单元测试:

目标:验证软件的最小可测试单元的正确性。

继承测试:

目标:验证不同组件或模块之间的交互和集成是否正常。

系统测试:

目标:验证整个软件系统在各种操作条件和环境下的功能和性能是否符合需求。

不同:

单元测试是开发人员在编写代码时的一部分,目的是验证代码的正确性,而继承测试和系统测试是针对整个系统的集成和功能进行测试的阶段。

继承测试是在单元测试之后进行的,它确保各个单元组件能够协同工作。继承测试可以逐步扩大范围,从测试组件之间的接口开始,逐渐增加集成的组件。

系统测试是在继承测试之后进行的最终测试阶段,它验证整个系统的功能和性能。系统测试可以覆盖各种使用场景,以确保系统在实际使用环境中的正常运行。

为什么要进行软件维护?软件维护的作用有哪些?

软件维护对于确保软件的正常运行、满足用户需求、提高软件质量和安全性至关重要,有助于保护软件投资并延长软件的寿命,同时也可以提供更好的用户体验和业务价值。

软件产品的可维护性越高,纠正其错误或弥补其缺陷,对其功能进行扩充或完善时,消耗的资源越少,工作越容易。

  • 6
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
软件工程吕云翔第二版)是一本关于软件工程领域的教材,其中包含了许多重要的知识点。以下是其中一些知识点的介绍: 1. 软件生命周期:软件生命周期是指软件从概念到退役的整个过程。它包括需求分析、设计、编码、测试、部署和维护等阶段。 2. 软件需求工程:软件需求工程是指对软件系统需求进行识别、分析、规范和验证的过程。它包括需求获取、需求分析、需求规格和需求验证等活动。 3. 软件设计原则:软件设计原则是指在软件设计过程中应遵循的一些基本原则,例如单一职责原则、开闭原则、里氏替换原则等。这些原则有助于提高软件的可维护性、可扩展性和可重用性。 4. 软件测试:软件测试是指对软件系统进行验证和验证的过程。它包括单元测试、集成测试、系统测试和验收测试等不同层次的测试。 5. 软件项目管理:软件项目管理是指对软件项目进行计划、组织、协调和控制的过程。它包括项目计划、项目组织、项目进度管理和项目风险管理等活动。 6. 软件质量保证:软件质量保证是指通过制定和执行一系列质量管理活动来确保软件产品的质量。它包括质量计划、质量控制和质量改进等方面。 以上是软件工程吕云翔第二版)中的一些重要知识点。如果您对其中的某个知识点有更具体的问题,我可以为您提供更详细的解答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值