学习C语言,怎样检验自己编程是否正确?

我的老家在东原


检验的方法有很多,主要介绍以下三种:

画流程框图,标注重要结点并做验证程序

用条件编绎:分发行版与调试版两种版本

用IDE的DEBUG模式及TRY/CATCH

以下分别介绍:

1,画流程框图,标注重要结点并做验证程序

软件开发者要养成画流程图的习惯。通过画流程图,能够对逻辑运算、主要算法、最终输出方式等有一个全面的掌握,使得很容易从显示的结果,得出正确与否的结论。

很多人不划流程图,认为浪费时间,这是大错而特错的。做大型程序,一般开发、维护时间大致持续5~10年,甚至更多。人员在流动,没有流程图,后边的人根本无法接手,无法明白程序的真正含义。到最后,系统再也无法更新了。如下图的一元二次方程算法流程图。

2,用条件编绎:分发行版与调试版两种版本

调试版包括中间结果显示及算法验证显示,便于跟踪程序执行的正确性。

发版行只写原代码,无中间结果跟踪。

我们在编程时,都会在h文件中定义这样一组宏定义:

#define DEBUG_VER 0x55//调试版

#define RELEASE_VER 0x55//发行版

#define DEBUG_RELEASE DEBUG_VER

定义DEBUG_RELEASE为调试版本。

在编程时,如要某个位置显示执行中间结果信息,用预处理条件编绎语句:

#if DEBUG_RELEASE==DEBUG_VER

//写你要在屏幕输出的内容

//printf(”valueN=d%”,i);

//或者,写结果验证程序。如上图的一

//元二次方程,把解代入,两端相等,

//就是正解。

#else

//写发行版软件

#endif

这样,在软件调试完成后,再设为发行RELEASE版。

3、用IDE的DEBUG模式及TRY/CATCH

当选择DEBUG方式编绎时,用Trace语句显示的字符串信息,会显示在output窗口中,类似于printf语向。

或者用Try/Catch语句。特别适合于文件的打开/读写发生异常时。


BWanger软件开发达人


这个问题的本质是一个关于软件测试的问题,即如何测试软件?所以我先介绍下软件测试的通则,然后再针对C语言做些说明。

根据测试策略,主要有两种。一是单元测试,即把整个软件系统根据功能分为不同的单元,然后对各个单元进行测试;另外一种是集成测试,即把整个软件系统看做一个整体进行测试。

针对不同的测试策略,又有多重不同的测试方法,比如:

1、黑盒测试,即通过数据输入并观察数据输出,对比输出值与期待值的差异度来判断软件内部功能是否正确的一种方式。黑盒测试将被测软件软件内部视为不可见的黑盒,测试人员不需要知道软件内部的工作过程与实现原理。

2、白盒测试,白盒测试是相对于黑盒测试的另一种测试方法,它假设测试人员知道软件内部的工作过程与实现原理,甚至还可以查看源代码,目的是为了更深刻的认识软件,然后再根据对软件的认识进行有针对性的测试,以便更高效的发现问题。

3、静态测试,即通过静态分析的方法测试软件,它主要通过软件的静态的测试程序中算法是否正确,计算方式是否正确等手段完成测试。

4、动态测试,是与静态测试方法向对应的一种测试方法,因为它的主要目的是检测软件运行中出现的问题,所以被称之为动态测试。它的目的是检测软件运行是否正确,功能是否完善,效率是否满足要求等。

以上方法适合于所有语言,针对题主说的C语言,如果你写的是一些大型程序,可能会用到上面介绍的这些方法的组合;如果只是学习或者一些简单的程序,你可以写根据编写的程序的功能写一些测试用例,然后通过运行这些测试用例来检测你的程序是否正确。

下面是一个简单的例子,有一个comapre函数,为了测试它的正确性,针对三种情况写了不同的测试用例,通过运行测试用例发现在a=b的情况下程序运行不正确。如下图:

对于更复杂的情况只需要编写更多的测试用例即可。


编码之道


我来回答下这个问题,我是一名科技创作者,也是一名c/c++程序员。

编程是否正确,这个可以分成几个维度。

  1. 首先,程序代码是否有语法错误。因为c语言是静态语言,是强类型语言,所以编译器会告诉你编写的程序是否能通过编译。
  2. 然后,程序代码是否有功能错误。这个需要实际测试功能,做测试用例。通过测试用例才检查你的程序是否达到预期效果。一般在进入开发之前,都会做测试用例评审。
  3. 最后,程序代码是否有性能问题。如果没有功能性问题,符合设计要求,可以实现预期的功能需求。那么接下来就是性能问题了,主要是在数据量、并发量增长的情况下,程序是否会变得异常,比如说运行缓慢,响应速度明显下降。

综上所述,简单来讲经过这三个步骤,基本可以检验自己的编程是否正确。

以上是我的回答。



分享到:


相關文章: