⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dev2.htm

📁 这是一个能够自动生成文档的程序
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD>
<TITLE>高效开发与彻底测试-高效编码调试</TITLE>
<meta name="description" content="Visual Unit是单元测试工具,但也是高效编程调试的支持环境,在Visual Unit的支持下调试,既全面又省时">
<meta name="keywords" content="编程调试" >
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<LINK href="pic/style.css" type=text/css rel=stylesheet>
</HEAD>
<BODY leftMargin=0 topMargin=0>

<!--PAGE_HEAD_BEGIN-->
<table width="800" height="192" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr> 
    <td width="56" height="56" valign="top" bgcolor="#c3daec" ><img src="pic/n_left.gif" width="56" height="190"> 
    </td>
    <td width="687" valign="top"><table width="687" height="42" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="td2">
        <tr> 
          <td width="89" background="pic/top_back.gif"><img src="pic/logo.gif" width="150" height="42" alt="凯乐软件"></td>
          <td width="559" background="pic/top_back.gif" valign="bottom"><table width="98%" border="0" cellspacing="0" cellpadding="0">
                <tr> 
                  <td><div align="right"><a href="/">首 页</a> | <a href="/products/"> 产品介绍</a> |                                    
                      <a href="/download/"> 下载中心</a> | <a href="/teaching/">                                                
                      演示与教程</a> | <a href="/bbs/"> 技术论坛</a> | <a href="/faq/"> 问题解答</a> | <a href="/contactus.htm"> 联系我们</a></div></td>                                                
                </tr>
                <tr> 
                  <td height="6"></td>
                </tr>

            </table></td>
        </tr>
      </table>
      <table width="650" height="150" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="td2">
        <tr> 
          <td><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="685" height="150">
              <param name="movie" value="pic/top.swf">
              <param name="quality" value="high">
              <embed src="pic/top.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="685" height="150"></embed></object></td>
        </tr>
      </table>
      <table width="687"  border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="td2">
        <tr> 
          <td background="pic/n_back1.gif" height="9"></td>
        </tr>
      </table></td>
    <td width="57" valign="top" bgcolor="#c3daec"><img src="pic/n_right.gif" width="56" height="190"></td>
  </tr>
</table>
<!--PAGE_HEAD_END-->

