软件工程思考题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章基本概念
1.软件的特点是什么?
软件的定义:软件=程序+数据+文档
软件的特点:
1)软件是逻辑实体;具有抽象性;软件的形态不可见;--必须通过观察、分析、思考、判断来了解其功能、性能和其它特性。

2)软件是人脑思维的产物,其生产过程与硬件不同。

--开发过程的质量控制及软件产品保护问题。

3)软件的开发和运行受计算机系统限制。

--软件移植问题。

4)软件的开发技术落后,手工开发方式仍占统治地位。

--开发效率低。

2.2006年发布的国家分类标准是什么?
1)按功能:系统软件、支撑软件、应用软件
2)按规模:微型软件、小型软件、大型软件、甚大型软件、极大型软件
3)按工作方式:实时处理软件、分时软件、交互式软件、批处理软件
4)按服务对象:项目软件、产品软件
5)按使用频度:使用频度低、使用频度高
6)按失效影响:不良影响、严重影响
3.软件危机的表现有哪些?
1)软件开发进度难以预测
2)软件开发成本难以控制
3)用户对产品功能难以满足
4)软件产品质量无法保证
5)软件产品难以维护
4.产生软件危机的原因?
1)用户需求不明确
2)缺乏正确的理论指导
3)软件开发规模越来越大
4)软件开发复杂度越来越高
5.什么是软件工程三要素?
软件工程的三要素:方法、工具和过程。

6.软件工程的基本目标是什么?
①付出较低的开发成本
②达到要求的软件功能
③取得较好的软件性能
④开发的软件易于移植
⑤需要较低的维护费用
⑥能按时完成开发工作,及时交付使用
7软件工程的基本原则是什么?
①抽象:采用分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复
杂性。

②信息隐蔽:将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块
的使用者直接访问。

这就是信息封装,使用与实现分离的原则。

③模块化:如C语言程序中的函数过程,C++ 语言程序中的类。

模块化有助于
信息隐蔽和抽象,有助于表示复杂的系统。

④局部化:要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模
块之间具有松散的耦合,模块内部具有较强的内聚。

这有助于控制解的复杂性。

⑤确定性:软件开发过程中所有概念的表达应是确定的、无歧义性的、规X的。

⑥一致性:整个软件系统的各个模块应使用一致的概念、符号和术语。

程序内
部接口应保持一致。

软件和硬件、操作系统的接口应保持一致。

系统规格说明与系统行为应保持一致。

用于形式化规格说明的公理系统应保持一致。

⑦完备性:软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程
度。

为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。

⑧可验证性:开发大型的软件系统需要对系统自顶向下、逐层分解。

系统分解
应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。

8.软件工程的基本原理是什么?
①用分阶段的生命周期严格管理;
②坚持进行阶段评审;
③实行严格的产品控制;
④采用现代程序设计技术;
⑤结果应能清楚地审查;
⑥开发小组人员应少而精;
⑦承认不断改进软件工程实践的必要性。

9.瀑布模型有什么特点?
1)最早出现的软件开发模型,它提供了软件开发的基本框架。

2)瀑布模型的本质是一次通过,即每个活动只执行一次,最后得到软件产品。

3)瀑布模型有利于大型软件开发过程中人员的组织及管理,有利于软件开发方
法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。

4)里程碑或基线驱动,或者说文档驱动;
瀑布模型的缺陷:
①由于开发模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软
件的效果。

这样软件与用户见面的时间间隔较长,也增加了一定的风险。

②在软件开发前期末发现的错误传到后面的开发活动中时,可能会扩散,进
而可能会造成整个软件项目开发失败。

③在软件需求分析阶段,完全确定用户的所有需求是比较困难的,甚至可以
说是不太可能的。

瀑布模型即生存周期模型,其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。

瀑布模型将软件生命周期划分为软件计划、需求分析和定义、软件设计、软件编码、软件测试、软件运行维护6个阶段,规定了他们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。

10.说明生命周期的划分?
一个软件从定义、开发、使用和维护,直到最终被废弃,所经历的生存过程称为软件生存期或叫生命期。

包括计划、需求分析、软件计划、程序编码、软件测试和运行维护6各阶段。

11.列出软件生存期的几个主要模型?
瀑布模型、原型模型、螺旋模型、增量模型、构件组装模型、统一过程模型、第四代技术
12.瀑布模型软件开发方法的基本过程?
定义阶段:计划、需求分析
开发阶段:设计、编码、测试
维护阶段:运行维护
13.增量模型有什么特点?
1)融合了线性顺序模型的基本成份和原型实现模型的迭代特征。

