软件工程

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



2、软件危机有哪些典型表现?
1)对软件开发成本和进度的估计常常很不准确。
2)用户对“已完成的”软件系统不满意的现象经常发生。
3)软件产品的质量往往靠不住。
4)软件常常是不可维护的。
5)软件通常没有适当的文档资料。
6)软件成本在计算机系统总成本中所占比例逐年上升。
7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。



3、为什么会出现软件危机?
1)与软件本身特点有关。
2)与软件开发与维护的方法不正确有关。
3)与软件开发的不同阶段进行修改需要付出的代价有关。



4、什么是软件工程?
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效的地维护它。



5、软件工程有哪些本质特征?
1)关注大型程序的构造。
2)中心是控制复杂性。
3)经常变化。
4)关键是和谐合作。
5)必须有效支持用户。
6)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。



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



7、软件生命周期分为哪三个时期?
定义时期、开发时期和维护时期。



8、软件生命周期分为哪八个阶段?
1)软件定义的3个阶段:问题定义、可行性研究和需求分析。
2)软件开发的4个阶段:总体设计、详细设计、编码和单元测试、综合测试。
3)软件维护阶段。



9、软件生命周期模型有很多种,列举出其中的四种。

瀑布模型、快速增量模型、增量模型、螺旋模型和喷泉模型。


结构图的形式。

一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。在结构图中通常还用带注释的肩头表示模块调用过程中来回传递的信息,尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。还有一些附加的符号,可以表示模块的选择调用或循环调用。


信息流两种类型。

交换流和事务流。


什么是变换流,什么是事务流。

变换流:信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。
事务流:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。


变换分析的设计步骤。

第1步复查基本系统模型。
第2步复查并精化数据流图
 第3步确定数据流图具有变换特性还是事务特性。
第4步确定输入流和输出流的边界,从而孤立出变换中心。
第5步完成“第一级分解”。
第6步完成“第二级分解”。
第7步使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。


详细设计阶段的根本目标。

确定应该怎样具体地实现所要求的系统。


 

 结构程序设计的经典定义和更全面的定义。

结构程序设计经典定义:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
结构程序设计更全面的定义:结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句。


设计人机界面过程中几乎总会遇到的4个问题。

7、1、系统响应时间。
2、用户帮助设施。
3、出错信息处理。
4、命令交互


系统响应时间两个重要属性

长度和易变性。


具体设计用户帮助设施时必须解决的问题。

(1)在用户与系统交互期间,是否在任何时候都能获得关于系统任何功能的帮助信息?有两种选择:提供部分功能的帮助信息和提供全部功能的帮助信息。
(2)用户怎样请求帮助?有3种选择:帮助菜单,特殊功能键和HELP命令。
(3)怎样显示帮助信息?有3种选择:在独立的窗口中,指出参考某个文档(不理想)和在屏幕固定位置显示简短提示。
(4)用户怎样返回到正常的交互方式中?有两种选择:屏幕上的返回按钮和功能键。
(5)怎样组织帮助信息?有3种选择:平面结构,信息的层次结构和超文本结构。


一般说来,交互式系统给出的出错信息或警告信息,应该具有的属性。

(1)信息应该用用户可以理解的术语描述问题。
(2)信息应该提供有助于从错误中恢复的建设性意见。
(3)信息应该指出错误可能导致哪些负面后果(例如,破坏数据文件),以便用户检查是否出现了这些问题,并在确实出现问题时及时解决。
(4)信息应该伴随着听觉上或视觉上的提示。
(5)信息不能带有指责色彩,不能责怪用户。


 在提供命令交互方式时,必须考虑的设计问题。

(1)是否每个菜单选项都有对应的命令?
(2)采用何种命令形式?
(3)学习和记忆命令的难度有多大?忘记了命令怎么办?
(4)用户是否可以定制或缩写命令?


 用户界面的评估周期。

用户界面的评估周期如下所述:完成初步设计之后就创建第一级原型;用户试用并评估该原型,直接向设计者表述对界面的评 价;设计者根据用户意见修改设计并实现下一级原型。上述评估过程持续进行下去,直到用户感到满意,不需要再修改界面设计时 为止。


