《计算机软件基础》软件工程_第1页
《计算机软件基础》软件工程_第2页
《计算机软件基础》软件工程_第3页
《计算机软件基础》软件工程_第4页
《计算机软件基础》软件工程_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章软件工程根底6.1软件工程概述6.2软件详细设计6.3结构化分析与设计方法6.4测试与调试根本技术16.1软件工程概述6.1.1软件工程的概念6.1.2软件生命周期6.1.3软件支援环境2软件工程出现的原因软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。现象一:软件开发本钱和进度的估计不准确,交付时间一再拖延,造成开发本钱超出预算。案例:1995年,新丹佛国际化机场自动化行李系统的软件出现故障,导致机场延期16个月才正式启用,并且大局部行李采用人工分拣,系统本钱超出预算32亿美元。原因:软件复杂程度高,开发周期长,并且各种变化不断,因此软件工程按期完成交付的很少。3现象二:“已完成”的软件不满足用户的需求案例:1984年,经过18个月的开发,一个耗资2亿美元的系统支付给了美国威斯康星州的一家健康保险公司。但该系统不能满足用户的正常工作需求,只好追加了6千万美金,又花了3年时间才解决了问题。原因:软件开发人员不是用户业务的专家,用户不懂计算机软件技术,因此,软件人员按照自己的理解开发出得软件往往不能满足用户的业务需求。4现象三:软件产品的质量没有保证案例:1996年6月4日,Ariane5火箭首次发射,在升空大约40秒且高度不到4千米处,火箭突然发生爆炸,该事件造成了50亿美元的损失。事故原因是在Ariane5中使用了Ariane4火箭的程序代码,在将64位浮点数转换为16位带符号整数的程序中,更快的运算引擎导致了Ariane5中的64位数据要比Ariane4中更长,直接诱发了溢出条件,最终导致了航天计算机的崩溃。原因:软件质量和可靠性的评估非常困难。这些投资巨大、技术一流、管理标准、测试充分的软件也难保不出现质量问题。5现象四:软件通常没有适当的文档资料或文档与最终交付的软件产品不符。原因:软件几乎不可能一版保证成功,而是经历反复修改,其中的文档很难与每次的修改保持一致,错误的文档就像错误的地图一样危险。现象五:软件的可维护程度低。原因:软件开发过程中,起着重要作用的是开发者的逻辑思维过程。如果假设干年后,由其他人来修改,必须要理解开发者当时的思维过程,因此说读懂别人的程序比重新编写的难度更大。6软件危机出现的原因主要有两个方面:其一是软件本领的特点;其二是软件开发过程不成熟。软件开发过程不成熟的主要表现为:无视软件开发前期的调研与分析工作,没有统一、标准的方法论指导,轻视文档管理和质量保证工作,缺乏相关人员之间的沟通。7简陋的小屋—太简单!不要设计8新农村别墅造型图—复杂!需要设计了9别墅的设计—设计图纸、施工图纸10设计和施工说明11典型helloworld程序—太简单!不要设计#include<stdio.h>

intmain()