2)增量模型采用随着日程时间的进展而交错的线性序列。

每一个线性序列产生
软件的一个可发布的“增量”。

3)增量模型强调每一个增量均发布一个可操作产品。

早期的增量是最终产品的
“可拆卸”版本,但他们确实提供了给用户服务的功能,并且提供了给用户评估的平台。

将软件产品看作一组增量构件,每次设计、实现、集成、测试和交付一块构件,直到所有构件全部实现为止。

特点:
1)任务或功能模块驱动,可以分阶段提交产品;
2)有多个任务单,这些多个任务单的集合,构成项目的一个总任务书(总用户需
求报告)。

14.几种主要的软件开发方法?
1)结构化开发方法
2)面向对象的方法
15.软件工程的“五个面向”?
1)面向流程分析2)面向数据设计3)面向对象实现
4)面向功能测试5)面向过程管理
第二章软件策划
2.可行性分析最为敏感的方面是什么?
⑴经济可行性:经济效益能否超过开发成本?
⑵技术可行性:现有技术能否实现?技术风险的各种因素?
⑶操作可行性:用户的接受程度如何?
⑷法律可行性:是否合法,是否侵犯他人的利益。

6.甘特图有哪些优点和缺点?
甘特图:是一种对各项活动进行计划调度与控制的图表。

横向表示时间,纵向列出任务。

优点:它具有简单、醒目和便于编制等特点。

能够动态反映软件项目开发进展的情况。

缺点:难以反映多个任务之间存在的复杂的逻辑关系。

7.什么是网络计划法的关键事件与关键路径?
关键事件:最早完成时间与最迟完成时间相等的事件。

关键路径:关键事件联结的各个活动所组成的路线。

第三章结构化需求分析
1.为什么说需求获取难?
1)用户需求具有动态性(不稳定性)。

2)用户需求具有模糊性(不准确性)。

3)对需求达成一致的艰难性。

4)管理体制、机构设置处在变革中。

5)软件书籍没有将需求分析讲清楚。

2.需求分析的重点是哪些?
通过对业务流程和数据流程的分析,在以下四个方面与客户要达成完全一致目标。

①业务模型、
②功能模型、
③性能模型、
④接口模型。

3.需求分析的9大任务是什么?
①画出系统的组织结构图、列出各部门的岗位角色(机构模型)。

②画出系统业务操作流程图。

③画出系统的数据流图,掌握业务规则,获得初步数据模型。

④列出系统的功能点,即功能模型。

⑤列出系统的性能点,即性能模型。

⑥列出系统的接口,即接口模型。

⑦确定系统的运行环境,即环境模型。

⑧确定系统的界面约定,即界面模型。

⑨对开发工期、费用、开发进度、系统风险等分析与评估。

4.简述需求分析的过程?
需求分析阶段的工作有以下四个方面:
1)问题识别
2)分析与综合
3)编制需求分析阶段文档
4)需求分析评审
5.获取需求的常用方法有哪些?
①访谈/个别访问:正式的和非正式的访谈
②问卷调查/书面调查:发电子、问卷调查即把需要调查的内容制成表格交给
用户填写。

该方法对需要调查大量人员的意见时,十分有效。

③情景分析/和电视会议:对目标系统解决某个具体问题的方法和结果,给出可
能的情景描述,以获知用户的具体需求。

④实地考察/收集资料:开调查会参加业务实践
⑤构造原型
6.需求分析的原则是什么?
①解决逻辑问题:需求分析是对问题的识别和说明,要回答“做什么”,而不是
“怎么做”。

②以运行环境为基础:需求分析工作应以具体的运行环境为基础,实事求是。

③用户参与的原则:需求分析工作是系统分析人员同用户不断交互的过程。

④构造高质量的需求规格说明:需求规格说明是需求分析工作重要的完成标志。

7.需求分析的基本要求是什么?
①理解问题的数据域和功能域
②自顶向下、逐层分解
③给出系统的逻辑视图和物理视图
8.常见的需求分析方法有哪些?
①面向数据流的分析方法
②面向功能的分析方法
③面向数据的Jackson方法
④面向对象的分析方法
9.需求分析方法有哪些共性?
1.支持数据域的分析机制
2.功能表示方法
3.接口的定义
4.问题的分解及抽象化
5.逻辑视图和物理视图
6.系统抽象模型
第四章结构化软件设计
思考题4.1
1.软件设计的具体任务包括哪些内容?
(1)制定规X
(2)结构设计
(3)处理方式设计
(4)数据结构及数据库设计
(5)可靠性设计(质量设计)
(6)编写软件设计文档
(7)设计审查和复审
(8)详细设计
2.什么是数据的保护性设计?
1)防卫性设计:在软件设计中就插入自动检错,报错和纠错的功能
2)一致性设计:在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏
3)冗余性设计
3.软件设计的目标是什么?
软件设计的最终目标:取得最佳方案
①节省开发费用、
②降低资源消耗、
③缩短开发时间、
④能够赢得较高的生产效率、
⑤较高的可靠性、
⑥可维护性的方案。

