第3章软件工程基础主要内容3.1软件工程的基本概念3.2结构化分析方法3.3结构化设计方法3.4软件测试3.5程序的调试全国等级考试考试大纲要求1.软件工程基本概念,软件工具与软件开发环境。2.结构化分析方法,数据流图,数据字典,软件需求规格说明书。3.结构化设计方法,总体设计与详细设计。4.软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。5.程序的调试,静态调试与动态调试。知识类型:理论二级所占分值:约6分课时:4学时参考书目:《软件工程导论(第4版)》张海藩编著概念含义软件程序、数据和文档程序软件开发人员依据用户需求开发的,用某种程序设计语言描述的,能够在计算机中执行的语句序列数据师程序能够正常操纵信息的数据结构文档与程序开发、维护和使用的有关资料软件(Software)是指包括程序、数据以及相关文档的完整组合。国标定义:与计算机系统的操作有关的计算机程序、规程、规则以及可能有的文件、文档及数据。软件工程(SoftwareEngineering)是在20世纪60年代末期提出的。这一概念的提出,其目的是倡导以工程的原理、原则和方法进行软件开发,以期解决当时出现的“软件危机”。表现:⑴软件需求的增长得不到满足⑵软件开发成本和进度无法控制⑶软件质量难以保证⑷软件不可维护或维护程度非常低⑸软件成本不断提高⑹软件开发生产效率的提高赶不上硬件的发展和应用需求的增长(7)软件通常缺少适当的文档资料总之,可以将软件危机归结为成本、质量和生产率等问题实际上几乎所有软件都在不同程度上存在软件危机.软件危机(SoftwareCrisis)下一节软件危机—软件开发进度难以预测拖延工期几个月甚至几年的现象并不罕见,这种现象降低了软件开发组织的信誉。以丹佛新国际机场为例该机场规模是曼哈顿机场的两倍,宽为希思机场的10倍,可以全天侯同时起降三架喷气式客机;投资1.93亿美元建立了一个地下行李传送系统,总长21英里,有4,000台遥控车,可按不同线路在20家不同航空公司柜台、登机门和行李领取处之间发送和传递行李;支持该系统的是5,000个电子眼、400台无线电接受机、56台条形码扫描仪和100台计算机。按原定计划要在1993年万圣节前启用,但一直到1994年6月,该系统还无法正常运行。据研究结果统计:只有15%的项目是按计划完成的。略过软件危机—软件开发成本难以控制投资一再追加,令人难于置信。据同样的研究统计结果表明:仅有10%的项目是按费用计划完成的。例如,20世纪80年代初,美国国内税收服务处(IRS)让Sperry公司开发一套联邦税收表格自动处理系统。结果是:系统被证明不适合当前的工作量,花费几乎是预算的两倍,必须立即更换(华盛顿邮报的报道)。到1985年,还需要再追加9千万美元来改进Sperry公司最初价值1.03亿美元的设备。另外,因为出现的问题阻碍了IRS按时返还纳税者的税款,IRS还被迫偿还4.02亿美元的利息以及2.23千万美元的工资给加班职员。软件危机—软件产品质量无法保证开发人员和用户之间很难沟通、矛盾很难统一。往往是软件开发人员不能真正了解用户的需求,而用户又不了解计算机求解问题的模式和能力,双方无法用共同熟悉的语言进行交流和描述。在双方互不充分了解的情况下,就仓促上阵设计系统、匆忙着手编写程序,这种“闭门造车”的开发方式必然导致最终的产品不符合用户的实际需要。软件危机—用户对产品功能难以满足系统中的错误难以消除。软件是逻辑产品,质量问题很难以统一的标准度量,因而造成质量控制困难。例如,一次美国在肯尼迪角发射一枚阿脱拉斯火箭,预定将用这种火箭运载飞往金星的宇宙飞船。火箭飞离地面几十英里高空开始翻转,地面控制中心被迫下令自爆炸毁。后经检查发现是飞行计划程序中漏掉一个连字符。就是这样一个连字符的疏漏造成这枚价值1850万美元的火箭实验失败。据统计数字表明:在大型系统中,约3/4的系统有问题。软件危机—软件产品难以维护软件产品本质上是开发人员的代码化的逻辑思维活动,他人难以替代。除非是开发者本人,否则很难及时检测、排除系统故障。为使系统适应新的硬件环境,或根据用户的需要在原系统中增加一些新的功能,又有可能增加系统中的错误。软件危机—软件缺少适当的文档资料文档资料是软件必不可少的重要组成部分。实际上,软件的文档资料是开发组织和用户的之间权利和义务的合同书,是系统管理者、总体设计者向开发人员下达的任务书,是系统维护人员的技术指导手册,是用户的操作说明书。缺乏必要的文档资料或者文档资料不合格,将给软件开发和维护带来许多严重的困难和问题。软件危机—软件开发供不应求软件开发生产率的提高速度,难以满足社会需求的增长率。软件产品“供不应求”的现象致使不能充分利用现代计算机硬件提供的巨大潜力。伴随着软件危机的存在引入软件工程3.1软件工程的基本概念形成:为了摆脱软件危机,北大西洋软件组织成员国软件工作者于1968-1969年,两次召开会议,认识早期软件开发中所存在的问题和产生问题的原因,提出软件工程的概念.目的:软件工程是指导计算机软件开发和维护的一门学科,它应用计算机科学、数学和管理科学等原理,以及借鉴传统工程的原则和方法,来创建软件,从而达到提高质量、降低成本的目的。软件工程:是研究和应用如何以系统化的、规范的、可度量的方法去开发、运行和维护软件,即把工程化应用到软件上。软件工程是一门交叉学科软件工程的主要研究内容软件开发技术:软件开发方法学软件开发过程软件工具和软件工程环境软件工程管理:软件管理学软件经济学软件心理学软件工程所包含的内容不是一成不变的,随着人们对软件系统的研制开发和生产的理解。应用发展的眼光看待它。软件工程—一种层次化技术工具方法过程质量焦点Softwareengineeringlayers软件工程三个要素(**):方法、工具、过程软件工程必须以有组织的质量保证为基础,全面质量管理和过程改进使得更加成熟的软件工程方法不断出现。三要素:质量焦点:软件工程过程是进行一系列有组织的活动,从而能够合理和及时地开发出计算机软件。过程定义了技术方法的采用、工程产品(包括模型、文档、数据、报告、表格等)的产生、质量的保证和变更的管理。软件工程方法为软件开发提供“如何做”的技术。它包括了项目计划、需求分析、系统设计、程序实现、测试与维护等一系列的任务。软件工程工具为过程和方法提供自动的或半自动的支持。这些软件工具被集成起来,建立起一个支持软件开发的系统,称之为计算机辅助软件工程(CASE,ComputerAidedSoftwareEngineering)。CASE集成了软件、硬件和一个存放开发过程信息的软件工程数据库,形成了一个软件工程环境过程、方法、工具软件工程与一般工程的差异软件是逻辑产品而不是实物产品软件的功能依赖于硬件和软件的运行环境以及人们对它的操作软件设计的复杂性软件特征:功能的多样性实现的多样性能见度低软件结构合理性差智力密集及知识产权保护“软件工程”课程与其它软件专业课的区别(1)立足于系统的整体。(2)讲授系统分析、系统设计、测试及维护的理论和方法。(3)构筑一个软件系统,实践软件开发全过程。“软件工程”课程教学的目标转变对软件的认识:上升程序系统转变思维定式:上升程序员系统工程师(系统分析员)工程化训练系统分析员的地位用户分析员程序员“一个好的工业,应有一套良好的标准来配套”软件的工业化生产过程应具备的特点:明确的工作步骤详细具体的规范化文档明确的质量评价标准软件产品的标准化软件开发过程的标准化软件工程技术的两个明显特点:强调规范化强调文档化3.1.2软件生命周期一.定义:(SoftwareLifeCycle)软件产品从提出、实现、使用维护到停止使用的过程称为软件生命周期。软件生命周期可以划分为软件定义、软件开发和软件运行维护三个时期,每个时期又进一步划分成若干个阶段。概要设计可行性研究与计划制定需求分析定义阶段详细设计实现测试使用开发阶段维护运行维护阶段退役确定开发目标和总的要求,给出功能、可靠性等可能方案,制定实施计划.对软件需求进行分析并给出详细定义,编写软件规格说明书及初步的用户手册,提交评审。给出软件的结构、模块和功能的划分等,确定算法。编写概要设计、详细设计说明书和测试计划初稿。源程序编码,把软件设计转换成计算机可以接受的程序代码。编写用户手册、操作手册和单元测试计划。设计测试用例,检验软件各个组成部分。编写测试分析报告。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。只考虑编写程序涉及整个软件生存周期扩展到软件工作的范围在实践中,软件开发并不总是按照计划、分析、设计、实现、测试、集成、交付、维护等顺序来执行的,即各个阶段是可以重叠交叉的。整个开发周期经常不是明显地划分为这些阶段,而是分析、设计、实现、再分析、再设计、再实现等迭代执行。注意:软件开发的基本策略一、复用复用就是利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统。软构件(SoftwareComponent):具有一定集成度并可以重复使用的软件组成单元。软件复用就是直接使用已有的软构件,即可组装(或加以合理修改)成新的系统,而可以不必每次从零做起。可重用部件组装模型系统A的软件构成系统C的软件构成系统B的软件构成可重用部件可重用部件应用软件系统分解用构件建造新软件定义所需结构集合提取构件创建新构件查询软构件库复用优点:降低了软件的成本、提高了生产率而且新系统也具有较高的质量。使用构件开发软件的过程:二、分而治之子问题1子问题3模块子问题2模块1模块分解集成复杂问题软件系统分而治之是指把大而复杂的问题分解成若干个简单的小问题,然后逐个解决。诸如软件的体系结构设计、模块化设计都是分而治之的具体表现。软件开发的基本策略优化工作是十分复杂的,有时很难实现所有目标的优化,这时就需要“折中”策略。软件的折衷策略是指通过协调各个质量因素,实现整体质量的最优。软件折中的重要原则是不能使某一方损失关键的职能,更不可以象“舍鱼而取熊掌”那样抛弃一方。优化:为了提高软件质量,程序员会不断改进软件中的算法,数据结构和程序组织。三、优化与折中软件开发的基本策略67%2%4%1%6%5%7%8%需求分析规格说明计划设计模块代码模块测试集成维护软件开发的各阶段的成本比例软件工程基本概念补充习题讲解1.软件开发的结构化生命周期方法将软件生命周期划分成___。A.定义、开发、运行维护B.设计阶段、编程阶段、测试阶段C.总体设计、详细设计、编程调试D.需求分析、功能定义、系统设计2.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是______。A.概要设计B.详细设计C.可行性分析D.需求分析3.下面不属于软件工程的3个要素的是______。A.工具B.过程C.方法D.环境4.软件是一种______。A.程序B.数据C.逻辑产品D.物理产品5.下列描述中正确的是______。(等级考试题)AB)软件工程主要解决软件产品的生产率问题C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D)软件工程只是解决软件开发中的技术问题3.2结构化分析方法3.2.1需求分析与需求分析方法需求阶段是软件开发的关键阶段。需求分析的任务:准确地定义未来系统的目标,确定为了满足用户的需求系统必须做什么。用需求规格说明书规范的形式准确地表达用户的需求。需求分析阶段的工作(四方面):需求获取确定系统各方面需求,全面地提炼出系统的功能性与非功能性需求。需求分析编写需求规格说明书需求审评对获取的需求分析和综合,给出系统解决方案和逻辑模型。为用户、设计人员的交流提供方便,还可作为控制软件开发进程的依据。复审需求分析阶段的工作,验证需求文档的一致性、可行性等。清楚地理解所要解决的问题完整地获取用户需求需求获取的目的某出版社系统调查表编号提出问题1您在哪个部门