软件危机是指在计算机软件的开发和维护过程中遇到一系列严重问题。软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门。软件工程方法学包含3个要素:方法、工具和过程目前使用最广泛的软件工程方法学,分别是传统方法学和面向对象方法学软件生命周期由软件定义、软件开发和运行维护3个时期组成。软件生存周期是指一个软件从提出开发要求开始直到软件报废为止的整个时期。通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。软件定义分3个阶段,即问题定义、可行性研究和需求分析。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性研究的主要内容包括技术可行性、经济可行性和操作可行性3个方面。开发时期由4个阶段组成:总体设计、详细设计、编码和单元测试,综合测试。其中前两个阶段称为系统设计,后两个阶段称为系统实现。系统流程图是概括地描绘物理系统的传统工具;而数据流图是系统逻辑功能的图形表示工具。模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图形符号和组织这些符号的规则组成。分析建模的用处是为了更好地理解复杂事物。软件需求分析的目标是深入描述软件的功能和性能,确定软件设计的约束和软件同其它系统元素的接口细节,定义软件的其它有效性需求。需求分析过程应该建立3种模型,分别是数据模型、功能模型和行为模型。数据模型中包含3种相互关联的信息:数据对象、数据对象的属性及数据对象彼此间相互连接的关系。结构程序设计的定义:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制接口进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。在结构化分析中,用于描述加工逻辑的主要工具有三种,即:结构化语言、判定表、判定树。衡量模块独立程序的两个定性标准是内聚和耦合。确认测试也称为验收测试,它的目标是验收软件的有效性。等价划分是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。一个理想的测试用例能独立发现一类错误。软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功的运行的概率。软件的可用性是程序在给定的时间点,按照规格说明书的规定,成功的运行的概率。软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。Jackson方法是一种面向数据结构的设计方法。完整的软件测试一般要经过单元测试、集成测试、确认测试和系统测试等4个阶段。模块化是指把程序划分成独立命名切可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。软件复杂性度量的参数包括:①规模②难度③结构④智能度数据字典应该有下列4类元素的定义组成:1、数据流;2、数据流分量(即数据元素)3、数据存储4、处理产生软件危机的原因?一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。可行性研究的任务完成的过程?1、首先需要进一步分析和澄清问题定义。2、在澄清了问题定义之后,分析员应该导出系统的逻辑模型3、然后从系统逻辑模型出发,探索若干种可供选择的主要解法4、为每个可行的解法制定一个粗略的实现进度(进度表)怎样进行可行性研究呢?(可行性研究过程有哪些?)1、复查系统规模和目标2、研究目前正在使用的系统3、导出信系统的高层逻辑模型4、进一步定义问题5、导出和评价供选择的解法6、推荐行动方针7、草拟开发计划8、书写文档提交审查设计原理?模块化;抽象;逐步求精;信息隐藏和局部化;模块独立;从哪些方面验证软件需求的正确性?(1)一致性:所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾;(2)完整性:需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能;(3)现实性:指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的;(4)有效性:必须证明需求是正确有效的,确实能解决用户面对的问题。对系统的综合要求?(需求分析的任务)1、功能需求2、性能需求3、可靠性和可用性需求4、出错处理需求5、接口需求6、约束7、逆向需求8、将来可能提出的要求使用基本路径测试结束设计测试用例的步骤?第一步,根据过程设计结果画出相应的流图。第二步,计算流图的环形复杂度。第三步,确定先行独立路径的基本集合。层次方框图与层次图的区别?①层次方框图描绘的是数据结构;层次图描绘的是软件的层次结构。②层次方框图方框代表数据的子集或数据元素;层次图中方框代表一个功能模块。③层次方框图连线表示组成关系;层次图中连线表示模块间调用关系。简述软件生命周期开发方法的基本过程及每个阶段的任务。软件生存周期:可行性分析和项目开发计划;需求分析;概要设计;详细设计;编码;测试;维护。基本任务:①问题定义:要解决的问题是什么?②可行性研究:研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。③需求分析:确定目标系统必须具备哪些功能。④总体设计:设计出实现目标系统的几种可能的方案;制定出实现最佳方案的详细计划,设计程序的体系结构。⑤详细设计:设计出程序的详细规格说明,详细的设计每个模块,确定实现模块功能所需要的算法和数据结构。⑥编码和单元测试:写出正确的容易理解、容易维护的程序模块。⑦综合测试:通过各种类型的测试(及相应的调试)使软件达到预定的要求。⑧软件维护:通过各种必要的维护活动使系统持久地满足用户的需要。简述何谓软件开发方法?请列举四种主要方法。软件开发方法:结构化方法由结构化分析、结构化设计、结构化程序设计构成。它是一种面向数据流的开发方法。结构化方法总的指导思想是自顶向下、逐步求精。它的基本原则是功能的分解与抽象,它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题。结构化方法、Jackson方法、维也纳开发方法、面向对象开发方法什么是软件生存周期模型?请至少列举四种主要模型?答:软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。软件生存周期模型确立了软件开发和演绎中各阶段的次序限制以及各阶段或机动的准则,确立开发过程所遵守的规定和限制,便于各种活动的协调,便于各种人员的有效通信,有利于活动重用,有利于活动管理。常见的软件生存周期模型有瀑布模型、演化模型、螺旋模型、喷泉模型等。什么是“事务流”?答:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干动作序列中选出一个来执行,这类数据流称为事务流。传统方法学与面向对象方法学的区别以及各自的优缺点?传统方法学:也称为生命周期方法学或结构化范型。优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。面向对象方法学:优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。