图1 一条完整的消息示意图
在C语言中,用结构体来表示协议。在进行消息解析的时候,一般只关注消息体的内容。消息头只是用于标识一条消息,让其它模块能够识别该类消息。二、单元测试在提交程序版本之前,开发人员需要对代码进行单元测试和集成测试。那么什么是单元测试呢?单元测试就是对程序中的一个函数进行测试,看对于某个输入,是否有预期的输出。单元测试的示意图如图2所示。图2 单元测试的示意图
可以把函数看成一个灰色的盒子,测试的时候只关心输入和输出,要设计多组单元测试数据来对函数的功能进行测试。此外,在测试中,还有一个叫做“测试用例”的概念。测试用例就是一次测试的整个过程,包括:测试目的、预置条件、测试步骤、预期结果、通过准则、测试工具等。三、本程序中的协议本程序中的协议包括了消息头和消息体,其中,消息头有四个字段,消息体有五个字段。如下代码所示。// 消息头结构typedef struct{UINT16iReserve1;UINT16iReserve2;UINT16iReserve3;UINT16iReserve4;}MsgHead_T; // 消息结构体(包含消息头和消息体)typedef struct{MsgHead_TMsgHead; // 消息头UINT32 iOperType; // 操作类型UINT8szUserNumber[30];// 用户号码UINT8szOperTime[20];// 操作时间, 格式为: yyyymmddUINT32 iReserve1;// 保留字段1UINT8szReserve2[50]; // 保留字段2}UserReqMsg_T;在消息体的五个字段中,操作类型、用户号码和操作时间是本次要进行判断处理的字段,另外两个字段是保留字段,可以先不用赋具体的值。在协议中,为什么要留有保留字段呢?这是方便以后对协议进行扩展。也就是说,如果以后除了操作类型、用户号码和操作时间之外,还需要增加新的字段定义,可以直接利用扩展字段。这在实际的软件开发项目中是很重要的。