1什么是软件危机?软件危机产生的原因是什么?软件危机就是指人们在开发软件和维护软件过程中遇到的一系列问题。产生的原因:1忽视软件开发前期的需求分析。2开发过程缺乏统一的、规范化的方法论的指导。3文档资料不齐全或不准确。4忽视与用户之间、开发组成员之间的交流5忽视测试的重要性。6不重视维护或由于上诉原因造成维护工作的困难。7从事软件开发的专业人员对这个产业认识不充分,缺乏经验。8没有完善的质量保证体系。2请简述软件工程的三要素三要素是指过程、方法和工具软件工程的基础是过程层,它定义了一组关键过程区域的框架,使软件能过被合理和及时的开发;软件工程的方法提供了建造在在技术上需要“做什么”,它覆盖了一系列的任务,包括需求分析、设计编程、测试和支持等;软件工程的工具对过程和方法提供了自动的或半自动的支持。3请对比瀑布模型、快速模型、增量模型和螺旋模型。瀑布模型的优点是:过程模型简单,执行容易;缺点是无法适应变更。快速模型的优点是:软件产品的开发基本上是按线性顺序进行的(它所完成的功能往往是最终产品能完成的功能的一个子集)增量模型的最大特点是将待开发的软件系统模块化和组件化,优点是:将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解项目的进展;以组件为单位进行开发降低了软件开发的风险;开发顺序灵活。它的缺点是要求待开发的软件系统可以被模块化螺旋模型的优点是对可选方案和约束条件的强调有利于已有的软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;更重的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质的区别,它的主要优势在于风险驱动但是这也可能是他的一个弱点。4什么是软件过程?他与软件工程方法学有何不同?软件过程:是指一个为获得高质量软件所需完成的任务的框架,它规定了软件产品开发时完成各项任务的一系列工作步骤,包括中间产品、资源、角色及过程中采取的方法、工具等范畴。软件工程方法学:通常把在软件生命周期的全过程中的一整套技术方法的集合称为方法学,也称范型。从这些两个定义可以看出,软件过程是软件工程方法学的一个要素而已!5某大型企业计划开发一个“综合信息管理系统”,该系统涉及销售、供应、财务、生产、人力资源等多个部门的信息管理。该企业的想法是按照部门优先级别逐个实现,边应用。边开发。对此,需要一种比较适合的过程模型。请对这个过程模型做出符合应用需要的选择,并说明选择理由。答:可以采用增量模型。它是瀑布模型与原型进化模型的综合,它对软件过程的考虑是:在整体上按照瀑布模型的流程实施项目开发,以方便对项目的管理;但在软件的实际创建中,则把软件系统功能分解为许多增量构件,并以构件为单位逐个创建与交付,直到全部增量构件创建完毕,并都被集成到系统之中交付用户使用。第二章6请简述可行性研究的内容。可行性研究就是指在项目进行开发之前,对该项目师傅能在特定的资源。时间等制约条件下完成做出评估,并且确定他师傅值得去开发。||(评估的方面主要包括:战略可行性、操作可行性、计划可行性、技术可行性、社会可行性、市场可行性、经济可行性和风险可行性等。)7需求分析的难点在哪里?一方面是由于交流障碍,另一方面是由于用户通常对需求的陈述不完备、不准确和不全面,并且还可能在不断地变化。8为什么说需求过程是个迭代过程?由于市场环境的易变性以及用户本身对于新系统要求的模糊性,需求往往很难一步到位。通常情况下,需求是随着项目的深入而不断变化的所以需求分析的过程是一个迭代的过程。9请简述数据流图的作用。数据流图是功能建模的基础,在处理规格说明中给出了对出现在数据流图中的每个功能的描述。其作用有:1指出当数据在软件系统中移动时怎样被变换;2描绘数据流的功能和子功能。10请简述数据字典的作用。(“数据字典”是分析模型的核心,它是为了描述在结构化分析过程中定义对象的内容时,使用的一种半形式化的工具,是描述数据的信息的集合,是对系统中使用的所有数据元素的定义的集合。)简而言之,它就是用系统化的方式来表示每个数据对象和控制信息的特性质。第三章11请简述面向数据流的设计方法的主要思想。(常用的结构化设计方法,多在概要设计阶段使用)它主要是指依据一定的映射规则,将需求分析阶段得到的数据描述、从系统的输入端到输出端所经历的一系列变换或出来的数据流图转换为目标系统的结构描述。12请简述人机界面设计应该遵循的原则。有三条“黄金原则”:1置用户与控制之下:以不强迫用户进入不必要的或不希望的动作的方式来集定义交互模式;提供零户的交互;允许用户交互可以被中断和撤销,当技能级别增长是可以是交互流水化并允许定制交互;使用户隔离内部技术细节;设计应允许用户和出现在屏幕上的对象直接交互。2减少用户的记忆负担:减少对短期记忆的要求;建立有意义的缺省;定义直觉性的捷径;界面的视觉布局应该基于真实世界的隐喻;以不断进展的方式揭示信息3爆出界面一直:允许用户将当前任务放入有意义的语境;在应该系列内保持一致性;如果过去的交互模式已经建立起了用户期待,不要改变它,除非有不得已的理由。13为什么说“高内聚、低耦合”的设计有利于提高系统的独立性?耦合是对于各个模块之间互连程度的度量。不同模块之间互相依赖的越紧密则耦合程度越高,为了体格模块独立性,应该尽量降低模块之间的耦合程度;而模块的内聚是指模块内部各个元素之间彼此的紧密程度。内聚和耦合往往密切相关,模块的高内聚通常意味着低耦合。所以“高内聚,低耦合”的设计有利于提高系统的独立性。14请简述软件设计与需求分析的关系。软件设计就是吧需求规格说明书里归纳的需求转换为可行的解决方案并把解决方案反映到设计说明书里。简单的说,需求分析就是回答软件系统能“做什么”的问题,而软件设计就是要解决“怎么做”的问题。15请简述软件设计的过程中需要遵循的规则。为了活动高质量的软件设计结果,应该遵循模块化、抽象、逐步求精、。信息隐藏、模块独立等基本设计原理16软件设计如何分类,分别有哪些活动?软件设计可以从活动任务观点和工程管理观点分别对其进行分类。从活动任务来看软件设计是对需求进行数据设计、体系结构设计、接口设计、构件设计和部署设计。17请简述结构化设计的优点(不太会)工具掌握快而且做出来的设计容易理解,自顶向下逐步求精快速设计。18什么是模块、模块化?软件设计为什么要模块化?模块是由边界元素限定的相邻的程序元素(如数据说明,可执行的语句)的序列,而且有一个总体标识符来代表它。模块化就是把程序划分成可独立命名且独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。第四章19在选择编码语言时,通常要考虑哪些因素?待开发系统的应用领域、用户的要求、软件开发人员的喜好和能力、系统的可移植性要求、算法和数据结构的复杂性以及平台依赖性等20请简述编码风格的重要性。要形成良好的编码风格可以从哪方面做起?编码风格是指源程序的书写习惯。规范的编程风格会对后期的软件维护带来很多的便利。规范编程风格可以从源程序文档话、数据说明、语句构造。输入输出和效率几个方面做起。