<table width="800" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr> 
    <td width="56" valign="top" bgcolor="#c3daec" >&nbsp; </td>
    <td width="687" valign="top">
	  <table width="100%" height="40" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="td2">
        <tr> 
          <td width="100%" bgcolor="#f2f2f2" valign="top"> 
		    <table width="96%" border="0" align="center" cellpadding="0" cellspacing="0">
              <tr> 
                <td>
				  <table width="100%" height="38" border="0" cellpadding="0" cellspacing="0" background="pic/bt_back.gif">
                    <tr> 
                      <td class="title"><div align="center"><strong>

					  <!--SUBJECT_BEGIN-->

					  </strong><b>高效开发与彻底测试</b></div></td>
                    </tr>
                  </table>
			    </td>
              </tr>
              <tr> 
                <td height="5" bgcolor="#f8f8f8"></td>
              </tr>
              <tr> 
                <td height="5" bgcolor="#ffffff"></td>
              </tr>
              <tr> 
                <td valign="top" bgcolor="#ffffff"> 
                  <table width=98% align=center><tr><td>

				  <center><b>二、高效编码调试</b></center>
					<br>
					&nbsp;&nbsp;&nbsp;
					任何软件开发,都离不开编码调试。对于稍为复杂一点的函数,一般来说,编写几行代码,就要执行一下,看它们是否按预想的工作,然后再继续写,写完后还要将各种可能输入都执行一下。如何执行?一般由别的代码来调用,也就是说需要驱动,驱动通常是在开始编写函数实现代码之前建立,这样才能一边编写一边调试。驱动大致可分为自然驱动和专门驱动。<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					自然驱动:利用项目中已有的代码作为驱动,通常是在被调试的函数中加断点,从界面执行一个需要调用该函数的功能,调试器中断时就可以调试了;专门驱动:为需要调试的函数编写专门的驱动代码,通过执行驱动代码来执行被调试函数。<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					自然驱动的主要优点是不需要其他工作就可以直接调试,甚至感觉不到需要驱动,主要缺点是输入数据通常是公共的,即很多代码都使用相同的输入源进行调试,实际输入往往是经过其他代码处理后的中间结果,要针对各种可能输入都进行调试往往很困难,造成调试不全面,程序员的思维受到局限,难于做到全面地考虑各种可能输入。<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					专门驱动的主要优点是输入数据是专门针对于被测试程序,容易做到比较全面,程序员的思维也会比较全面,对编写功能齐全的健壮的程序很有好处,要针对某种特定输入进行调试比较容易,缺点是需要花费大量的时间来编写驱动代码。<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					显然,自然驱动的主要问题是不全面,代码错误较多,专门驱动的主要问题是编写驱动代码很费时。有没有更好的方法,既不需要编写驱动代码,又能方便且全面地调试?有
					!这就是自动驱动,即在Visual 
					Unit的支持下编码调试,不但无需费时间写驱动代码,更拥有多种独特的便利,可以大幅提高编码调试的质量和效率。<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					Visual Unit是单元测试工具,但也是高效编程调试的支持环境,在Visual Unit的支持下调试,既全面又省时:<br>
					&nbsp;&nbsp;&nbsp;
					自动生成驱动代码,但又可以方便地设定调试输入;<br>
					&nbsp;&nbsp;&nbsp; 测试用例编辑器列出全部输入,可以很方便地检查是否全面。<br>
					&nbsp;&nbsp;&nbsp;
					除了上述优点外,在Visual Unit的支持下调试,还可以:<br>
					&nbsp;&nbsp;&nbsp;
					可视化地选择调试输入;<br>
					&nbsp;&nbsp;&nbsp;
					调试过程中还可以切换输入;<br>
					&nbsp;&nbsp;&nbsp;
					无限制的后退,重复。<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					上述仅是免费的个人版的功能,对于企业版用户,实际上大多数单步调试都可以省略:<br>
					&nbsp;&nbsp;&nbsp;
					自动输出参数、成员变量的输入输出值,返回值,用户也可以用简单的语法输出任何变量或表达式的值,这些数值都是上下文相关的;<br>
					&nbsp;&nbsp;&nbsp;
					显示在一个用例下,程序所执行的代码,可以很方便地查看程序是否按预想的流程执行。<br>
					&nbsp;&nbsp;&nbsp;
					程序无论多复杂,无非就是执行一些代码,读写、计算一些数据,因此,上述两方面信息已完整地描述了程序行为,一眼就能看出程序干了什么,通常可以很快判断程序是否按预想的工作并找到出错原因,比单步调试要快得多。<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					下面以实例来进一步分析三种调试方式的优缺点。这里所用的示例是范例项目中的CExFunction::ParseOneParameter()函数,这是一个很普通的函数,读者也可以随便拿其他有些复杂度的代码来比较。该函数的功能是解析C++代码中的一个参数,原形如下:<br>
					PARAMETER* CExFunction::ParseOneParameter(CTokenList&amp; iList);<br>
					PARAMETER 是保存一个参数对象的结构,定义如下:<br>
					<font color="#0000FF">struct</font> PARAMETER<br>
					{<br>
					&nbsp;&nbsp;&nbsp;
					CString type; <font color="#008000">//参数类型</font><br>
					&nbsp;&nbsp;&nbsp;
					CString name; <font color="#008000">//参数名</font><br>
					&nbsp;&nbsp;&nbsp;
					CString defVal; <font color="#008000">//缺省值</font><br>
					&nbsp;&nbsp;&nbsp;
					CString array; <font color="#008000">//如果参数是数组,保存[]及[]内的文字常量</font><br>
					};<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					参数iList是一个输入参数(范例的命名规则是用i表示输入参数),传递由C++代码中的一个参数经过词法分析转换获得的记号对象序列,例如参数<font color="#0000FF">int</font>* 
					pi,将转换为三个记号对象,分别对应于:<font color="#0000FF">int</font>, *, 
					pi。该函数将记号对象序列解析到一个PARAMETER结构的指针中,并作为返回值返回。<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					在这个示例中,如果要进行比较全面的调试,输入至少要考虑以下可能:<br>
					&nbsp;&nbsp;&nbsp;
					普通输入,如int i;<br>
					&nbsp;&nbsp;&nbsp;
					类型中有符号,如<font color="#0000FF">int</font>* pi;<br>
					&nbsp;&nbsp;&nbsp;
					类型中有多个符号,如<font color="#0000FF">int</font>*&amp; pi;<br>
					&nbsp;&nbsp;&nbsp;
					模板类,如CList&lt;<font color="#0000FF">int</font>,
					<font color="#0000FF">int</font>&gt; list;<br>
					&nbsp;&nbsp;&nbsp;
					带缺省值,如<font color="#0000FF">int</font> i=0;<br>
					&nbsp;&nbsp;&nbsp;
					数组,如<font color="#0000FF">int</font> ai[10];<br>
					&nbsp;&nbsp;&nbsp;
					类型有多个单词,如<font color="#0000FF">const</font>
					<font color="#0000FF">unsigned</font> <font color="#0000FF">int</font>&amp; i;<br>
					&nbsp;&nbsp;&nbsp;
					缺少参数名,如<font color="#0000FF">const</font>
					<font color="#0000FF">int</font>;<br>
					<br>
					&nbsp;&nbsp;&nbsp;
					我们在编写这个函数的实现代码前,首先建立调试驱动,以例边编码边执行调试。<br>
					<br>
					<br>
					<center><b>自然驱动</b></center>
	
					<br>
					&nbsp;&nbsp;&nbsp;
					假设界面和要调用这个函数的其他代码都已完成。在函数的入口处插入断点,以调试方式运行工程,在界面中选择要生成文档的工程目录,点击&quot;生成文档&quot;,程序中断时就可以调试了。这种方式相信所有程序员都很熟悉,并且很多人都会认为这种方式最省时,但实际上,这种方式只是开头省时,当你试图把各个可能输入都调试一遍,就会发现它很费时:可能输入通常分散分布于输入源中(这里的输入源是代码文件),如果要比较全面地调试,通常要整理输入源,否则几乎不可能全面地调试,也就是说,要全面地调试,仍然要费时间整理输入,并不能完全依赖自然输入;<br>
					&nbsp;&nbsp;&nbsp;
					要针对某种输入进行调试,例如要调试参数带有缺省值的情形,一般通过反复跟踪直到想要的输入出现,或者设置条件断点拦截所需要输入,反复跟踪当然费时不少,设置条件断点也是要花时间的,并且有时无法满足需要

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -