




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,第12章软件工程基础,软件工程学将计算机科学理论与现代工程方法论相结合,着重研究软件过程模型、设计方法、工程开发技术和工具,是指导软件生产和管理的一门新兴的、综合性的应用科学。随着计算机科学和软件产业的迅猛发展,软件工程学已成为一个重要的计算机分支学科,一个异常活跃的研究领域,正在不断涌现新方法、新技术,蓬蓬勃勃地发展着。本章主要介绍软件生命周期、,.,12.1软件工程概述12.2软件测试,.,12.1软件工程概述,12.1.1软件工程的概念12.1.2软件生命周期12.1.3应用软件开发的原则和方法12.1.4软件开发模型12.1.5软件详细设计的表达,.,12.1.1软件工程的概念,软件工程是指采用工程的概念、原理、技术和方法指导软件的开发与维护。软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。在软件研制开发过程中,若能严格遵循软件工程的方法论,便可提高软件开发的成功率,减少软件开发和维护中出现的问题。软件工程的目标是在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可适应性、可追踪性、可移植性、可互操作性并满足用户需求的软件产品。,.,12.1.2软件生命周期,软件工程注重研究如何指导软件生产全过程的所有活动,以最终达到“在合理的时间、成本等资源的约束下,生产出高质量的软件产品”的目标。为了更有效、更科学地组织和管理软件生产,根据某一软件从被提出并着手开发实现,直到软件完成其使命为止的全过程划分为一些阶段,并称这一全过程为软件生命周期。通常,软件生命周期包括8个阶段:问题定义、可行性研究、需求分析、系统设计、详细设计、编码、测试、运行维护。为使各时期的任务更明确,又可以分为以下3个时期:软件定义期:包括问题定义、可行性研究和需求分析三个阶段。软件开发期:包括系统设计、详细设计、编码和测试四个阶段。软件维护期:包括运行维护阶段。,.,1.问题定义问题定义阶段的任务是确定问题的性质、工程目标以及规模。这是软件生命周期的第1阶段,应力求使软件开发人员、用户以及使用部门负责人对问题的性质、工程目标与规模取得完全一致的看法,这对确保软件开发的成功是非常重要的。一旦对问题有了明确认识之后,分析员应提交书面报告给用户与使用部门负责人进行审查。,.,2.可行性研究可行性研究阶段的任务是进一步研究上一阶段所定义的问题是否可解。在问题定义的基础上,通过复查系统的目标和规模,并研究现在正使用的系统,从而导出试探性的解。这个过程可能要反复多遍,最后导出新系统的高层逻辑模型。在系统的高层逻辑模型的基础上,再从各方面分析物理系统的可行性,推荐一个可行方案,供有关部门审批。,.,3.需求分析需求分析阶段的任务是根据可行性研究阶段提交的文档,特别是从数据流图出发,对目标系统提出清晰、准确和具体的要求,即要明确系统必须做什么的问题。这一阶段的具体任务包括以下几个方面:(1)确定对系统的综合要求、即功能要求、性能要求、运行要求以及将来可能会提出的一些要求。(2)对系统的数据要求进行分析,主要包括数据元素的分类和规范化、描绘实体之间的关系图、进行事务分析与数据库模型的建立。(3)在前面分析的基础上,推导出系统的详细模型系统。(4)修正开发计划并建立模型系统。,.,4.系统设计系统设计阶段的任务是划分出构成系统的各物理元素(如程序、文件、数据库、人工过程与文档等)以及设计出软件的结构(如确定模块及模块间的关系)。设计过程通常分为以下几步:(1)提出可选择方案。(2)选择合理方案。(3)推荐最佳方案。(4)功能分解。(5)设计软件结构。(6)制定测试计划。(7)提交文档。这一阶段的最后要对结果进行严格技术审查,然后由使用部门负责人从管理的角度进行审查。,.,5.详细设计详细设计阶段的任务是对系统做出精确的描述,以便在编码阶段可直接将这一描述用程序设计语言编制成程序。除了应该保证程序的可靠性外,此阶段最重要的目标是要保证将来的程序易读、易理解、易测试、易修改和易维护。结构程序设计技术就成为实现上述目标的基本保证,并且也是详细设计的逻辑基础。,.,6.编码编码阶段的任务是将系统设计与详细设计阶段中的结果翻译成用某种程序设计语言书写的程序。虽然程序的质量基本上由设计的质量决定,但在编码过程中也有几个因素对提高程序质量有重大的影响,主要有以下几个方面。(1)选择适当的程序设计语言。(2)使程序内部有良好的文档资料、规范的数据格式说明、简单清晰的语句结构和合理的输入输出格式,这些都可以大大提高程序的可读性,而且也可以改进程序的可维护性。(3)充分利用已有的软件工具来帮助编码,以提高编码的效率和减少程序的错误。,.,7.测试测试阶段的任务是要尽量发现程序中的错误。目前,软件测试仍然是保障软件可靠性的主要手段,它是软件开发过程中最艰巨也是最繁重的工作。调试不同与测试,测试主要是推断错误的原因,从而进一步改正错误,但决不能证明程序的正确性。测试和调试是软件测试阶段的两个密切相关的过程,通常是交错进行的。,.,8.维护维护阶段的任务是对软件产品进行修改或对软件需求变化作出响应。当发现软件产品中的潜伏错误,或用户提出要对软件需求进行修改,或软件运行环境发生变化时,都要对软件进行维护。软件维护是软件生命周期的最后一个阶段,也是持续时间最长、付出代价最大的阶段。软件维护通常有以下四类:(1)为纠正使用中出现的错误而进行的改正性维护。(2)为适应环境变化而进行的适应性维护。(3)为改进原有软件而进行的完善性维护。(4)为将来的可维护和可靠性而进行的预防性维护。,.,软件的可理解性、可测试性与可修改性将直接影响和决定软件的可维护性,而且软件生命周期的各个阶段也都与可维护性有关。良好的设计、完善的文档资料以及一系列严格的复审和测试,都会使错误一旦出现就较为容易诊断和纠正;而且当用户有要求或外部环境有变化时,软件都比较容易适应,并能减少维护所引起的副作用。因此,在软件生命周期的各个阶段都必须充分考虑维护的问题,并且为维护作好准备。软件维护不仅包括程序代码的维护,还包括文档的维护。文档可以分为用户文档和系统文档两类。但无论是哪类文档,都必须与程序代码同时维护。只有与程序代码完全一致的文档才有意义和价值。目前已有许多软件工具能够帮助建立文档,这不仅有利于提高书写文档的效率和质量,还有助于文档的及时维护。,.,12.1.3应用软件开发的原则和方法,1.应用软件开发的基本原则应用软件的开发是一个复杂的过程,一般要遵循以下两个原则。(1)自顶向下的系统结构开发原则这种方法是对一个复杂系统进行分解,由高度抽象到逐步具体的方法,形成一个树形结构。在树形结构中,每一层次都设计成独立的模块,每个模块又都可以调用它的下属模块,因此,这是一种逐层分解的方式,也称为层次结构。这种系统结构的优点是关系明了、简单,各层次中的模块之间联系比较少,各模块相对独立,易于理解,便于修改。,.,(2)模块化结构开发原则这种方法是将系统分成若干模块,但整体结构并不要求是树形结构,允许网状结构(即一个模块可以被两个或两个以上的模块所调用)的存在。这种系统结构的特点是结构比较灵活,整个系统类似搭积木一样,独立性强,提供了系统开发的可靠性。,.,2.应用软件的开发方法软件的开发方法是保证软件生产过程的一套规范。软件开发方法的主要内容体现在软件生产的三个方面:明确的工作步骤、具体的文档格式、确定的评价标准。此外,在软件开发过程中还要用一套科学的、规范化的图表工具。随着计算机技术的飞速发展,相继出现了越来越多的开发方法,这些方法各有特点,大致可分为以下三类。(1)非自动形式的开发方法。(2)半自动形式的开发方法。(3)自动形式的系统开发方法。,.,12.1.4软件开发模型,软件过程模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。软件开发模型大体上可以分为三种模型:瀑布模型、原型模型和变换模型。,.,1.瀑布模型瀑布模型(waterfallmodel)在软件工程中占有重要的地位,它提供了软件开发的基本框架。根据软件生存周期各个阶段的任务,瀑布模型从可行性研究开始,逐步进行阶段性变换,直到通过确认测试并得到用户确认的软件产品为止。它有利于大型软件开发过程中人员的组织、管理;有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。,.,2.原型模型软件开发人员根据客户提出的软件定义,快速地开发一个原型,它向客户展示了待开发软件系统的全部或部分功能和性能,在征求客户对原型意见的过程中,进一步修改、完善、确认软件系统的需求并达到一致的理解。快速开发原型的途径有三种:(1)利用个人计算机模拟软件系统的人机界面和人机交互方式。(2)开发一个工作原型,实现软件系统的部分功能,而这部分功能是重要的,也可能是容易产生错误的。(3)找来一个或几个正在运行的类似软件,利用这些软件向客户展示软件需求中的部分或全部功能。由于原型是客户和软件开发人员共同设计和评审的,因此利用原形能统一客户和软件开发人员对项目需求的理解,有助于需求的定义和确认。,.,3.螺旋模型螺旋模型是瀑布模型与原型模型的结合,不仅体现了两个模型的优点,而且还增加了新的成分风险分析。它有需求定义、风险分析、工程实现、评审四部分迭代而成,适于面向对象规格说明、面向过程和面向对象的软件开发方法,也适用于几种开发方法的组合。,.,12.1.5软件详细设计的表达,在软件设计过程中,一个很重要的环节是确定实现各种功能的算法,并且要精确地把它们表达出来。工程上常用的表达工具有以下三类:图形工具即用图形方式来描述实行一个算法的过程。表格工具即用一张表格来列出实现算法过程中的每一步操作。语言工具即将算法的实现过程用某种语言来描述,这种语言一般是类似于某种程序设计语言。,.,1.程序流程图程序流程图又称为程序框图,它是软件开发者最熟悉的一种算法描述工具。它的主要优点是独立于任何一种程序设计语言,比较直观、清晰、易于学习掌握。流程图中的流程线用以指明程序的动态执行顺序。结构化程序设计限制流程图只能使用5种基本控制结构。(1)顺序结构反映了若干个模块之间连续执行的顺序。(2)在选择结构中,由某个条件P的取值来决定执行哪一个模块。(3)在当型循环结构中,只有当某个条件成立时才重复执行特定的模块。(称为循环体)(4)在直到型循环结构中,重复执行一个特定的模块,直到某个条件成立时才退出该模块的重复执行。(5)在多情况选择结构中,根据某控制变量的取值来决定选择多个模块中的哪一个。,.,2.问题分析图PAD图是用结构化程序设计思想来表示程序逻辑结构的一种图形工具。PAD的执行顺序是从左主干线的上端结点开始,自上而下依次执行。当遇到判断或循环时,就自左而右进入下一层,从表示下一层的纵线上端开始执行,直到该纵线下端,再返回上一层的纵线的转入处。如此继续,直到执行到主干线上午下端为止。用PAD图所表达的程序,其结构清晰,结构化程度高,这是PAD的优点。,.,12.2软件测试,软件测试是指为了发现错误而执行程序的过程。一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例。一个成功的测试是发现了至今尚未发现的错误的测试。,.,12.2.1软件测试的准则12.2.2软件测试的层次12.2.3软件测试方法,.,12.2.1软件测试的准则,鉴于软件测试的重要性,要做好软件测试,软件测试人员需要充分理解和运用软件测试的一些基本准则:1.所有测试都应追溯到需求。2.严格执行测试计划,排除测试的随意性。3.充分注意测试中的群集现象。4.程序员应避免检查自己的程序。5.穷举测试不可能。6.妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。,.,12.2.2软件测试的层次,1.模块测试大型程序是由许多模块按层次结构组织在一起的,因此,首先要对组织程序的各个模块进行测试。模块测试又称单元测试。模块测试的目标是发现局部模块的逻辑与功能上的错误和缺陷。它主要对以下几个方面进行测试。(1)模块接口。主要测试穿过模块的数据流(如数据个数、属性、单位、次序等)。如果数据不能被模块正确地接受和输出,进行其他测试则是毫无意义的。(2)局部数据结构。数据结构通常是错误的藏身之地,这些错误主要包括数据引用错(如数组元素下标出界、数据类型不一致、上溢、下溢等)和数据说明错(如不正确的说明、误用系统保留字等)。除了对局部变量进行测试外,有时还需要测试全局变量对模块的影响。,.,(3)重要路径。模块测试的一项基本任务是要选择适当的测试用例,对模块中的重要执行路径进行测试,以暴露程序中的计算错误(如用了非法运算符、运算次序不对、结果溢出等)、比较错误(如运算符错、不同类型数据比较、错误的比较表达式等)以及控制流错误(如循环终止条件不对、嵌套错、程序不能终止等)。(4)错误处理的能力。有意识地给出不合理的输入,以检查程序对错误的处理能力。(5)I/O错。对含有I/O功能的模块,还应测试I/O方面的有关错误,如文件属性是否正确、打开文件语句是否正确、格式说明是否正确等。总之,由于单个模块的规模一般不大,且功能单一、逻辑简单、在进行模块测试时,应尽可能达到彻底测试,力求暴露更多的错误。在测试过程中,测试人员应首先通过模块的说明书和源程序清楚地了解该模块的I/O条件和逻辑结构,测试时以结构测试为主,功能测试为辅。,.,2.整体测试当做完各模块的独立测试后,还要将各模块连接起来进行整体测试。整体测试的目标是尽量暴露模块测试时不能暴露的结构错误,如一个模块是否破坏了另一个模块的功能、数据通过接口时是否会丢失、能否产生主功能、误差是否有积累等。,.,3.高级测试模块测试和整体测试是最基本的测试。除此之外,还有以下四种测试。(1)功能测试。功能测试又称有效性测试,主要是用黑箱法测试软件功能是否与用户要求的一致。(2)系统测试。把软件元素与硬件元素结合在一起进行测试。(3)验收测试。主要检查程序的操作与原设计要求以及用户要求是否一致。这类测试常以用户为主体进行。(4)安装测试。主要检查软件在安装时产生的问题。以上四种测试统称为高级测试。进行这四种测试,往往要求测试人员有比较深入的知识和丰富的经验。,.,12.2.3软件测试方法,对程序进行测试需要使用一些数据,每进行一次测试,就需要一组测试数据,这些测试数据通常称为测试用例。测试的关键是设计测试用例。由于完全测试的不可能性,因此,用有限的测试用例去发现更多的错误就显得非常重要。下面分别介绍用白箱法和黑箱法测试时,其测试用例的设计。,.,1.白盒法白盒测试(又称为逻辑覆盖测试)是根据对程序内部逻辑结构的分析来选取测试用例。测试用例对程序逻辑覆盖的程度决定了测试完全性的程度,白盒测试用例的设计准则有语句覆盖、分支覆盖、条件覆盖和组合条件覆盖四项,下面分别加以说明。(1)语句覆盖。语句覆盖准则是企图用足够多的测试用例,使程序中的每条语句都执行一遍,以便尽可能多地发现程序中的错误。(2)分支覆盖。分支覆盖准则(又称为判定覆盖准则)它要求通过足够多的测试用例,使程序中的每个分支至少通过一次。分支覆盖准则比语句覆盖准则严密了一些,但还是不够充分。这是因为在一个判定中往往包含有多个条件,而用分支覆盖准则并没有考虑将每个条件都测试一次。,.,(3)条件覆盖。条件覆盖准则是通过执行足够多的测试用例,使每个判定中的每个条件都能取到两种不同的结果(“真”与“假”)。(4)组合条件覆盖。虽然条件覆盖要比分支覆盖优越,但条件覆盖并不能完全满足分支覆盖。组合条件覆盖准则要求通过足够多的测试用例,使每个判定中各条件的各种可能组合至少出现一次。,.,2.黑盒法黑盒测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑盒测试有等价分类法、边值分析法、因果图法等。()等价分类法。穷尽的黑盒测试是不现实的,通常只能选取少量最有代表性的输入数据,以期用最小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湖南省郴州桂阳县龙潭街道城镇公益性岗位招聘考前自测高频考点模拟试题及答案详解(各地真题)
- 2025福建漳州长泰区中医院招聘2人模拟试卷及答案详解(夺冠系列)
- 2025福建福州罗源县卫健系统事业单位招聘编内41人考前自测高频考点模拟试题附答案详解
- 2025内蒙古锡林郭勒盟锡林浩特市招募公益性岗位139人考前自测高频考点模拟试题及一套答案详解
- 2025湖北荆州区校园招聘中小学教师49人考前自测高频考点模拟试题及答案详解(夺冠系列)
- 浙江国企招聘2025年金华武义县部分国有企业公开招聘25人笔试历年参考题库附带答案详解
- 庐山文控文化发展有限责任公司公开招聘笔试历年参考题库附带答案详解
- 2025陕西西安秋季博士暨高层次急需紧缺人才招聘500人笔试历年参考题库附带答案详解
- 2025贵州丹寨县扶贫开发有限公司(第二次)招聘4人笔试历年参考题库附带答案详解
- 2025甘肃省建设投资(控股)集团有限公司招聘笔试历年参考题库附带答案详解
- 路灯施工安全责任协议书
- 沪科版七年级上册初一数学全册教案(教学设计)
- 防止电力生产事故25项反措地重点要求最终版
- 第2章-信息可视化设计的概念、原则与类型60课件
- 日本蜡烛图技术完整版
- 崇义县凌志矿冶有限责任公司过埠铁木里铁矿(新增资源)采矿权出让收益评估报告
- 大学学生违纪处罚办法
- 癌痛规范化治疗课件资料
- 牛津9AU3-Head-to-head名师制作优质教学课件
- 深信服SDWAN产品介绍
- 雨露计划职业教育补助-学籍证明-模板四川优秀资料
评论
0/150
提交评论