{

printf(“helloworld!”);//输出helloworld!

return0;

}12图书馆图书信息管理软件—复杂!需要设计136.1.1软件工程的概念软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科。所谓软件工程是指,采用工程的概念、原理、技术和方法指导软件的开发与维护。把经过实践考验而证明正确的管理方法和先进的软件开发技术结合起来,运用到软件开发和维护过程中,来解决软件危机。14软件定义期:包括问题定义、可行性研究和需求分析三个阶段;软件开发期:包括系统设计、详细设计、编码和测试四个阶段;软件维护期:即运行维护阶段。6.1.2软件生命周期151.软件定义期(1)问题定义确定问题的性质、工程目标以及规模。分析员应提交书面报告给用户与使用部门负责人进行审查。(2)可行性研究进一步研究上一阶段所定义的问题是否可解。最后还要提交必要的文档。16(3)需求分析①确定对系统的综合要求,即功能要求、性能要求、运行要求以及将来可能会提出的一些要求。②对系统的数据要求进行分析。主要包括数据元素的分类和标准化,描绘实体之间的关系图,进行事务分析与数据库模型的建立。③在前面分析的根底上,推导出系统的详细模型系统。④修正开发方案,并建立模型系统。文档内容:①系统的功能说明②系统对数据的要求③用户系统描述172.软件开发期(1)系统设计①提出可选择方案;②选择合理方案;③推荐最正确方案;④功能分解;⑤设计软件结构;⑥制定测试方案;⑦提交文档。18(2)详细设计(3)编码①选择适当的程序设计语言;②使程序内部有良好的文档资料、标准的数据格式说明、简单清晰的语句结构和合理的输入输出格式,这些都可以大大提高程序的可读性,而且也可以改进程序的可维护性;③充分利用已有的软件工具来帮助编码,以提高编码的效率和减少程序中的错误。(4)测试193.软件维护期①为纠正使用中出现的错误而进行的改正性维护;②为适应环境变化而进行的适应性维护;③为改进原有软件而进行的完善性维护;④为将来的可维护和可靠而进行的预防性维护。206.1.3软件支援环境一个完备的软件支援环境应有功能:(1)能够支援软件生命的全周期。(2)能够支援大型软件工程工程。(3)能够支援软件配置管理。一般的软件支援环境由以下几局部组成。(1)环境数据库(2)接口软件(3)工具组216.2软件详细设计6.2.1程序流程图6.2.2NS图6.2.3问题分析图PAD6.2.4判定表6.2.5过程设计语言PDL22详细设计详细设计也叫过程设计,应该在软件结构设计、数据设计之后进行。主要是设计模块内的算法实现细节。详细设计的任务不是编写代码,而是要为编写程序代码设计“图纸”,有程序员按“图纸”用某种高级程序设计语言编写程序代码。详细设计的目的不仅仅是保证所涉及的模块功能正确,更重要的是保证所设计的处理过程易于理解,具有良好的可靠性和可维护性。236.2.1程序流程图程序流程图中常用的图形符号24结构化程序设计限制五种根本控制结构(1)顺序结构反映了假设干个模块之间连续执行的顺序。(2)在选择结构中,由某个条件P的取值来决定执行两个模块之间的哪一个。(3)在当型循环结构中,只有当某个条件成立时才重复执行特定的模块(称为循环体)。(4)在直到型循环结构中,重复执行一个特定的模块,直到某个条件成立时才退出该模块的重复执行。(5)在多情况选择结构中,根据某控制变量的取值来决定选择多个模块中的哪一个。2526程序流程图的主要缺点:(1)程序流程图本质上不是逐步求精的好工具,它会使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。(2)程序流程图不易表示层次结构。(3)程序流程图不易表示数据结构和模块调用关系等重要信息。(4)程序流程图中用箭头代表控制流,因此,程序员不受任何约束,可以完全不顾结构程序设计的思想,随意进行转移控制。276.2.2NS图NS图根本特点:(1)功能域比较明确,可以从框图中直接反映出来。(2)不可能任意转移控制,符合结构化原那么。(3)很容易确定局部和全程数据的作用域。(4)很容易表示嵌套关系,也可以表示模块的层次结构。281.顺序结构292.选择结构(1)两路分支结构30(2)多路分支结构313.循环结构(1)当型循环结构32(2)直到型循环结构336.2.3问题分析图PAD〔ProblemAnalysisDiagram〕

PAD图的五种根本控制结构346.2.4判定表一张判定表由以下四局部组成:左上部列出所有条件;左下部是所有可能的动作;右上部是表示各种条件组合的一个矩阵;右下部是和每种条件组合相对应的动作。判定表右半部的每一列实际上就是一个规那么,规定了与特定的条件组合相对应的动作。35假设某大学要从学生中挑选男子篮球队队员,根本条件是各门课程的平均分在70分以上,身高超过1.80米,体重超过75公斤。需要从学生登记表中挑选出符合上述条件的男同学,并列出他们的姓名和住址,以便进一步选拔。36376.2.5过程设计语言PDLPDL特点:(1)关键字的固定语法,提供了结构化控制结构、数据说明和模块化的特点。(2)用自然语言的自由语法来描述处理局部。(3)具有数据说明的手段。(4)具有模块定义和调用的机制,提供各种接口描述模式。38PDL优点:(1)可以作为注释直接插在源程序中间。这样做的好处是,能促使维护人员在修改源程序代码的同时也修改PDL注释,有助于保持文档和程序的一致性,提高了文档的质量。(2)可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。(3)利用已有的自动处理程序,可以自动由PDL生成程序代码。396.3结构化分析与设计方法6.3.1应用软件开发的原那么和方法6.3.2结构化分析方法6.3.3结构化设计方法406.3.1应用软件开发的原那么和方法1.应用软件开发的根本原那么(1)自顶向下的系统结构开发原那么(2)模块化结构开发原那么412.应用软件的开发方法(1)非自动形式的开发方法①系统流程图法(systemflowchart)②结构化分析方法〔SA方法〕③结构化设计方法〔SD方法〕④数据结构法〔Jackson法〕⑤层次输入-处理-输出方法〔HIPO方法〕42(2)半自动形式的开发方法①SREM方法②PSL/PSA方法PSL是一种问题说明语言〔ProblemStatementLanguage〕PSA是一种问题说明分析器〔ProblemStatementAnalyzer〕MICRO_PSL/PSA系统(3)自动形式的系统开发方法主要以HOS〔HigherOrderSoftware公司〕方法为代表。436.3.2结构化分析方法SA〔StructualAnalysis〕1.SA方法的特点(1)分解和抽象4445(2)文档的标准化①一套分层的数据流程图,用于描述系统的逻辑关系。②一本数据字典,用于描述系统中所用到的全部数据和文件。③一组小说明,描述各个加工处理应完成的工作。④其他补充材料,描述尚未说明或需要进一步交代的问题。(3)面向用户(4)系统的逻辑设计和物理设计分开进行462.数据流程图(1)数据流程图的概念①用数据流程图描述系统中信息的变换和传递过程,并辅以其他形式的说明,如数据字典、判定表和判定树等。②将数据流程图转换成相应的软件结构。

数据流程图简称DFD〔DataFlowDiagram〕47研究生业务活动数据流程图48(2)数据流程图的组成符号49(3)画数据流程图的方法①自顶向下逐层分解②由外向里逐渐深化503.数据字典在数据字典中,通常有四种类型的条目。(1)根本数据项条目例如,学生“年龄”这个数据项的定义如下:数据项名称:学生年龄数据类型:整型数据长度:一个字节取值范围:16~3051(2)数据流条目课程目录=课程名+学时+学分+教员+课表其中“教员”又可以列为一个子目录,表示为教员=姓名+年龄+职称“课表”也可以列为一个子目录,表示成课表=星期几+第几节+教室

52数据流条目的各数据项可以分为以下三种:①必有项,即数据流条目中必定包含的数据项;②必选项,即在某几项中必定出现其中一项或几项;③任选项,即可选可不选的数据项。在表示数据流条目时,一般要用到以下一些符号:=含义是“定义为”或“等价为”+含义是连接,表示几个数据项的合成[]表示必选项()表示任选项{}表示重复〔有时用上下标表示重复次数〕例如,考试成绩={学号+姓名}1100+[平均分+方差]53(3)文件条目(4)加工条目〔即数据处理条目〕546.3.3结构化设计方法1.结构化设计方法的特点结构化设计方法简称SD〔StructuredDesign〕(1)如何将系统划分为一个个模块;(2)模块之间传递什么数据;(3)模块之间如何进行调用;(4)如何评价模块结构的质量。552.结构图结构图简称SC〔StructuredChart〕图56计算工资的结构图57(1)模块(2)调用(3)模块间信息传递(4)辅助符号583.由数据流程图导出结构图(1)变换型从变换型DFD导出结构图59(a)数据流程图60(b)结构图61(2)事务型从事务型DFD导出结构图示意图62(a)数据流程图模型63(b)结构图644.模块独立性评价(1)耦合模块之间的耦合反映了模块的独立性,也反映了系统分解后的复杂程度。为了使系统各模块之间相互影响尽可能地少,使系统简单而易理解,应减少模块之间的耦合程度。①数据耦合②同构耦合③控制耦合④公用耦合⑤内容耦合6566(2)内聚内聚是对一个模块内部元素之间功能上相互联系强度的测量。模块内聚度又称为模块强度。一个模块的内聚度越高,与其他模块之间的耦合程度也就越弱。①功能内聚②序列内聚③通信内聚④过程内聚⑤时间内聚⑥逻辑内聚⑦偶然内聚67逻辑内聚模块的分解6869决定内聚程度的判定树706.4测试与调试根本技术6.4.1测试6.4.2调试71据新华社洛杉矶2002年6月报道,美国一家研究所公布的调查结果说明,软件错误使美国每年损失高达595亿美元。同时指出,如能做好检测工作,即在软件开发的早期发现漏洞并进行弥补每年能给美国企业节省本钱222亿美元。然而,目前软件中一半以上的错误是在开发的后期或者售后使用中才被发现的。72测试的工作量一般性软件其测试工作量大约占整个开发工作量的40%系统软件或关系到人的生命财产平安的重要软件,其测试工作量通常可能到达整个开发工作量的3—5倍736.4.1测试1.测试的根本概念测试具有以下三个重要特征。(1)测试的挑剔性测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷。①测试是程序执行的过程,目的在于发现错误;②一个好的测试在于能发现至今未发现的错误;③一个成功的测试是发现了至今未发现的错误。74(2)完全测试的不可能性

测试只能说明程序有错,而不能证明程序无错,希望通过有限次的测试就能发现程序中的所有错误是不可能的,即完全测试是不可能的。由于测试的这一特征,程序也不可能具有百分之百的可靠性。75(3)测试的经济性①没有语法错误;②运行有结果;③对典型数据能得到正确的结果;④对典型的有效数据能得到正确的结果,对无效数据有防范措施;⑤对一切能出现的数据不出错。762.测试的过程(1)程序的静态分析(2)程序的动态分析(3)自动测试工具77静态测试:主要通过代码审查和静态分析,检查源代码中存在的问题。过程:代码审查由有经验的程序设计人员根据软件详细设计说明书,阅读程序来发现源程序中类型、引用、参数传递、表达式等不必运行程序就能够发现的错误。特点:这种方法不需要专门的测试工具和设备,一旦发现错误就能定位,但是此方法具有一定的局限性。静态分析主要对程序进行控制流分析、数据流分析、接口分析和表达式分析等

78动态测试:在指定的环境上运行被测程序,输入测试数据,获得测试结果,将获得的测试结果与预期的结果进行比较,发现程序的错误。过程:设计测试用例,运行被测程序。特点:需要有程序的运行环境,必要时要编写测试驱动程序和桩程序。793.测试的层次(1)模块测试①模块接口②局部数据结构③重要路径④错误处理的能力⑤I/O错80模块测试的结构81(2)整体测试整体测试可分为渐增式与非渐增式两种。非渐增式的整体测试是将经过单独测试的所有模块连接到一起进行测试。渐增式的整体测试往往是与模块测试同步进行的,即在对模块逐步装配的过程中同时进行的。这种测试方式可以减少模块测试时要设计的驱动模块或承接模块,又可以及时、准确地发现结构错误的位置。渐增式的整体测试一般可以分为“自顶向下”和“自底向上”两种。①“自顶向下”渐增式测试②“自底向上”渐增式测试82(3)高级测试①功能测试功能测试又称有效性测试,主要是用黑箱法测试软件功能是否与用户一致。②系统测试把软件元素与硬件元素结合在一起进行测试。③验收测试主要检查程序的操作与原设计要求以及用户要求是否一致。这类测试常以用户为主体进行。④安装测试主要检查软件在安装时产生的问题。834.测试的方法设计和使用测试用例根本原那么:①设计测试用例时,应同时确定程序运行的预期结果。②测试用例不仅要选用合理的输入数据,也要选用不合理的输入数据。③除了需要检查程序是否做了应该做的事,还要检查程序是否做了不应该做的事。④千万不要梦想程序是正确的。⑤要保存有用的测试用例,以便再测试时使用。⑥测试用例要系统地进行设计,不可随意凑合。84(1)白箱法白箱测试用例的设计准那么有:语句覆盖,分支覆盖,条件覆盖和组合条件覆盖。①语句覆盖语句覆盖准那么是企图用足够多的测试用例,使程序中的每个语句都执行一遍,以便尽可能多地发现程序中的错误。这是一个非常弱的测试方法。因为每条语句都执行一次,仍然会有许多错误测试不出来。85某程序段如下:…IF(a>1andb=0)THENx=x/aIF(a=2orx>1)THENx=x+1…86每条语句都执行一次,程序中第二个判定OR写成AND仍然不能被发现错误87②分支覆盖分支覆盖准那么也称为判定覆盖准那么。它要求通过足够多的测试用例,使程序中的每个分支至少通过一次。8889③条件覆盖条件覆盖准那么是通过执行足够多的测试用例,使每个判定中的每个条件都能取到两种不同的结果〔“真”与“假”〕。用以下两个测试用例便可以使每个条件都能取到“真”值和“假”值:a=2,b=1,x=1〔“a>1”为真,“b=0”为假,“a=2”为真,“x>1”为假〕a=1,b=0,x=3〔“a>1”为假,“b=0”为真,“a=2”为假,“x>1”为真〕90④组合条件覆盖组合条件覆盖准那么要求通过足够多的测试用例,使每个判定中各条件的各种可能组合至少出现一次。例如,第一个判定框中的两个条件有以下四种组合:条件组合1a>1,b=0;条件组合2a>1,b≠0;条件组合3a≤1,b=0;条件组合4a≤1,b≠0。第二个判定框中的两个条件也有以下四种组合条件组合5a=2,x>1;条件组合6a=2,x≤1;条件组合7a≠2,x>1;条件组合8a≠2,x≤1.91下面的四个测试用例就可以覆盖上述八种可能的条件组合:a=2,b=0,x=3〔覆盖条件组合1和5〕a=2,b=1,x=1〔覆盖条件组合2和6〕a=1,b=0,x=3〔覆盖条件组合3和7〕a=1,b=1,x=1〔覆盖条件组合4和8〕9293(2)黑箱法常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法。①等价分类法等价分类法是把所有可能的输入数据〔有效的和无效的〕划分成假设干等价类,使每一类中的一个典型数据在测试中的作用与这一类中所有其他数据的作用相同。在实际进行测试时,可以从每个等价类中只取一组数据作为测试用例。等价分类法分为两步:一是划分等价类〔包括有效等价类和无效等价类〕;二是从每个等价类中选取测试用例。划分等价类的根本方法:根据程序的功能说明,找出所有的输入条件,然后为每一个输入条件划分等价类。9495·如果输入条件规定了值的范围,那么可以确定一个有效等价类和两个无效等价类;·如果输入条件规定了值的个数,那么可以确定一个有效等价类和两个无效等价类;·如果输入条件规定了一个输入值的有穷集,且确信程序对每个输入值单独处理,那么可以对集合中的每一个输入值确定一个有效等价类,同时可以确定一个无效等价类;·如果输入条件规定了“必须如何”的条件,那么可以确定一个有效等价类和一个无效等价类;·如果确信某一等价类中的各元素在程序中的处理方式是有区别的,那么应把这个等价类分成更小的等价类。96②边值分析法·如果输入条件规定了值的范围,那么要对这个范围的边界情况以及稍超出范围的无效情况进行测试;例如,输入范围是1到10的整数,那么测试用例的取值:0,1,10,11·如果输入条件规定了值的个数,那么要分别对值的最大个数、最小个数、稍多于最大个数和稍少于最小个数的情况进行测试;例如,要求的记录个数是1到255,那么设计的记录个数分别为:0,1,255,256·对于输出条件使用上述两条;·如果输入和输出是有序集,那么应把注意力集中在第一和最后一个元素上。97③因果图法④错误推测法例如,要测试一个排序程序,特别需要检查的情况有:·输入表为空;·输入表只含有一个元素;·输入表中所有元素相同;·输入表实际有序。98(3)综合策略①如果程序功能说明中包含有输入条件的组合,便应从因果图开始,以减少组合情况。②在任何情况下都要用边值分析法,通过分析输入和输出条件的边界值,补充一些测试用例。③判别输入/输出的有效和无效等价类,进一步补充测试用例。④利用错误推测法补充一些测试用例。⑤查看上述测试用例的覆盖程度,对未满足的覆盖标准,增加一些测试用例。996.4.2调试调试也称排错调试与测试的关系:(1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论