一般交互指南的内容。

一般交互指南:涉及信息显示、数据输入和系统整体控制。
(1)保持一致性。
(2)提供有意义的反馈。
(3)在执行有较大破坏性的动作之前要求用户确认。
(4)允许取消绝大多数操作。
(5)减少在两次操作之间必须记忆的信息量。
(6)提高对话、移动和思考的效率。
(7)允许犯错误。
(8)按功能对动作分类,并据此设计屏幕布局。
(9)提供对用户工作内容敏感的帮助设施。
(10)用简单动词或动词短语作为命令名。


信息显示的设计指南内容。

信息显示指南:多种不同方式“显示”信息:用文字、图形和声音;按位置、移动和大小;使用颜色、分辨率和省略。
(1)只显示与当前工作内容有关的信息。
(2)不要用数据淹没用户,应该用便于用户迅速吸取信息的方式来表示数据。
(3)使用一致的标记、标准的缩写和可预知的颜色。
(4)允许用户保持可视化的语境。
(5)产生有意义的出错信息。
(6)使用大小写、缩进和文本分组以帮助理解。
(7)使用窗口分隔不同类型的信息。
(8)使用“模拟”显示方式表示信息,以使信息更容易被用户提取。
(9)高效率地使用显示屏。


15、关于数据输入的设计指南内容。


1、过程设计的工具可以分为哪三类。

图形,表格,语言。


2、程序流程图的主要缺点。

(1)程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。
(2)程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。
(3)程序流程图不易表示数据结构。


 3、盒图的特点。

(1)功能域(即一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。

(2)不可能任意转移控制。
(3)很容易确定局部和全程数据的作用域。
(4)很容易表现嵌套关系,也可以表示模块的层次结构。


4、PAD图的主要优点。

(1)使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序。
(2)PAD图所描绘的程序结构十分清晰。
(3)用PAD图表现程序逻辑,易读、易懂、易记。
(4)容易将PAD图转换成高级语言源程序。
(5)既可用于表示程序逻辑,也可用于描绘数据结构。
(6)PAD图的符号支持自顶向下、逐步求精方法的使用。


5、判定表的组成。

判定表由4部分组成,

左上部列出所有条件,
左下部是所有可能做的动作,
右上部是表示各种条件组合的一个矩阵,
右下部是和每种条件组合相对应的动作。


6、PDL的优点。

(1)可以作为注释直接插在源程序中间。这样做能促使维护人员在修改程序代码的同时也相应地修改PDL注释,因此有助于保持文档和程序的一致性,提高了文档的质量。
(2)可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。
(3)已经有自动处理PDL的程序存在,而且可以自动由PDL生成程序代码。


7、Jackson图的优点。

(1)便于表示层次结构,而且是对结构进行自顶向下分解的有力工具。
(2)形象直观可读性好。
(3)既能表示数据结构也能表示程序结构(因为结构程序设计也只使用上述3种基本控制结构)。


8、从Jackson图的缺点角度,说明为什么使用改进的Jackson图。

1)Jackson图表示选择或重复结构时,选择条件或循环结束条件不能直接在图上表示出来,影响了图的表达能力,也不易直接把图翻译成程序。
(2)框间连线为斜线,不易在行式打印机上输出。故改进。


9、Jackson结构程序设计方法基本上由哪5个步骤组成。

 


10、流图的符号


11、计算环形复杂度的三种方法


12、计算图6.16所示流图的环形复杂度,简述计算过程。


3.19

1、什么是编码。

编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。


2、测试的目的。

测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。


3、选择程序设计语言的理想标准。

为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。


4、选择程序设计语言的实用标准。

(1)系统用户的要求。如果所开发的系统由用户负责维护,用户通常要求用他们熟悉的语言书写程序。
(2)可以使用的编译程序。运行目标系统的环境中可以提供的编译程序往往限制了可以选用的语言的范围。
(3)可以得到的软件工具。如果某种语言有支持程序开发的软件工具可以利用,则目标系统的实现和验证都变得比较容易。
(4)工程规模。如果工程规模很庞大,现有的语言又不完全适用,那么设计并实现一种供这个工程项目专用的程序设计语言,可能是一个正确的选择。
(5)程序员的知识。虽然对于有经验的程序员来说,学习一种新语言并不困难,但是要完全掌握一种新语言却需要实践。如果和其他标准不矛盾,那么应该选择一种已经为程序员所熟悉的语言。
(6)软件可移植性要求。如果目标系统将在几台不同的计算机上运行,或者预期的使用寿命很长,那么选择一种标准化程度高、程序可移植性好的语言就是很重要的。
(7)软件的应用领域。所谓的通用程序设计语言实际上并不是对所有应用领域都同样适用,因此,选择语言时应该充分考虑目标系统的应用范围。


5、程序内部的文档主要包括哪些,相应的规则有哪些。

程序内部的文档包括恰当的标识符、适当的注解和程序的视觉组织等。
标识符:含义鲜明的名字、缩写规则一致、为名字加注解;
注解:正确的注解非常有助于对程序的理解。通常在每个模块开始处有一段序言性的注解,简要描述模块的功能、主要算法、接口特点、重要数据以及开发简史。插在程序中间与一段程序代码有关的注解,主要解释包含这段代码的必要性。
视觉组织:适当的阶梯形式使程序的层次结构清晰明显。


6、数据说明的简单原则。

数据说明的次序应该标准化。有次序就容易查阅,因此能够加速测试、调试和维护的过程。
当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。
如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结构的方法和特点。


7、语句构造规则。

语句构造的原则有助于使语句简单明了。
不要为了节省空间而把多个语句写在同一行。
尽量避免复杂的条件测试。
尽量减少对“非”条件的测试。
避免大量使用循环嵌套和条件嵌套。
利用括号使逻辑表达式或算术表达式的运算次序清晰直观。


8、输入输出风格的规则。

输入输出风格的规则:
对所有输入数据都进行检验。
检查输入项重要组合的合法性。
保持输入格式简单。
使用数据结束标记,不要要求用户指定数据的数目。
明确提示交互式输入的请求,详细说明可用的选择或边界数值。
当程序设计语言对格式有严格要求时,应保持输入格式一致。
设计良好的输出报表。
给所有输出数据加标志。


9、硬件之间的通信效率是很复杂的问题,但是,从写程序的角度看,却有些简单的原则可以 提高输入输出的效率。简述简单原则。

所有输入输出都应该有缓冲,以减少用于通信的额外开销。
对二级存储器(如磁盘)应选用最简单的访问方法。
二级存储器的输入输出应该以信息组为单位进行。
如果“超高效的”输入输出很难被人理解,则不应采用这种方法。


10、测试的定义。

测试的正确定义是“为了发现程序中的错误而执行程序的过程”。


11、主要的测试准则。

所有测试都应该能追溯到用户需求。
应该远在测试开始之前就制定出测试计划。
把Pareto原理应用到软件测试中。
应该从“小规模”测试开始,并逐步进行“大规模”测试;
穷举测试是不可能的。
为了达到最佳的测试效果,应该由独立的第三方从事测试工作。


12、测试的两种方法。(详细些)

测试任何产品都有两种方法:
如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;
如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。
前一种方法称为黑盒测试,后一种方法称为白盒测试。


13、大型软件系统的测试过程基本上由哪些步骤组成。

大型软件系统的测试过程基本上由模块测试、子系统测试、系统测试、验收测试和平行运行等五个步骤组成。


14、单元测试着重从哪五个方面对模块进行测试。

模块接口、局部数据结构、重要的执行通路、出错处理通路、边界条件


15、什么是代码审查。审查小组最好由哪些人员组成。

代码审查是指由审查小组正式对源程序进行人工测试。它是一种非常有效的程序验证技术,对于典型的程序来说,可以查出30%~70%的逻辑设计错误和编码错误。审查小组最好由下述4人组成。
(1) 组长,应该是一个很有能力的程序员,而且没有直接参与这项工程。
(2) 程序的设计者。
(3) 程序的编写者。
(4) 程序的测试者。
如果一个人既是程序的设计者又是编写者,或既是编写者又是测试者,则审查小组中应该再增加一个程序员。

原文地址:https://www.cnblogs.com/WatchProtector/p/12360445.html