第一章

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

1、无法直接观察计算机软件的物理形态,只能通过观察它的实际运行情况来了解它的功能、特性和质量等;
2、人们在分析、设计、开发、测试软件产品的过程中,以及在软件开发项目的管理过程中,渗透了大量的脑力劳动;
3、不存在像硬件一样的磨损和老化现象,但存在着缺陷维护和技术更新的问题;
4、软件的开发和运行必须依赖于特定的计算机系统环境;
5、具有可复用性。

(2)为什么说软件工程的发展可以在一定程度上解决软件危机的各种弊端?

答: 软件工程就是人们了解决 软件危机而随之诞生的。且软件工程的基本目标也是相对于软件危机出现的原因而设置的。

(3)简述软件工程的基本原则。

答:
(1) 将软件的生命周期划分为多个阶段,对各个阶段实行严格的项目管理。
(2) 坚持阶段评审制度,以确保软件产品的质量。
(3) 实施严格的产品控制,以适应软件规格的变更。在软件开发的过程中,用户需求很可能不断发生变化。
(4) 采用现代程序设计技术。
(5) 开发出来的软件产品应该能够清楚地被审查。
(6) 合理地安排软件开发小组的人员,并且开发小组的人员要少而精。
(7) 不断地改进软件工程实践。

(4)简述软件工程研究的内容。

主要包含以下两个方面

方面 研究
1.软件开发技术 主要研究软件开发方法、软件开发过程、软件开发工具和环境。
2.软件开发过程管理 主要研究软件工程经济学和软件工程管理学。

(5)简述软件工程的三要素。

过程、方法、工具

(6)简述软件工程的目标。

① 达到要求的软件功能
②取得较好的软件性能
③开发出高质量的软件
④付出较低的开发成本
⑤ 需要较低的维护费用
⑥ 能按时完成开发工作,及时交付使用

(7)通常有哪几种软件开发方法?

答:
①结构化方法
②面向数据结构方法
③面向对象方法
④形式化方法

(8)列举你所知道的软件工程工具

编写C/C++的Dev C++ 和 Codeblocks以及Visual Studio
编写Java的Eclipse和IntelliJ Idea 等等

第二章

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

答:软件产品的生命周期是指
从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试和验收、投入使用,以及产品版本的不断更新,到该产品最终被市场淘汰的全过程。

软件生命周期这个概念从时间的角度将软件的开发和维护的复杂过程分解为若干个阶段,每个阶段都完成特定的、相对独立的任务。
在软件的开发过程中每一个阶段都不可缺少,合理地划分软件生命周期的各个阶段,使各个阶段之间既相互区别又相互联系,为每个阶段赋予特定的任务,这些都是软件开发项目成功的重要因素。

(2)请对比瀑布模型、快速原型模型、增量模型和螺旋模型。

答:
(一)瀑布模型(1980):它是一种线性的开发模型,具有不可回溯性。开发人员必须等前一阶段的任务完成后,才能开始进行后一阶段的工作,并且前一阶段的输出往往就是后一阶段的输入。
它的优点:过程模型简单,执行容易
它的缺点:无法适应变更。
它适用于具有以下特征的软件开发项目:① 在软件开发的过程中,需求不发生或发生很少的变化,并且开发人员可以一次性获取全部需求。否则,由于瀑布模型较差的可回溯性,在后续阶段需求经常性地变更需要付出高昂的代价。 ②软件开发人员具有丰富的经验,对软件应用领域很熟悉。③ 软件项目的风险较低。该模型不具有完善的风险控制机制。

(二)快速原型模型(语言unix shell和超文本):它允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;该模型的基本思想实施快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。然后根据用户试用之后提出的许多修改意见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用······反反复复地改进,直到原型系统满足用户的要求。
它适用于具有以下特征的软件开发项目:① 已有产品或产品的原型(样品),只需客户化的工程项目。② 简单而熟悉的行业或领域 ③ 有快速原型开发工具 ④ 进行产品移植或升级

(三)增量模型:该模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。
该模型的最大特点就是将待开发的软件系统模块化和组件化。
它的优点:① 将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。② 以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。③ 开发顺序灵活。开发人员可以对构件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。
它适用于具有以下特征的软件开发项目:① 软件产品可以分批次地进行交付 ② 待开发的软件系统能够被模块化 ③ 软件开发人员对应用领域不熟悉,难以一次性地进行系统开发。④ 项目管理人员把握全局的水平较高。
(四)螺旋模型:该模型是一种风险较大的大型软件项目开发的过程模型。它把瀑布模型与快速原型模型结合起来,并且加入了这两种模型所忽略了的风险分析。它把开发过程分为制定计划、风险分析、实施工程和客户评价4种活动。
它的优点:将风险分析扩展到各个阶段中,大幅度降低了软件开发的风险。
它的缺点:该模型的控制和管理较为复杂,可操作性不强,对项目管理人员的要求较高。
它适用于风险较大的大型软件项目的开发。

(3)在统一软件开发过程模型中,核心工作流程包含哪些?

答:核心工作流程有业务建模、需求、分析和设计、实现、测试和部署。

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

答:选择螺旋模型,当需求不太清楚且系统复杂的时候,也就意味着风险较大,同时螺旋模型也是一种综合性的模型。

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

答:(健康码)
核心价值观:
①个体与交互高于过程和工具
②可运行软件高于详尽的文档
③与客户协作高于合同(契约)
④对变更及时响应高于遵循计划

体现:敏捷方法对传统方法的“反叛”体现在以人为中心,不再依靠文档来控制过 程,认为传统过程过于僵化,文档繁琐,主张对传统过程“瘦身”,在上述价 值观的支配下,做到能够为准。

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

软件的诞生和生命周期是一个过程,成为软件过程。
软件工程方法学的三要素是:过程、方法和工具,
软件过程是其的一个重要要素。

极限编程

软件需求模糊且容易改变
团队少于10人
开发点集中
强调用户需求和团队工作

实践性较强的规范化软件开发方法

第三章

可行性研究总结

1.可行性研究的任务

(高度凝练的系统分析和设计过程)

可行性研究的基本任务,是对新建或改建项目的主要问题,从技术经济角度进行全面的分析研究,并对其投产后的经济效果进行预测,在既定的范围内进行方案论证的选择,以便最合理地利用资源,达到预定的社会效益和经济效益。

2.简述技术可行性

通过对待开发系统的功能、性能和限制条件,确定现有技术是否能实现相关的解决方案,以及在现有资源条件下实现的技术风险有多大。
ps.技术可行性是系统开发过程中难度最大的工作,可行性研究的关键!

3.简述操作可行性

在给定的工作环境(政治意识形态,法律法规,社会道德,民族意识,系统运行的组织机构,人员环境)下能否正常运行或运行好坏成度的衡量

4.简述经济可行性

(成本-效益分析)
评估项目经济合理性,估算成本与预期利润比
一般由四部分组成:
购置并安装软硬件及相关设备的费用
项目开发费用
软硬件系统安装、运行和维护费用
人员培训费用

5.软件成本估算

1.代码行技术
2.任务分解技术(总任务拆分多个相对独立任务,再加起来)

6.可行性研究步骤

1.明确系统目标
2.分析研究现行系统
3.设计新系统的高层逻辑模型
4.获得并比较可行的方案
5.撰写可行性研究报告

7.项目开发计划目的

(一)研发项目计划的目的
研发项目计划的目的是为了确定整个研发项目在时间、资金、人员等方面的安排,从各方面保证研发项目在执行过程中的效率和效益。更细致地来说,研发项目计划的目的包括以下5个方面:
1.确定并描述各项任务(活动)范围;
2.确定全部人员;
3.制定时间进度表;
4.阐明必需的人力、财力、物力;
5.确定预算。
(二)研发项目计划的作用
1.指导研发项目实施,使研发项目实施人员明确自己的职责,便于自我管理和自我激励;另一方面,使得一些支持性工作以及并行工作及时得到安排,避免因计划不周造成各子流程之间的相互牵掣。
2.将研发项目计划的目标、假设、前提与最终选择确定研发项目方案的决策过程写成书面文件,使得小组和有关管理人员,对研发项目有关事项,如资源配备、风险化解、人员安排、时间进度、内外接口等形成共识,形成事先约定。
3.有效的支持管理,帮助研发项目有关人员之间的交流沟通,有助于大家统一认识。
4.确定评价研发项目进展、对研发项目进行控制和考核绩效基准,便于研发项目实施过程的控制。
5.计划是研发项目总的输入之一,实质就是把实际运行情况与研发项目计划不断比较以提炼经验教训的过程。通过计划和总结,研发项目过程中的经验和教训被很好地记录和升华,成为组织财富。

第四章

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

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

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

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

5.简述数据字典的作用。

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

一·数据流图基本图形符号

加工、数据流、数据存储和外部实体

二·需求分析主要目的

您好,这是必应。根据我的搜索结果,需求分析的主要目的是把用户对待开发软件提出的“要求”或“需要”进行分析与整理,确认后形成描述完整、清晰与规范的文档,确定软件需要实现哪些功能,完成哪些工作²³。需求分析可以帮助避免或尽早剔除项目早期错误,从而提高生产率、降低开发成本、改进系统质量³。

源: 与必应的对话, 2023/5/7
(1) 需求分析(软件工程学术语)_百度百科. https://baike.baidu.com/item/需求分析/2012709.
(2) 需求分析怎么做? - 知乎. https://www.zhihu.com/question/323125580.
(3) [需求管理-3]:什么是需求分析?常用的需求分析的流程与方法 …. https://bing.com/search?q=%e9%9c%80%e6%b1%82%e5%88%86%e6%9e%90%e4%b8%bb%e8%a6%81%e7%9b%ae%e7%9a%84.
(4) 需求分析的目的和主要任务是什么. https://www.weidianyuedu.com/content/0317935758205.html.
(5) 为什么要进行需求分析?通常对软件系统有哪些需求? - CSDN博客. https://blog.csdn.net/azgu84837027/article/details/102205816.

三·常用的需求获取的方法有以下几种¹²⁴⁵⁶:

  • 用户访谈:通过与用户进行一对一或一对多的沟通,了解用户的需求、问题、痛点和期望¹²⁵。
  • 用户调查:通过设计问卷,收集用户的反馈和数据,量化用户的需求和满意度¹²⁴⁵。
  • 现场观摩:通过观察用户在实际场景中使用产品或服务的过程,发现用户的行为和问题¹²⁵。
  • 文档考古:通过查阅相关的文档、资料、报告等,获取用户的背景信息和业务流程¹²⁵。
  • 建立联合分析小组:通过邀请不同角色的人员参与需求分析,利用他们的专业知识和经验,提高需求的质量和可行性¹⁵。
  • 原型法:通过制作产品或功能的原型,让用户进行实际体验和测试,收集用户的反馈和建议¹⁵。
  • 模型驱动:通过使用一些分析模型,如3W、5W1H、卡诺模型、马斯洛需求层次理论等,对用户需求进行深入分析和挖掘²³。

源: 与必应的对话, 2023/5/7
(1) 简述需求获取的方法,工具和要注意的问题-CSDN博客. https://bing.com/search?q=%e5%b8%b8%e7%94%a8%e7%9a%84%e9%9c%80%e6%b1%82%e8%8e%b7%e5%8f%96%e7%9a%84%e6%96%b9%e6%b3%95.
(2) 需求采集:4种方法 - 知乎. https://zhuanlan.zhihu.com/p/33004868.
(3) 软件工程中,需求获取有哪些方法?-百度经验. https://jingyan.baidu.com/article/1974b28951e687f4b0f77466.html.
(4) 需求分析:需求调研的七种方法 - CSDN博客. https://blog.csdn.net/yang_changchun/article/details/53781453.
(5) 软件工程问题_如何理解需求分析的作用和重要性_lyking07的 …. https://blog.csdn.net/qq_46511838/article/details/111305294.
(6) 产品经理必备之常用需求挖掘的7个方法 | 人人都是产品经理. https://www.woshipm.com/pmd/3259942.html.

第五章

1.简述软件设计与需求分析的关系。

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

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

答:模块是数据说明、可执行语句等程序对象的集合,是构成程序的基本构件,可以被单独命名并通过名字来访问。
模块化是把系统或程序划分为独立命名并且可以独立访问的模块,每个模块完成一个特定的子功能。
软件模块化的目的是建立可重用的软件组件,在不需要修改或仅作少量修改的情况下,可再次用来组建新的软件系统,提高软件的开发周期和可靠性。

7.简述面向数据流的设计方法的主要思想。

答:主要是指依据一定的映射规则,将需求分析阶段得到的数据描述、系统的输入端到输出端所经历的一系列变换或处理的数据流图转换为目标系统的结构描述

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

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

一·判定表:

根据输入做出不同响应的工具

判定表 具体
优点 判定表充分考虑了输入域之间的组合情况,每条规则覆盖了多条输入条件,考虑输入的约束关系,降低了漏测的风险。同时利用判定表可推断出需求规格本身的逻辑性,反向证明了需求的正确。
缺点 当输入项过多时,规则数以2的n次方剧增,判定表会非常庞大,采用判定表合并时会造成逻辑缺失,业务混乱错误的情况。

二·结构化设计(SD)

是一种面向数据流的设计方法
强调程序规范化

第六章

类:

具有相似内部状态和运动规律的实体的集合

对象:

现实世界中各种各样的实体

消息:

消息是指对象间相互联系和相互作用的方式

UML:

一种标准的图形化建模语言,是面向对象分析与设计的一种标准表示。
不是一种程序设计语言

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

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

把数据和操作封装在一起,形成对象。对象是构成软件系统的基本构件
把特征相似的对象抽象为类

类之间可以存在继承或被继承的关系,形成软件系统的层次结构
对象类之间通过发送消息进行通信
将对象的私有信息封装起来。

6.UML的作用和优点有哪些?

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

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

答:类之间的外部关系:关联、依赖、泛化、实现
关联:表达模型元素间的一种语义关系
依赖:表示的两个元素之间语义上的联系
泛化:描述类的一般-特殊关系
实现:将一个模型连接到另外一个模型

第七章

状态图

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应

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

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

5.什么是动态模型?

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

6.什么是对象模型?

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

7.什么是功能模型?

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

第八章

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

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

4.什么是软件质量属性?

答:软件质量属性是指软件系统在其生存周期过程中所表现出的各种特征

5.客户机/服务器体系结构有什么特点?

答:通过合理地划分三层结构,使之在逻辑上保持相对独立,提高系统的可维护性和可扩展性能更灵活地选用相对应的平台和应用系统,使之在处理负荷能力上与处理特性上分别适应各层的要求;并且这些平台和组成部分可以具体良好的可升级性和开放性
应用的各层可以独立地并行开发,每层可以根据自己的特点选用合适的开发语言
安全性相对较高,应用层屏蔽了客户直接访问数据库的权利,使得未授权用户或黑客难以绕过应用层直接获取敏感数据,为数据的安全管理提供了系统结构的支持

6.MVC模型有什么特点?

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

一·C/S结构一般有两种形态

模型 服务器 客户机
瘦客户机模型 数据管理和应用逻辑都在服务器端执行 只负责表示
胖客户机模型 只负责管理数据 客户机上的软件实现应用逻辑以及与系统的交互
C/S两层三层及多层

二·面向对象设计的特性

封装,继承,多态(复用性)
详细

三·面向对象设计阶段的主要任务是

系统设计和对象设计

第九章

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

答:①模块化、②抽象化、③信息隐藏、④低耦合、⑤高内聚、⑥复用性

4.简述系统设计和对象设计。

答:系统设计关注于确定实现系统的策略和目标系统的高层结构。
对象设计以问题域的对象设计为核心,其结果是一个详细的对象模型

第十章

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

答:重要性:具有良好编程风格的源程序具有较强的可读性、可维护性、同时还能提高团队开发的效率。良好的个人编程风格是一个优秀程序员素质的一部分。
①版权和版本声明、②程序版本、③注释、④命名规则、⑤数据说明、⑥语句构造、⑦输入\输出、⑧效率

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

编程语言 优点 缺点
①机器语言 执行速度快 对程序员的要求较高,花费时间长,直观性差,容易出错
②汇编语言 可高效地访问、控制计算机的各种硬件设备 不能直接识别汇编语言
③高级语言 易懂、易记、易改、移植性较强 经过解释或编译才能被计算机识别、执行,其效率比汇编语言还低
④超高级语言 易懂、易记、易改、移植性较强 经过解释或编译才能被计算机识别、执行,其效率比汇编语言还低

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

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

第十一章

1.基本路径法

G的环路复杂度V(G)=E-N+2(E为流图边数,N为流图节点数)
=P+1(p为G中判定节点数)
步骤:
1.导出控制流图(先画一个圈1代表开始根据代码判断多少个if一路画最后再画个圈,所有if结果都指向这个圈。即相对于代码要多俩圈)
2.计算环路复杂度V(G)
3.确定线性无关的路径的基本集(ps·就是所有不重复的从圈1推到圈最终点)
4.生成测试用例,确保基本路径中每条路径(就那几个有效值带入,写个输入和输出)

2.应用题答案

3.黑百盒测试区别