Araxis Merge是一个可视化的文件比较、合并和同步的软件,能够方便地被软件工程师用于快速精确地比较不同版本的源文件。此外,它还能被用于进行版本和质量控制。
Beyond compare是一套由Scooter Software推出的软件,主要用于文件之间的比较。
/********************************************************
* 版权所有 (C)2015 公司或个人名称。
*
* 文件名称:
* 内容摘要:
* 其他说明:
* 当前版本:
* 作 者:
* 完成日期:
*
* 修改记录:
* 修改日期:
* 版 本 号:
* 修 改 人:
* 修改内容:
** *****************************************************/
#ifndef _XXX_H //防止头文件被重复引用
#define _XXX_H
/********************************************************
相关宏定义
********************************************************/
/*******************************************************
相关结构体定义
*******************************************************/
/*******************************************************
源程序中出现的函数声明
*******************************************************/
#endif
/********************************************************
* 版权所有 (C)2015 公司或个人名称。
*
* 文件名称:
* 内容摘要:
* 其他说明:
* 当前版本:
* 作 者:
* 完成日期:
*
* 修改记录:
* 修改日期:
* 版 本 号:
* 修 改 人:
* 修改内容:
** *****************************************************/
#ifndef _XXX_H //防止头文件被重复引用
#define _XXX_H
/********************************************************
头文件引用
********************************************************/
/*******************************************************
全局变量定义
*******************************************************/
/*******************************************************
函数实现
*******************************************************/
#endif
说明:
- 当源程序中的函数比较多时,会出现很多函数都需要使用同一个变量的情况,这就需要定义一个全局变量供他们使用。但全局变量的个数要尽量少,尽量不要定义多余的全局变量,这样可以减少不同函数之间的耦合性。就拿人类来说,我们依靠别人越少,我们越自由,如果很多事情都要先问问别人的意见,你的心里感觉如何?
- 函数头部的注释
/*******************************************************
* 功能描述:
* 输入参数:
* 输出参数:
* 返 回 值:
* 其他说明:
* 修改日期 版本号 修改人 修改内容
* YYYYMMDD XXX Name YYY
********************************************************/
一个函数的所有语句是包括在{}之中的,除此之外,大括号还有其他用处
- 分隔功能关联不大的语句块
void function A()
{
//功能A代码块开始
{
//功能A的实现代码
}
//功能B代码块开始
{
//功能B实现代码
}
}
void function A()
{
......
......
......
//修改或添加代码块开始
{
//修改或添加的代码
}
......
......
......
}
在实际工作中,我们需要对一些基本数据类型进行重定义(规范化),才能够满足编程规范的要求,才能够用于定义变量。
typedef unsigned short int UINT16;
typedef signed short int INT16;
typedef unsigned int UINT32;
typedef signed int INT32;
typedef unsigned long ULONG;
typedef signed long LONG;
typedef unsigned char UINT8;
typedef signed char INT8;
在实际的软件开发中,有一类变量非常特殊-静态变量。它主要应用于函数中,具有记忆性,即本次函数本次调用时使用的变量值是上一次函数执行结束时该变量的值。
常用内存操作函数-可以参见K&R的书籍《the c program language》
常用文件操作函数-可以参见K&R的书籍《the c program language》
在通信协议中,一条完整的消息由消息头和消息体组成。在C语言中,用结构体来表示协议,在消息解析的时候,一般只关注消息体的内容。
示例:
//消息头结构
typedef struct
{
UINT16 iReserve1;
UINT16 iReserve2;
UINT16 iReserve3;
UINT16 iReserve4;
}MsgHead_T;
//消息结构体(包含消息头和消息体)
typedef struct
{
MsgHead_T tMsgHead;//消息头
UINT32 iOperType;//操作类型
UINT8 szUserNumber[30];//用户号码
UINT8 szOperTime[20];//操作时间:yyyymmdd
UINT32 iReservel;//保留字段1,便于扩展
UINT8 szReservel[50];//保留字段2
}UserReqMsg_T;
由于自己还没接触到这方面的知识,所以就不在这里做记录了。
根据故障的严重程度,软件故障可以分为3类:
- 严重故障
这类故障一般会导致软件产品无法正常使用,需要立即解决。
- 一般故障
这类故障虽然不会导致软件产品无法正常使用,但会影响某些功能流程,会影响到用户的体验。如果出现了此问题,那么软件工程师在手中任务不紧张的情况下,需要抽时间来处理掉,不能让问题一直遗留下去。
- 轻微故障
这类故障几乎不会对软件产品产生不良影响,用户也很少能够感觉到故障的存在。对于追求高质量和良好用户口碑的公司,在后续产品功能升级的时候,会附带将该类问题一起处理掉。
程序问题排查
在配置文件中,有一个专门的[LOGINFO]配置段,其中的配置项如下:
[LOGINFO]
;日志等级,1-严重错误,2-一般错误,3-警告信息,4-一般信息,5-跟踪信息,6-调试信息
LevelOfLog =
;每个日志文件的最大容量
MaxSizeOfLog =
;是否输出该条日志在代码中的位置(行数),1-是,0-否
PositionOfLog =
有两类写日志的函数
- 形如WriteLog(LevelOfLog,InfoOfLog)
如:
WriteLog(LOGINFO,“the value of this integer is 3”);
如:
WriteLog(LOGINFO,“the value of this integer is %d”,iInt);
日志编写的总体原则是简单清晰,便于排查问题。
本书可以闲来无事看看,对于还未进入社会的同学来说会提供很多经验性的参考。但不建议购买。