4.模块具有哪些基本属性?
“模块”,又称“组件”。

一般有四个基本属性
1)功能:描述该模块做什么?
2)逻辑:描述模块内部怎么做?
3)状态:模块使用时的环境和条件。

4)接口:指模块的输入与输出。

5.什么是耦合?什么是内聚?如何增强模块的独立性?
模块独立性由模块间的耦合与内聚度量。

1)耦合:各模块之间的互相连接的紧密程度。

模块之间的连接越紧密,联系越
多,耦合性就越高,而其独立性就越弱。

2)内聚:模块内各功能元素彼此结合的紧密程度。

一个模块内部各个元素之间
的联系越紧密,则它的内聚性就越高,相对地,它与其它模块之间的耦合性就会减低,而模块独立性就越强。

3)增强模块独立性的方法是尽量做到高内聚、低耦合。

6.模块化的特征有哪些?
1)抽象:用层次的方式构造和分析复杂系统。

2)逐步求精:帮助开发人员把精力集中在与当前开发阶段最相关的那些问题
上。

3)信息隐蔽:如果一个模块内包含的信息(过程和数据) 不允许外部的模块访问
的话,其它模块不能对其访问。

4)局部化:把一些关系密切的软件元素物理地放得彼此靠近。

7.影响耦合度的因素有哪些?
①连接方式的类型。

②接口的复杂性。

③传送的信息流类型。

④耦合的时间。

8.降低耦合度的方法有哪些?
①对需要了解的内容,隐含的改为明显的,便于理解;
②连接的方式尽量标准化,避免直接引用;
③减少公共区,将公共区划分为若干个逻辑子区;
④输入输出应局限在少量模块,不要分散在全系统;
9.软件结构设计优化的准则是什么?
1)划分模块时,尽量做到高内聚、低耦合,保持模块相对独立性。

模块划分的
准则:“将相关的各部分放在一起,无关的东西不要放在一起。


2)模块的大小要适中。

3)模块的接口要简单、清晰、含义明确。

便于理解,易于实现、易于测试和维
护。

4)一个模块的作用X围应在其控制X围之内。

且判定所在的模块,应与受其影
响的模块在层次上尽量靠近。

5)软件结构的深度、宽度、扇入、扇出应适当。

6)力求设计单入口和单出口的模块。

避免“病态连接”,以防止内容耦合。

7)设计功能可预测模块的划分,应防止功能过分局限。

4.2思考题
1.结构化设计的优点是什么?
①减少设计复杂性。

将大化小,使复杂问题简单化。

②结构独立。

将程序划分成多个相对独立的模块。

③模块功能单一化,可使软件设计获得最大的益处。

④便于软件的修改。

⑤易于开发和维护。

⑥加强了代码的可重用性。

2.正交软件体系结构的优点是什么?
①层次结构清晰,便于理解。

②可移植性强,重用粒度大。

③易修改,可维护性强。

3.三层C/S结构的组成
1)表示层:用户接口部分,担负着用户与应用间的对话功能。

2)功能层:相当于应用的本体,将具体的业务处理逻辑程序。

3)数据层:数据库管理系统,负责管理对数据库数据的读/写。

4.三层结构设计的优点是什么?
①允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性。

②允许更灵活有效地选用相应的平台和硬件系统,使之在处理负荷能力上与处
理特性上分别适应于结构清晰的三层;并且这些平台和各个组成部分可以具有良好的可升级性和开放性。

③三层C/S结构中,应用的各层可以并行开发,各层也可以选择各自最适合的
开发语言。

④允许充分利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过
功能层而利用数据库工具或黑客手段去非法地访问数据层。

5.B/S体系结构的不足之处?
①缺乏对动态页面的支持能力,数据库处理能力差。

②系统扩展能力差,安全性难以控制。

③响应速度远低于C/S体系结构。

④数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理
(OLTP)应用。

6.C/S、B/S混合结构的特点是什么?
1)B/S与C/S混合结构是一种典型的异构系统。

2)C/S与B/S混合结构的优点:外部用户不直接访问数据库服务器,能保证企
业数据库的相对安全。

企业内部用户的交互性较强,数据查询和修改的响应速度较快。

