第14章开发出符合质量要求的软件——异常、调试、测试和部署(c#从入门到精通)_第1页
第14章开发出符合质量要求的软件——异常、调试、测试和部署(c#从入门到精通)_第2页
第14章开发出符合质量要求的软件——异常、调试、测试和部署(c#从入门到精通)_第3页
第14章开发出符合质量要求的软件——异常、调试、测试和部署(c#从入门到精通)_第4页
第14章开发出符合质量要求的软件——异常、调试、测试和部署(c#从入门到精通)_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

第 14 章开发出符合质量要求的软件异常、调试、测试和部署,异常处理和异常类 调试 测试 部署,第 14 章开发出符合质量要求的软件异常、调试、测试和部署,异常处理和异常类 调试 测试 部署,14.1 处惊不变看异常-异常和异常处理,程序中不可避免的存在错误,程序在运行过程中也可能出现异常,就像有时人会生病而不能正常去上班一样。程序员应该对可能出现的错误和异常进行控制和处理,以保证程序的稳定可靠,提高程序的质量。,14.1.1 异常和异常处理,异常是程序执行时遇到的任何错误情况或意外行为。如在打开文件时文件不存在,就会引起异常导致程序中止。异常处理就是编程人员在程序编码中对可能发生的错误和异常所采取的处理措施。如可能存在异常就要进行异常处理.,以保证程序正常运行,适当的异常处理可以避免系统终止当前操作,否则程序可能会出现故障,系统也可能崩溃。如日常生活中,小胡每天8:00准时上班,突然某天因为交通事故无法来上班,交通事故就是异常,于是小胡打电话请假,找人做自己工作等就是异常处理。,14.1.2 异常类,异常通常由应用程序(用户程序等)或运行库(公共语言运行库和应用程序运行库) 引发的。.NET提供了大量与异常有关的类,用来处理异常,每一个异常类都表示一种异常。Exception类是所有异常的基类,当发生异常时,系统或当前正在执行的应用程序通过引发包含关于该错误的信息的异常来报告异常。异常发生后,将由该应用程序或默认异常处理程序进行处理。异常类继承关系的结构图如图所示。,有些异常在基本操作失败时由 .NET Framework 的公共语言运行库 (CLR) 自动引发,如“零做除数时”就会引发 DivideByZeroException异常。下表列出了常用的异常。,对于.NET类来说,一般的异常类System.Exception派生于System.Object,通常不在代码中抛出这个System.Exception对象,因为它无法确定错误的具体情况。通常用的异常类都从Exception类继承。其中有两种主要类型的异常类,它们构成了几乎所有的应用程序和运行库异常的基础。它们分别是: ApplicationException:用户定义的应用程序异常类型的基类。ApplicationException继承Exception,但是不提供扩展功能,必须开发ApplicationException的派生类,以实现自定义异常的功能。 SystemException:是系统异常类。CLR抛出的异常称为系统异常。这些异常通常被看作是不可恢复的、致命的错误。系统异常直接从名为System.SystemException的基类中派生,该基类又从System.Exception中派生。,System.Exception中有许多属性和方法,常有的如下:,14.1.3 异常处理语句,C#提供trycatchfinally结构进行异常处理,语法如下:Try/这里放置有可能出现异常的代码 catch()/这里放置对异常处理的代码 finally/这里放置最后要执行的代码,以执行必要的清理操作,以释放资源;,在 catch 块中可以使用 throw 语句再次引发已由 catch 语句捕获的异常,使用throw语句既可以引发系统异常,也可以引发自定义异常。throw使用格式如下:throw new 异常类;例如:01 throw new ArgumentNullException();/抛出值不能为空的异常throw new ArgumentNullException 实例化了ArgumentNullException 类的一个异常对象,并抛出。只要在try块中遇到一个throw语句,就会立即查找与这个try块对应的catch块以进行异常处理。,【范例14-1】 异常处理例子,实现如字符串为空,抛出ArgumentNullException异常。,14.1.4 自定义异常,程序中出错的情况很多,如果系统提供的异常类不能够与程序中的异常相匹配,就需要自定义异常类。自定义异常类的语法如下:class 自定义异常名:基类异常名/语句块一般要在自定义异常类中定义三种构造函数,三个构造函数如下所示,定义时确保构造函数的参数名称和类型与在下面代码中的相同。,public class NewException : BaseException/从基类继承创建自定义异常类NewException/1.第一个构造函数,自定义异常类无参构造函数03 public NewException()/自定义异常类的无参构造函数04 05 /添加定义的代码06 07 public NewException(string message)/有一个参数的自定义异常类构造函数08 /2.第二个构造函数,有一个字符串类型的参数09 /添加定义的代码10 11 public NewException(string message, Exception inner) 12 /3.第三个构造函数,有二个参数的自定义异常类构造函数13 /添加定义的代码14 15 ,【范例14-2】 自定义一个检查Email是否合法的异常类。,第 14 章开发出符合质量要求的软件异常、调试、测试和部署,异常处理和异常类 调试 测试 部署,14.2 调试,编写程序时的错误一般是通过调试来定位的。下面我们学习程序的调试。14.2.1 错误类型 编写程序时难免会犯错误,如标点符号缺失、关键字写错,程序逻辑错误、运行时错误。调试是解决这些问题最直接的方法和手段,为了能够快速确定错误的原因,尽快排除程序错误,通常把程序错误划分为3种类型:语法错误、运行错误和逻辑错误。1. 语法错误2. 运行时错误3. 逻辑错误,14.2.2 Visual Studio 2008中调试工具,Visual Studio 2008集成开发环境可以在3种模式下工作。1. 设计模式建立应用程序的所有步骤几乎都在这个阶段完成,包括窗体设计、控件布局、编写代码、设置属性等。设计模式下程序并不运行,但可以设置断点。2. 运行模式程序开始运行后,即进入运行模式。此时控制权就交给了应用程序,开发人员可以像用户运行应用程序那样测试程序。在运行模式下,可以查阅代码,但不能进行修改。从“调试”中选择“停止调试”或者直接单击工具栏上的“停止调试”图标按钮,也可以直接使用Shift+F5来终止程序的运行。,3. 中断模式当暂停程序执行时,即进入中断模式。该模式暂停运行程序的执行,这时能够浏览和修改代码,也可以查阅变量的取值。从“调试”菜单中选择“全部中断”菜单项或直接单击工具栏的“全部中断”图标按钮,或者使用Ctrl+Alt+Break都可以暂停程序的运行,进入中断状态。Visual Studio 2008提供了调试器和一组工具,能够帮助编程人员调试代码,提供的调试工具包括:调试工具栏、断点和调试窗口。工具栏中的“启动”、“全部中断”、“停止调试”3个按钮允许快速地在3种模式之间切换,这3个按钮何时起作用与当时的状态有关。调试工具栏如下。,1. 局部变量窗口,局部变量窗口允许查看在局部过程中声明的变量的当前值,局部变量窗口的内容是由系统自动维护的,用户不能添加或删除里面的项,但可以修改某项的值。在中断模式下,选择【调试】【窗口】【局部变量】可以打开局部变量窗口。,2. 自动窗口,自动窗口显示在当前语句和先前语句中使用的变量。用户不能添加或删除里面的项,但可以修改某项的值。当前语句是当前执行位置的语句(如果继续执行,则执行该语句)。调试器自动识别这些变量。在中断模式下,选择【调试】【窗口】【自动窗口】命令可以打开自动窗口。,3. 监视窗口,可以使用监视窗口观察和计算变量和表达式的值并保留结果,也可以使用监视窗口编辑变量或寄存器的值(只能编辑和显示本机代码应用程序的寄存器值)。在中断模式下,选择【调试】【窗口】【监视】命令,有【监视1】、【监视2】、【监视3】或【监视4】4个监视窗口可用。可以将变量名称和表达式从代码、局部变量窗口或自动窗口中拖放到监视窗口中,以查看其值用于判断程序的运行是否有错。,4. 快速监视窗口,快速监视窗口为查看和计算变量与表达式提供了一个快捷的途径,它是是一个模式对话框,必须先关掉它才能继续调试。如只想快速计算一个或几个变量,可用快速监视窗口。快速监视窗口的另一个好处是可改变其大小,如果要查看一个较大对象的成员,在快速监视对话框中通常比在监视、局部变量或自动窗口中更方便展开和查看。在中断模式下,选择【调试】【快速监视】命令打开快速监视对话框;或在代码窗口中,在鼠标右键菜单中选择快速监视命令,也可打开快速监视对话框。,14.2.3 调试的技巧,当程序出错时,出错的具体位置并不容易确定,如能够猜测在某个范围内可能存在的问题时,就需要在此范围开始处设置断点,可采用下面的方式追踪程序的执行,直到发现错误,这种运行方式称为“跟踪”。Visual Studio 2008提供了一下几种跟踪方式。 逐语句(Step Into), 也叫单步执行,即一次执行一条语句。 逐过程(Step Over),把被调用的过程当成一条语句来执行,然后停在下一条语句上。 跳出(Step Out),执行当前过程尚未执行的部分后停在调用过程的下一条语句上。下面结合范例介绍这些调试技巧和使用方法:,【范例14-3】 调试“实现交换两个变量值”的程序。,14.2.4 ASP.NET应用程序的调试和跟踪,一般情况下,ASP.NET页面运行出错时没有错误提示的,如果需要查看详细的错误信息,那么需要为这个页面或整个应用程序启用调试,进行跟踪。1. 配置 ASP.NET Web 应用程序以进行调试 如果只调试单个网页,可以在要调试页面中的指令中添加debug=“true” 属性启用页面调试。要对 ASP.NET Web 应用程序启用调试,必须在“项目属性”页和应用程序的 web.config 文件中都启用调试。 在项目属性中启用 ASP.NET 调试 在“解决方案资源管理器”中右击 Web 项目的名称,然后选择【属性页】,在项目的【属性页】上单击【Web】选项卡,然后在【调试器】下面选中“ASP.NET”复选框。, 在 web.config 文件中启用调试,Web.config 是 XML 文件,因此它包含由标记标出的嵌套节。可使用任何标准文本编辑器或 XML 分析器打开 web.config 文件。在 标记节,设置debug为true。如果没有将 debug 属性设置为 true 就尝试启动调试,将出现一个对话框,建议设置 web.config 文件将调试设置为“true”。web.config是一个XML文件,但不能使用 Web 浏览器远程访问该文件。出于安全原因,ASP.NET 将 Microsoft IIS 配置为防止浏览器直接访问 web.config 文件。如果试图使用浏览器访问配置文件,则会收到 HTTP 访问错误 403(禁止访问)。,2. ASP.NET 跟踪,跟踪是ASP.NET中的引入的新功能,能在应用程序运行时监视其执行的情况。使用 ASP.NET 跟踪可以按照网页的执行路径、显示运行时的诊断信息和调试应用程序。如果想要输出页面执行的跟踪信息,需要启用跟踪,ASP.NET同时支持页面级的跟踪和程序级的跟踪。ASP.NET 跟踪提供以下功能:可以在代码中编写调试语句,而不需在将应用程序部署到服务器上时删除这些语句;可以在页中编写变量或结构,并沿着页面或应用程序的执行路径进行跟踪;可以将 ASP.NET 跟踪与 System.Diagnostics 跟踪集成;可以访问和操作代码中的跟踪消息,以便更好地控制跟踪消息的格式或进行所需的其他处理;使用应用程序级跟踪可以查看可用的最新跟踪数据,而不必重新启动跟踪会话。,使用Visual Studio 2008时,通过运行Web应用就可以在“错误列表窗口”中显示出编译错误信息,在“错误列表窗口”中双击任何一个错误,将直接导航到引发该错误的代码处。如果需要执行更高级的调试,可以使用Visual Studio 2008的调试器,设置启动调试后,就可以象Windows窗体应用程序一样设置断点和逐行执行代码来进行调试了。, 启用页面级的跟踪,默认情况下跟踪是禁用的。可以采用如下方法开启跟踪:在中设置Trace的属性为true,或在代码里添加“Trace.IsEnabled = true;”然后就可以使用Trace添加自己的跟踪信息了。 启用应用程序级跟踪打开网站的 Web.config 文件。在system.web节添加一个 trace 元素,设置 trace 元素的enabled 属性为 true。如果想把跟踪信息显示在与之关联的页的页尾,可将 trace 元素的pageOutput属性设置为true。如果跟踪信息只想显示在跟踪查看器中,则将 pageOutput 属性设置为 false。,通过设置trace节点的属性可以对应用程序级的跟踪进行详细的设置,trace常用的属性如下。,【范例14-4】 使用页面级跟踪举例。,页面跟踪的缺点之一在于任何人都可以看到跟踪信息。使用程序级的跟踪可以解决这个问题。启用程序级的跟踪后,只在请求名为Trace.axd的特殊页面时才会显示跟踪信息。如果没有启用mostRecent特性,那么在10次页面请求之后,将停止跟踪。,第 14 章开发出符合质量要求的软件异常、调试、测试和部署,异常处理和异常类 调试 测试 部署,14.3 测试,调试是解决错误的过程,测试则是发现软件缺陷的过程,软件在交付前都必须经过测试。软件测试是软件开发过程中的重要组成部分,测试已发展成专门的技术。下面介绍在Visual Studio 2008中如何进行单元测试。Visual Studio 2008集成了单元测试工具集以方便程序员使用,下面通过【范例14-3】来说明Visual Studio 2008中单元测试工具的使用。(测试代码在“范例14-3”文件夹中),第 14 章开发出符合质量要求的软件异常、调试、测试和部署,异常处理和异常类 调试 测试 部署,14.4 部署,应用程序在开发和测试结束后,需要部署到目标计算机上以供用户使用。,14.4.1 创建部署项目,部署将组成应用程序的文件安装到目标计算机上的处理过程。应用程序可由多个文件组成,也可能使用组件,为了确保应用程序和所需组件正确地安装,通常将多个文件打包并创建一个安装程序。在 Visual Studio 中,可以基于 Microsoft Windows Installer 技术或 ClickOnce 技术来部署。ClickOnce 部署又称无接触部署,通过单击Web页面上的一个安装链接来安装应用程序,不需要客户端系统上的管理权限,就可以将程序安装在用户特定的目录中。,Windows Installer是微软公司推出的安装管理工具,它提供了应用程序安装、删除和管理功能,以及自动修复安装、事务安装操作和按需安装等。只需要使用一个扩展名为msi的文件,就可以部署应用程序。当打开一个.msi类型的文件时,将打开这个程序的Windows Installer,如果应用程序还没有安装,将打开一组安装对话框,如应用程序已经被安装,将会提示删除或修复。Visual Studio 2008中集成了Windows Installer,通过添加一个或多个安装项目来创建应用程序安装包,可以创建.MSI类型的安装应用程序。VisualStudio 2008提供了6中安装和部署项目类型。选择哪种类型的部署项目取决于需要部署的应用程序的类型以及部署的模式。它们是:,【范例14-5】 使用Visual Studio 2008创建一个Web安装项目。为第13章【范例13-6】网站创建一个安装程序。,14.4.2 部署编辑器的使用,部署编辑器用于配置用部署项目创建的安装程序。每个部署项目都包含六个编辑器:“文件系统编辑器”、“注册表编辑器”、“文件类型编辑器”、“用户界面编辑器”、“自定义操作编辑器”以及“启动条件编辑器”。打开部署编辑器的方法:在【解决方案资源管理器】中选择一个部署项目,在【视图】菜单上指向“编辑器”,然后单击要打开的编辑器的名称。,1. 文件系统编辑器,文件系统编辑器是默认显示的编辑器,它显示一组标准的文件夹,代表着目标计算机上的文件夹结构。包含导航窗格和详细信息窗格。导航窗格显示文件夹列表。当选定一个文件夹时,其中的文件和快捷方式就显示在详细信息窗格中。可用于给部署项目添加子文件夹、特殊文件夹和自定义文件夹。特殊文件夹代表一些预定义的 Windows 文件夹。允许给项目添加项目输出(比如.exe和.dll文件)和附加文件(比如 readme.txt)。允许指定目标计算机上的文件夹,从而可以将文件复制到其中。,2. 注册表编辑器,注册表编辑器用于给目标计算机的注册表添加注册项和值。可以向注册表中插入键,在安装应用程序的同时创建注册表项。提供了目标计算机上注册表层次结构的表示形式,其布局类似于Windows注册表编辑器,包含两个窗格:导航窗格和详细信息窗格。导航窗格显示一组标准的注册表项,它们与目标计算机上的注册表项相对应。,3. 文件类型编辑器,文件类型编辑器用于建立目标计算机上的文件关联,它通过将文件扩展名与应用程序关联并指定每一种文件类型所允许的操作来建立关联。在“文件类型编辑器”中选定任何文件类型或操作后,将显示所有相关属性,并可在“属性”窗口中编辑这些属性。通过鼠标拖动,或者通过使用“编辈说系摹凹羟小焙汀罢程泵睿梢栽诮诘阒湟贫拔募嘈捅嗉鳌敝械拇

温馨提示

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

评论

0/150

提交评论