3)C/S与B/S混合结构的缺点:企业外部用户修改和维护数据时,速度较慢,
较烦琐,数据的动态交互性不强。

7.列出几种主要的菜单类型?
①固定菜单
②活动菜单
③“弹出式”菜单
④“下拉式”菜单
8.活动菜单的优点是什么?
1)不占用显示工作空间,
2)可以根据用户当前所处的操作状态和要求动态出现。

3)需要注意的是不能滥用弹出菜单。

4.3思考题
1.DBMS有哪些基本功能?
1)建立数据库的结构;
2)管理用户的数据库;
3)提供在数据库上的各种操作;
4)提供数据库对外的各种接口;
2.DB、DBMS有何不同?
在人们的交流中,习惯上常常将数据库和DBMS混为一谈,不加区别。

所以要根据不同场合、不同习惯、以及上下文来分析,所讲的“数据库”三个字,到底是
指数据库,还是指DBMS。

3.DBMS提供的三种语言是什么?
⑴DDL(数据库定义语言):如:CREATE,ALTER,DROP;
⑵DML(数据库操作语言):如:SELECT,UPDATE,INSERT,DELETE;
⑶DCL(数据库控制语言):如:LOCK、UNLOCK;
4.四个表指的是什么?
1)基本表:存放原始数据的表。

2)代码表:存放信息代码数据的表。

3)中间表:存放统计数据的表。

4)临时表:存放临时数据的表。

5.基本表的性质有哪些?为什么?
①原子性。

基本表中的字段是不可再分解的。

②原始性。

基本表中的记录是原始数据(基础数据)的记录。

③演绎性。

由基本表与代码表中的数据,可以派生出所有的输出数据。

④稳定性。

基本表的结构是相对稳定的,表中的记录是需要长期保存的。

6.怎样正确认识“数据冗余”?
1)主键与外键在多表中的重复出现, 不属于数据冗余,这个概念必须清楚,事
实上有许多人还不清楚。

2)非键字段的重复出现, 才是数据冗余,而且是一种低级冗余,即重复性的冗
余。

3)高级冗余不是字段的重复出现,而是字段的派生出现。

第五章结构化软件实现
1.代码设计的主要原则是什么?
1)使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。

2)选用的控制结构只准许有一个入口和一个出口。

3)程序语句组成容易识别的块,每块只有一个入口和一个出口。

4)复杂结构应该用基本控制结构进行组合嵌套来实现。

2.编程规X包括哪些内容?
3.良好的代码设计风格包括哪些内容?
4.代码语句设计应遵从哪些原则?
1)在一行内只写一条语句:采取适当的移行格式,使程序的逻辑和功能变得更
加明确。

在一行内写多个语句会使程序可读性变差。

2)程序编写清晰性第一:不要刻意追求技巧性,使程序编写得过于紧凑。

3)程序要能直截了当地说明程序员的用意:程序编写要简单,清楚,直截了当
地说明程序员的用意。

4)清晰第一,效率第二:不要为了追求效率而丧失了清晰性。

事实上,程序效
率的提高主要应通过选择高效的算法来实现。

5)先保证程序正确, 再要求提高速度。

6)避免使用临时变量而使可读性下降。

7)让编译程序做简单的优化。

8)尽可能使用库函数和构件。

9)避免不必要的转移:尽量不用GO TO语句。

10)尽量采用三种基本的控制结构编写程序。

11)避免使用空的ELSE语句和IF…THEN IF…的语句。

这种结构容易使读者产
生误解。

可能产生二义性问题。

12)避免采用过于复杂的条件测试。

13)尽量减少使用“否定”条件的条件语句。

14)尽量用通俗易懂的伪码来描述程序的流程:然后再翻译成必须使用的语言。

15)数据结构要有利于程序的简化。

16)要模块化:使模块功能尽可能单一化,模块间的耦合能够清晰可见。

17)利用信息隐蔽:确保每一个模块的独立性。

18)从数据出发构造程序。

19)修补不好的程序,要重新编写:也不要一味地追求代码的复用,要重新组织。

20)大的程序要分块编写和测试:然后再集成。

21)对递归定义的数据结构尽量使用递归过程。

5.I/O代码设计的原则是什么?
①输入数据要检验:识别错误的输入,以保证每个数据的有效性;
②检查输入项的各种重要组合的合理性:必要时报告输入状态信息;
③输入的步骤和操作尽可能简单:并保持简单的输入格式;
④应允许使用自由格式输入数据;
⑤应允许缺省值;
⑥批数据输入时,使用输入结束标志:而不要由用户指定输入数据数目;
⑦交互式输入时,屏幕上使用提示符明确提示输入的请求:指明可使用选择项
的种类和取值X围。

同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;
⑧程序设计语言对I/O格式有严格要求时,应保持输入格式与输入语句要求的
一致性;
⑨输出加注解,并设计输出报表格式。

6.软件效率应该以什么为准?
软件需求
7.程序的效率与哪些因素有关?
程序的效率是指程序的执行速度及程序所需占用的内存的存储空间。

讨论程序效率的准则:
1)效率性能要求,应在需求分析阶段给出。

软件效率以需求为准,不应以人力
所及为准。

好的设计可以提高效率。

2)程序的效率与程序的简单性相关。

3)一般说来,任何对效率无重要改善,且对程序的简单性、可读性和正确性不
利的程序设计方法都是不可取的。

8.详细设计向代码设计转换过程的指导原则是什么?
1)尽可能简化有关的算术表达式和逻辑表达式;
2)检查算法中的嵌套的循环,尽可能将某些语句或表达式移到循环外面;
3)尽量避免使用多维数组;
4)尽量避免使用指针和复杂的表;
5)采用“快速”的算术运算;
6)不要混淆数据类型,避免在表达式中出现类型混杂;
7)尽量采用整数算术表达式和布尔表达式;
8)选用等效的高效率算法;
9.影响存储器效率的因素是什么?
1)存储效率与OS的分页功能直接有关。

2)采用结构化程序设计。

3)提高存储器效率的关键是程序的简单性。

10.提高I/O设备效率的指导原则有哪些?
1)I/O的请求应当最小化;
2)对于所有的I/O操作,安排适当的缓冲区,以减少频繁的信息交换。

3)对辅助存储(例如磁盘),选择尽可能简单的,可接受的存取方法;
4)对辅助存储的I/O,应当成块传送;
5)对终端或打印机的I/O,应考虑设备特性,尽可能改善I/O的质量和速度;
6)任何不易理解的,对改善输入/输出效果关系不大的措施都是不可取的;
7)任何不易理解的所谓“超高效”的I/O毫无价值;
11.提示信息分哪几类?
1)引导性提示信息:该类提示信息一般在需要用户干预时出现,要求用户决定下一步的操作。

如在退出时提示“修改的数据尚未存盘,存盘否?”。

使用MessageBox进行提示。

2)错误性提示信息:该类提示信息一般在软件运行出错时出现,告诉用户软件遇到了问题。

如“系统运行出现故障,请与系统管理员联系!”。

3)状态性提示信息:该类提示信息一般在软件处于“忙”状态下提示,告诉用户软件正在进行什么操作,让用户耐心等待。

如“正在进行数据传输,请稍待…”。

4)位置性提示信息:该类提示信息一般根据鼠标的位置进行提示,告诉用户鼠标正指向什么功能。

如“报表打印”。

12.软件实现过程由哪些文档的组成?
①《源程序清单》
②《用户使用手册》
③《用户安装手册》
④《系统管理员手册》
13.软件实现过程包括哪些管理文档?
①《用户指南评审报告》
②《模块源程序行统计表(行/模块名)》
③《源程序工作量统计表(行/人天)》
5.2思考题
1.软件测试的原则?
①软件测试应当尽早和不断地进行。

②程序员应避免检查自己的程序。

③设计测试即应包括合理的、还应包括不合理的输入条件。

④经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正
比。

⑤妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。

2.软件测试的最初定义?
1)软件测试是测试中的特例,它的测试对象是人类的智力产品--软件
2)最初定义:“软件测试是为了发现错误而执行程序的过程。


3.软件测试的经典定义?
测试是程序的执行过程,目的在于发现错误;
一个好的测试在于能发现至今未发现的错误;
一个成功的测试是发现了至今未发现的错误的测试。

4.测试的目的?
1)以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。

2)能够证明软件的功能和性能与需求说明相符合。

3)测试结果数据为可靠性分析提供了依据。

4)测试不能表明软件中不存在错误,它只能说明软件中存在错误。

5.黑盒测试的优点?
①对于较大的代码单元来说,黑盒测试比白盒测试效率要高;
②测试人员不需要了解实现的细节,包括特定的编程语言;
③从用户的角度进行测试,容易被理解和接受;
④有助于暴露任何规格不一致或有歧义的问题;
6.黑盒测试的缺点?
①要测试每个可能的输入流几乎是不可能的;
②会有很多程序路径没有被测试到;
③不能直接针对特定程序段测试,因此可能隐藏更多的问题。

7.白盒测试的优点?
①迫使测试人员去仔细思考软件的实现;。

相关文档
最新文档