软件编程规范培训实例与练习


    软件编程规范培训实例练

    Ÿ 问题分类
    1 逻辑类问题(A类)-指设计编码中出现计算正确性致性程序逻辑控制等方面出现问题系统中起关键作导致软件死机功正常实现等严重问题
    接口类问题(B类)-指设计编码中出现函数环境函数全局局部变量数变量间数控制传输匹配问题系统中起重作导致模块间配合失效等严重问题
    维护类问题(C类)-指设计编码中出现软件系统维护方便程度造成影响问题系统中起关键作系统期维护造成便导致维护费升
    测试性问题(D类)-指设计编码中考虑周导致期系统测试性差问题

    Ÿ 处罚办法
    问题发生率:
    PDS
    DDA+05DB+025DC

    中:
    P -问题发生率
    D -1季度错误总数
    DA -1季度A类错误总数
    DB -1季度B类错误总数
    DC -1季度C类错误总数
    S -1季度收问题报告单总数
    1)D≥3时果P≥3%进行警告处理予公告
    2)D≥5时果P≥5%进行罚款处理予公告
    目 录
    逻辑类代码问题
    第5页
    1变量指针前必须初始化
    第5页
    案例111
    第5页
    2防止指针数组操作越界
    第5页
    案例121
    第5页
    案例122
    第6页
    案例123
    第7页
    案例124
    第8页
    3避免指针非法引
    第9页
    案例131
    第9页
    4变量类型定义错误
    第10页
    案例141
    第10页
    5正确逻辑&&屏蔽&操作符
    第17页
    案例151
    第17页
    6注意数类型匹配
    第18页
    案例161
    第18页
    案例162
    第18页
    7控制条件转移表达式取值范围否书写正确
    第20页
    案例171
    第20页
    案例172
    第21页
    案例173
    第22页
    8条件分支处理否遗漏
    第24页
    案例181
    第24页
    9引已释放资源
    第26页
    案例191
    第26页
    10分配资源否已正确释放
    第28页
    案例1101
    第28页
    案例1102
    第29页
    案例1103
    第30页

    案例1104
    第32页
    案例1105
    第33页
    案例1106
    第35页
    案例1107
    第38页
    11防止资源重复释放
    第39页
    案例1111
    第39页
    12公资源互斥性竞性
    第40页
    案例1121
    第40页
    案例1122
    第40页
    二接口类代码问题
    第43页
    1函数参数进行效性检查
    第43页
    案例211
    第43页
    案例212
    第43页
    案例213
    第44页
    案例214
    第46页
    案例215
    第47页
    案例216
    第48页
    2注意出口函数处理
    第49页
    案例221
    第49页
    三维护类代码问题
    第51页
    1 统枚举类型
    第51页
    案例311
    第51页
    2 注释量少占代码总量20%
    第51页
    案例321XXX产品BAM某版部分代码注释量统计
    第51页
    四产品兼容性问题
    第52页
    1系统配置命令方式
    第52页
    案例411
    第52页
    案例412
    第53页
    2设备接
    第54页

    案例421
    第54页
    3
    第55页
    案例431
    第55页
    五版控制问题
    第58页
    1新老代码中全局变量致
    第58页
    案例511
    第58页
    六测试性代码问题
    第59页
    1调试信息印信息正确性
    第59页
    案例611
    第59页




    逻辑类代码问题
    1变量指针前必须初始化
    案例111
    C语言中特色指针指针具强技巧性灵活性时带危险性XXX代码中端指针灵活:


    _UC *puc_card_config_tab


    Get_Config_Table( AMP_CPM_CARD_CONFIG_TABLE
    &ul_card_config_num
    &puc_card_config_tab
    use_which_data_area
    )

    b_middle_data_ok generate_trans_middle_data_from_original_data(
    puc_card_config_tab
    Ul_card_config_num)

    中红色部分巧妙利指指针指针指针puc_card_config_tab赋值兰色部分该指针Get_Config_Table函数中失败返回该指针赋值非法指针
    指针非常灵活时存危险性必须心指针危险性举世知新编程思想中指针基禁止(JAVA中样)少限制交换机程序中量指针增减

    2防止指针数组操作越界
    案例121
    香港项目测试中发现ISDN话机拨新业务号码时位位拨18位会问题先拨完号码成组发送会导致MPU死机

    处理程:
    查错程简单呼处理程检查代码发现某处判断误应18判断写成等18

    结 :
    代码编写误

    思考启示:
    1极限测试必须注意测试前应某项设计极限做充分测试规划
    2测试极限时注意种业务接入点例ISDN交换机说种业务分模拟话机ISDN话机V5话机种形式话务台做测试中继业务充分考虑种信令:
    TUPISUPPRANO1V5等等

    案例122
    某交换类进行计费测试字冠011应1号路1号子路4中继群11121314(属1#模块)前两群分构成环中1113群出中继1214群入中继四群分进行计费设置出入中继计费电话60640001拨01160010001两次四群机会计费取话单浏览话单发现11群计费计次表话单出中继群号正确群计次表中出中继群号正常

    处理程:
    开发员测试组环境次重复步骤发现11群计次表话单时正常时出中继群号机值发生异常频率较高什群话单正常唯独11群正常呢?11群四群中群中继计次表位缓区首位完电话查询存发现出中继群号存中正确取完话单查正确

    结 :
    话单池备份指针Pool_head_1中继计次表头指针重合影响第中继计次表计费

    思考启示:
    机值背隐藏着指针问题两块存缓区交界处较容易出现问题编程时应该注意方

    案例123
    正 文
    接入网产品A测试中存数库正常情况种数库方面操作正常进行数库异常测试数库容破坏发现数库进行较操作时出现程序跑死现象
    踪调试发现问题出现段代码中
    1 for(i0 idbf_count i++)
    2 {
    3 pDBFat (_NM_DBFAT_STRUC *)(NVDB_BASE + DBFAT_OFFSET + i*DBFAT_LEN)
    4 if(fat_check(pDBFat) 0)
    5 {
    6 pSysHead>system_flag 0
    7 head_sum()
    8 continue
    9 }
    10 if(strlen(dbf>dbf_name) 0 && strncmp(dbf>dbf_name pDBFat>dbf_name strlen(dbf>dbf_name)) 0)
    11 {
    12 dbf_ptr1 (_UC *)pDBFat>dbf_head
    13 filesize pDBFat>dbf_fsize
    14 break
    15 }
    16 }
    测试时发现程序死循环中错误记录Bus Error(总线出错)说明出现存操作异常
    踪变量值发现循环变量i阀值pSysHead>dbf_count数值0xFFFFFFFF该值破坏存数库中获取正常情况该值127pDBFat数库起始址果pSysHead>dbf_count值异常导致pDBFat值超存址值进行存操作导致存操作越界错误测试程中数库破坏出现机死机现象
    面问题解决起容易需第行代码中增加判断条件:
     for(i0 idbf_coun && i < MAX_DB_NUM i++)
    MAX_DB_NUM127

    样保证循环变量i值正常范围避免指针pDBFat进行存越界操作

      面测试程中:严重问题仅仅简单错误引起实际系统稳定似简单错误导致问题教训:直接存址进行操作时定保证值合法性否容易引起存操作越界系统稳定性带潜威胁

    案例124
    日CDB行测试中发现问题:需区负荷话统结果总零开始区负荷太加短消息发数量零程序中加入测试代码收数BAM印出
    结果印出数正常零仔细查相关代码问题指针移位问题果然函数中发现处较隐蔽错误

    * 功BM模块区CDB侧广播消息忙闲情况 *
    *************************************************************
    void Cell_CBCH_Load_Static(struct MsgCB FAR *pMsg)
    {


    memcpy((_UC *)&tmp_msgpMsgsizeof(tmp_msg))
    pMsgpMsg+sizeof(tmp_msg)sizeof(tmp_msg)10意想移动10字节实际指针移动10*sizeof(struct MsgCB)字节
    CellNumtmp_msgusCellNum

    }
    1
    结构指针传入函数进行指针移动操作先转化_UC型说总指针操作心


    3避免指针非法引
    案例131
    正 文
    次测试中没记做什操作发现HONET系统机复位系统工作正常没开台踪窗口时查半天没眉目半天现象出现次机反复复位系统根法正常工作
    记忆判断应该时正测试DSL板端口配置关板端口配置普通2B+D端口重新加载机数现象消失初步定位机DSL端口处理程中重错误
    新数努力恢复原出问题现象直没重现恢复原数加载立重现注意DSL端口激活时机复位仔细较两种数差发现出现机复位问题数中DSL板配置MNTMLT端口没做DSL端口间半永久数
    程序中断加印语句通台DBWIN调试程序踪终定位:执行portdslcDeviceDslMsgProc()函数中处理U口透传
    if ( SPC_STATE_OK pSpcCB>bySpcState )
    语句时机复位该语句似妥
    分析整函数pSpcCB函数前部分已赋值
    pSpcCB SpcCB + (PortTable+index)>spcNo
    index 没判断导致MNTMLT端口没做半永久端口激活执行部分函数(PortTable+index)>spcNo NULL_WORD运算
    pSpcCB 非法值时机取进行判断知会导致什果
    实改起简单两句前增加判断行修改代码:
    if ( (PortTable+index)>spcNo NULL_WORD)
    {
    pSpcCB SpcCB + (PortTable+index)>spcNo
    if ( SPC_STATE_OK pSpcCB>bySpcState )
    {}
    }
    修改问题重现
    分析发现编译环境容许空间机没做充分保护会极严重障出现编程时定考虑种情况测试中遇类死机问题耐心定位具体执行句代码时出现进行分析问题隐蔽直接分析海样代码难发现


    4变量类型定义错误
    案例141
    正 文
    FRI板建条FRPVCDLCI类型分:10Bit2bytes10bit3bytes16bit3bytes17bit4bytes23bit4bytes相应DLCI值:162349911269751234567然保存重起MUX观察PVC恢复情况结果DLCI值16234991PVC正确恢复DLCI126975PVC恢复数错误61439DLCI1234567PVC完全没恢复
    174类型DLCI126975PVC恢复时变成61439根条线索查找原发现1269756143965535转化二进制10000000000000000说数恢复保存时原数第1忽略时第想法:程序处理中符号长整型变量作短整型变量处理证实判断针
    17bit4bytes类型重新设计测试例:(1) 先建PVCDLCI65535然保存重起MUX观察PVC恢复情况发现PVC够正确恢复
    (2)建PVCDLCI65536然保存重起MUX观察PVC恢复情况时PVC正确恢复
    基断定原出里带着目查原代码发现代码中问题:
    int _GetFrDlci( DWORD* dwDlci char* str DWORD dwDlciType DWORD dwPortType DWORD dwSlotID DWORD dwPortID)
    { DWORD tempDlci
    char szArg[80]
    1 char szLine[80]
    ID LowPVCEP
    DWORD dwDlciVal[5][2]
    { {161007} {161007} {102464511}
    {2048129023} {1310724194303} }
    ...
    }

    typedef struct tagFrPppIntIWF
    {
    ...
    WORD wHdlcPort
    WORD wHdlcDlci
    WORD wPeerHdlcDlci
    WORD wPeerOldAtmPort
    ...
    } SFrPppIntIWFData

    DWORD SaveFrNetIntIWFData ( DWORD *pdwWritePoint )
    {
    BYTE bSlotID bPeerSlotID
    DWORD dwCCID dwPeerCCID
    WORD wHdlcPort wAtmPort wIci wPeerIci wPeerHdlcPort
    WORD wCount
    ...
    }

    DWORD SaveFrNetExtIWFData ( DWORD *pdwWritePoint )
    {
    BYTE bSlotID
    DWORD dwCCID dwPeerCCID
    WORD wHdlcPort wAtmPort wIci
    WORD wCount
    ...
    unSevDataFrNetExtIWF[wCount]bSlotID bSlotID
    unSevDataFrNetExtIWF[wCount]wHdlcPort wHdlcPort
    unSevDataFrNetExtIWF[wCount]wHdlcDlci gFrPVCEP[bSlotID ][ gFrPVCC[bSlotID][dwCCID]dwLoPVCEP ]dwDLCI
    unSevDataFrNetExtIWF[wCount]wOldAtmPort wAtmPort
    unSevDataFrNetExtIWF[wCount]wAtmDlci gFrPVCEP[ bSlotID ][ gFrPVCC[bSlotID][dwCCID]dwHiPVCEP ]dwDLCI
    unSevDataFrNetExtIWF[wCount]dwMapMode gFrPVCC[bSlotID][dwCCID]dwMapMode
         ...
    }


    DWORD RestoreFrNetExtIWFData ( WORD wSlotID BYTE *pReadPoint )
    {
    WORD wCount wTotalNetIWF
    BYTE bSlotID bHdlcDlciType bAtmDlciType
    WORD wOldAtmPort wAtmDlci wHdlcPort wHdlcDlci
    DWORD dwMapMode dwCIR dwBe
    DWORD dwCCID dwResult dwAtmPort
    wTotalNetIWF g_MuxDataSevDataSizewFrNetExtIWFNum
    ...
    }

    DWORD RestoreFrHdlcIntIWFData ( WORD wSlotID BYTE *pReadPoint )
    {
    WORD wCount wTotalHdlcIWF
    DWORD dwCCID dwPeerCCID dwAtmPort dwPeerAtmPort
    DWORD dwResult
    BYTE bSlotID bPeerSlotID
    WORD wHdlcPort wOldAtmPort wCIR
    WORD wPeerHdlcPort wPeerOldAtmPort
    ...
    }

    中涉DLCI值变量WORD(符号短整型)类型程序处理时出现WORDDWORD(符号长整型)类型句中时存情况判断问题出里DLCI值类型时取值范围前三种类型取值范围16~991第四种取值范围2048~126975第五种取值范围131072~4194303采前三种DLCI类型时采WORD类型值65535已完全够第四种类型时取值超65535时获取DLCI值函数_GetFrDlci()采DWORD类型负责保存恢复两函数SaveFrNetExtIWFData()RestoreFrNetExtIWFData()DLCI值作WORD类型进行处理导致DLCI取值越界程序原长整型DLCI强制转换成整型导致DLCI值恢复时原数65536程序运行程中数保存
    DRAM中程序运行直接DRAM中获取数程序会出错FRI板复位插拔需FLASH中读取数时恢复函数错误表现出
    问题什234类型DLCI数恢复?234类型PVCDLCI取值范围:131072~4194303程序强制转换恢复数65535条PVC恢复
    DLCI数恢复出错原完全找解决方法DLCI类型改DWORD类型案例出程序开发中低级错误实际工作中造成严重果

    案例142
    正 文
    FRI板建条FRPVCDLCI类型分:10Bit2bytes10bit3bytes16bit3bytes17bit4bytes23bit4bytes相应DLCI值:162349911269751234567然保存重起MUX观察PVC恢复情况结果DLCI值16234991PVC正确恢复DLCI126975PVC恢复数错误61439DLCI1234567PVC完全没恢复
    174类型DLCI126975PVC恢复时变成61439根条线索查找原发现1269756143965535转化二进制10000000000000000说数恢复保存时原数第1忽略时第想法:程序处理中符号长整型变量作短整型变量处理证实判断针17bit4bytes类型重新设计测试例:(1) 先建PVCDLCI65535然保存重起MUX观察PVC恢复情况发现PVC够正确恢复
    (2)建PVCDLCI65536然保存重起MUX观察PVC恢复情况时PVC正确恢复
    基断定原出里带着目查原代码发现代码中问题:
    int _GetFrDlci( DWORD* dwDlci char* str DWORD dwDlciType DWORD dwPortType DWORD dwSlotID DWORD dwPortID)
    { DWORD tempDlci
    char szArg[80]
    char szLine[80]
    ID LowPVCEP
    DWORD dwDlciVal[5][2]
    { {161007} {161007} {102464511}
    {2048129023} {1310724194303} }
    ...
    }

    typedef struct tagFrPppIntIWF
    {
    ...
    WORD wHdlcPort
    WORD wHdlcDlci
    WORD wPeerHdlcDlci
    WORD wPeerOldAtmPort
    ...
    } SFrPppIntIWFData

    DWORD SaveFrNetIntIWFData ( DWORD *pdwWritePoint )
    {
    BYTE bSlotID bPeerSlotID
    DWORD dwCCID dwPeerCCID
    WORD wHdlcPort wAtmPort wIci wPeerIci wPeerHdlcPort
    WORD wCount
    ...
    }

    DWORD SaveFrNetExtIWFData ( DWORD *pdwWritePoint )
    {
    BYTE bSlotID
    DWORD dwCCID dwPeerCCID
    WORD wHdlcPort wAtmPort wIci
    WORD wCount
    ...
    unSevDataFrNetExtIWF[wCount]bSlotID bSlotID
    unSevDataFrNetExtIWF[wCount]wHdlcPort wHdlcPort
    unSevDataFrNetExtIWF[wCount]wHdlcDlci gFrPVCEP[bSlotID ][ gFrPVCC[bSlotID][dwCCID]dwLoPVCEP ]dwDLCI
    unSevDataFrNetExtIWF[wCount]wOldAtmPort wAtmPort
    unSevDataFrNetExtIWF[wCount]wAtmDlci gFrPVCEP[ bSlotID ][ gFrPVCC[bSlotID][dwCCID]dwHiPVCEP ]dwDLCI
    unSevDataFrNetExtIWF[wCount]dwMapMode gFrPVCC[bSlotID][dwCCID]dwMapMode
         ...
    }


    DWORD RestoreFrNetExtIWFData ( WORD wSlotID BYTE *pReadPoint )
    {
    WORD wCount wTotalNetIWF
    BYTE bSlotID bHdlcDlciType bAtmDlciType
    WORD wOldAtmPort wAtmDlci wHdlcPort wHdlcDlci
    DWORD dwMapMode dwCIR dwBe
    DWORD dwCCID dwResult dwAtmPort
    wTotalNetIWF g_MuxDataSevDataSizewFrNetExtIWFNum
    ...
    }

    DWORD RestoreFrHdlcIntIWFData ( WORD wSlotID BYTE *pReadPoint )
    {
    WORD wCount wTotalHdlcIWF
    DWORD dwCCID dwPeerCCID dwAtmPort dwPeerAtmPort
    DWORD dwResult
    BYTE bSlotID bPeerSlotID
    WORD wHdlcPort wOldAtmPort wCIR
    WORD wPeerHdlcPort wPeerOldAtmPort
    ...
    }

    中涉DLCI值变量WORD(符号短整型)类型程序处理时出现WORDDWORD(符号长整型)类型句中时存情况判断问题出里DLCI值类型时取值范围前三种类型取值范围16~991第四种取值范围2048~126975第五种取值范围131072~4194303采前三种DLCI类型时采WORD类型值65535已完全够第四种类型时取值超65535时获取DLCI值函数_GetFrDlci()采DWORD类型负责保存恢复两函数SaveFrNetExtIWFData()RestoreFrNetExtIWFData()DLCI值作WORD类型进行处理导致DLCI取值越界程序原长整型DLCI强制转换成整型导致DLCI值恢复时原数65536程序运行程中数保存DRAM中程序运行直接DRAM中获取数程序会出错FRI板复位插拔需FLASH中读取数时恢复函数错误表现出
    问题什234类型DLCI数恢复?234类型PVCDLCI取值范围:131072~4194303程序强制转换恢复数65535条PVC恢复
    DLCI数恢复出错原完全找解决方法DLCI类型改DWORD类型案例出程序开发中低级错误实际工作中造成严重果

    5正确逻辑&&屏蔽&操作符
    案例151
    案例描述:C语言中位求模效率高系统设计时模128方改127系统定义宏#define MOD128 127#define W_MOD 127(定义宏名字易引起误解)实际程序中采取求模引起发送窗口欲重发实际重发致终导致链路复位类严重问题定位问题时花少时间

    处理程:处理程:
    #define MOD128 127 队列长128队头128时返回
    #define W_MOD 127 发送窗口队列意义
    函数L2_TO_L1()中语句:
    linkstate_ptr>SendWinhead (head + 1) W_MOD
    里head126时SendWinhead 0造成发送窗口指针队列窗口指针错位造成链路复位
    外重发函数void INVOKE_RETRANSMISSION(_US logic_link_US n_r)中语句:
    retran_num (LinkState[logic_link]Vs + MOD128 (_UC)n_r) MOD128
    w_head (LinkState[logic_link]SendWinhead + W_MOD retran_num) W_MOD
    第语句求欲重发消息包数第二语句求重发起始位置Vsn_r时造成实际重发数欲重发数时造成实际起始重发位置欲重发起始位置错开引起链路复位面三语句应该做改动:
    linkstate_ptr>SendWinhead (head + 1) & W_MOD

    retran_num (LinkState[logic_link]Vs + MOD128 + 1 (_UC)n_r) & MOD128
    w_head (LinkState[logic_link]SendWinhead + W_MOD + 1 retran_num) & W_MOD
    结 :链路通信系统效率求高算法采效率高位(&)求模()区造成竟链路复位种严重错误

    思考启示:类问题家阅读代码代码审查时定注意仔细点发现问题测试中定位种问题花费时间更长

    6注意数类型匹配
    案例161
    案例描述
    面通测试中例子说明问题:命令DSP N7C显示NO7电路状态参数设备类型DID支持TUPISUP参数信道号BSN支持值输入(支持32路查询)正常情况该命令没问题试非正常情况问题出
    1首先试BSN参数越界情况参数BSN超32路查询选数段问题出0&&3000&&256该命令返回结果致前者认参数越界者返回执行成功
    2参数DID选定种设备类型(TUPISUP)参数BSN包含32路电路跨越TUPISUP两次结果致
    处理程
    反馈开发员里第问题BAM问题第二问题SM问题

    1数超出范围溢出造成int值赋值BYTE造成数丢失
    2问题产生查询第信道TUP电路ISUP电路查询ISUP维护处理函数判断第信道ISUP信道认整PCMISUP类型PCM返回全部电路状态未安装消息处理合理TUP会产生错误

    思考启示
    MML命令懈击许表面问题隐藏着代码缺陷错误

    案例162
    正 文
    PCLINT检查代码时会发现量数类型匹配告警部分情况种代码存问题会引起程序功实现错误情况许会产生严重问题:

    数类型变量间赋值引起问题实际该类问题分种情况:
    1直接赋值WORD型变量赋INT型变量果WORD型变量32767INT型变量负值
    例次测试程中发现SDH送告警BAM调试窗口印出红色提示:File(XXX)Line(XXX)Invalid alarm id from 7 AlarmId 65463
    检查数发现没ID65463告警分析报数帧发现报告警IDB7原代码中处强制类型转换:
    sdhAlmStruAlarmId (WORD)RecvBuffer[iTmpLen + 5]
    char型强制转换成WORD型B7变成FFB7十进制65463char符号型B7第8位1转换FFB7代码作者希00B7果第8位0该变量BYTE型转换会问题
    2函数形参实参致实际第种情况质样表现形式太样种情况代码中常出现问题面例子测试中发现问题:
    例二file01中INT DebugMsgProc(char byMsg0 char byMsg1)函数两形参char型实际传入参数BYTE型结果函数中语句:
    PrintfE(PID_RED d ticks time outbyMsg1)
    byMsg1127时输出错误结果

    二数类型间较操作

    循环终止条件判断中类型变量较操作容易造成死循环错误方时开发员容易忽视方值测试员加留意面两例子该类错误两种典型情况:
    例三file02文件中某函数中代码造成死循环:

    int i
    WORD *pCheck (WORD*)p
    WORD wCheckSum*pCheck
    pCheck++

    for(i1i {
    wCheckSum^(*pCheck)
    pCheck++
    }
    binlen had already word alignment
    return (wCheckSum)

    该段代码DOS环境BC编译循环变量iint型(2字节)dwLenDWORD型(4字节)果dwLen65536该函数死循环

    面例子类型变量间直接较操作种情况函数返回值类型变量较见面例子:
    例四file03c文件中某函数中代码
    while( ftell(fp)< Part[3])
    {
    }
    ftell返回long型PartDWORD型符号变量符号变量较造成死循环

    类似例子类型匹配问题许种情况代码中隐患时会造成严重果需引起足够重视该类问题利PCLINT工具代码进行细致检查

    7控制条件转移表达式取值范围否书写正确
    案例171
    案例描述:
    测试机MPU板倒换功时果MPU备份充分倒换前处激活状态电路应影响影响通话期测试发现果两局通DT板进行号接MPU备份倒换发生断话具体现象:果DT板第1PCM系统电路障MPU倒换时复位该DT板果DT板第2PCM系统电路障MPU倒换时复位块DT

    处理程:
    查MPU倒换时会动复位处障态电路计算错误(加32)错复位PCM系统32路电路
    结 :
    严重问题什天发现?实验室中般采单板2PCM系统环进行测试会某单板障空闲电路存环屏蔽错误
    思考启示:
    环测试环境常种提高效率手段旦条件允许测试工作应量模拟网实际环境进行

    案例172
    时计费功进行测试时候浏览详细话单较注意话单身正确性没注意该命令系统影响浏览少量话单时候没发现该命令异常时间跨度较时详细话单数量较问题出现执行命令:
    LST AMA TPNRM SD1999&7&1 SAYES
    浏览约10万张详细话单终端BAM连接关闭重建连接发现话单台命令执行观察BAM性发现话单台占CPU50利率说明原务执行需关话单台恢复正常
    重复述步骤终端BAM连接尚未关闭时动断开次连接结果
    反馈开发员里发现该现象设计初衷相违背话单台控制输出200张话单防止话单输出显示会增加BAM开销降低BAM性查源代码问题发现
    话单台控制输出200张话单
    程序
    while(timeCur < timeEnd)
    {
    timeCur + tsOneDay加天

    while(fileBillRead(&rpt sizeof(CBillReport))
    sizeof(CBillReport))
    {

    输出满足条件前200张话单
    if (++wBillCount 200)
    {
    break
    }
    }文件查询结束
    }文件查询结束

    话单输出200张程序退出层循环然会天话单继续输出导致MML发帧造成MML话单台堵死
    修改ProcessQueryBill()函数
    输出满足条件前200张话单
    if (++wBillCount 200)
    {
    timeCur timeEnd + tsOneDay退出第二层循环
    while(timeCur < timeEnd)
    break
    }
    作述修改问题出现
    MML命令完成功讲没什问题执行系统性影响测试时时忽视目前BAM方案中存着终端协工作果某终端发出命令BAM中长时间独占着部分系统资源造成果严重设计时避免测试中注意问题

    案例173
    正 文
    判断模拟户端口否反极性时样段程序:
    if ( ( bsn > g_wASL32StartPSN ) &&
    ( ( ( bsn g_wASL32StartPSN ) 32 ) 15 || ( ( bsn g_wASL32StartPSN ) 32 16 ) ) )
    return TRUE
    if ( ( bsn 16 ) 7 || ( bsn 16 ) 8 )
    return TRUE
    return FALSE

    作者意果32路户板(蓝色字体判断)端口号否第1516路果反极性端口返回TRUE否应该返回
    FALSE代码表达意思:果32路户板端口号1516返回真值否执行边语句
    端口32路户板端口号1516时32路端口起始址g_wASL32StartPSN会导致非1516端口误认反极性端口举例子g_wASL32StartPSN值3000时端口号3000(第块板第0端口)认反极性端口作者意图完全相悖
    代码修改:
    if ( ( bsn > g_wASL32StartPSN )
    {
    if ( ( ( bsn g_wASL32StartPSN ) 32 ) 15 || ( ( bsn g_wASL32StartPSN ) 32 16 ) ) )
    return TRUE
    }

    else
    if ( ( bsn 16 ) 7 || ( bsn 16 ) 8 )
    return TRUE
    return FALSE
    通例子觉代码审查时应该留意判断条件较情况输入否正确输出单元测试集成测试系统测试时针边界值设计相应测试例
    判断条件较时开发员应该适分开写代码更易读容易出错

    8条件分支处理否遗漏
    案例181
    现 象
    接入网机程序代码审查中发现dbquerycDBQ_Init_ANType函数中代码段缺少应条件分支数异常情况会产生较严重问题

    处理程
    该错误较隐蔽现说明:
    Max2B1QStatTime 统计时间
    Max2B1QStatPortNum统计端口数
    MAX_2B1Q_STAT_PSN 统计存分配数量
    中:Max2B1QStatTime(统计时间)Max2B1QStatPortNum
    (统计 端口数)积MAX_2B1Q_STAT_PSN

    程序:
    查询数库获Max2B1QStatTime值
    directQueryCondtupleNo 10
    error_code DB_Query( RID_OTHERS_PARA_INFO 1
    (LPDBCondition)&directQueryCond
    (BYTE FAR *)&tempstruct0 )
    查询数库成功
    if( error_code DB_SUCCESS )
    {
    tempstruct0data数库中Max2B1QStatTime配置值
    if ( tempstruct0data > MAX_2B1Q_STAT_PSN )
    Max2B1QStatTime MAX_2B1Q_STAT_PSN
    else if ( tempstruct0data 0 )
    Max2B1QStatTime tempstruct0data
    }

    查询数库获Max2B1QStatPortNum值
    directQueryCondtupleNo 11
    error_code DB_Query( RID_OTHERS_PARA_INFO 1
    (LPDBCondition)&directQueryCond
    (BYTE FAR *)&tempstruct0 )
    查询数库成功
    if( error_code DB_SUCCESS )
    {

    tempstruct0data数库中Max2B1QStatPortNum配置值果缺省值Max2B1QStatTime积值MAX_2B1Q_STAT_PSN话:
    if ( (tempstruct0data * Max2B1QStatTime) > MAX_2B1Q_STAT_PSN )
    Max2B1QStatPortNum MAX_2B1Q_STAT_PSN Max2B1QStatTime

    果合理范围0话:
    else if ( tempstruct0data 0 )
    Max2B1QStatPortNum tempstruct0data
    }

    处ifelse if 分支没判断 值0情况数库Max2B1QStatPortNum配置值0: tempstruct0data 0Max2B1QStatPortNum缺省值32


    存限制Max2B1QStatTime(统计时间)Max2B1QStatPortNum(统计端口数)积MAX_2B1Q_STAT_PSN
    果数库中Max2B1QStatTimeMAX_2B1Q_STAT_PSN数库中统计端口数恰0述代码没tempstruct0data 0情况进行判断Max2B1QStatPortNum缺省值32样Max2B1QStatTimeMax2B1QStatPortNum积已32倍MAX_2B1Q_STAT_PSN远远超设计存限制
    造成种错误原判断语句条件判断完整

    思考启示
    代码审查时应该十分注意条件判断完备性问题条件判断完全造成


    9引已释放资源
    案例191
    正 文
    计费测试程中呼器进行话务量呼测试30路话路通TUP环呼外30路话路计费数设定样:通计费情况索引计费详细话单首先保证计费数设定正确性次环电话查话单正常开始呼
    呼万次停止呼取话单进行观察发现30路次呼总会出现张告警话单余话单正常该告警话单相话路说机出现
    通知开发员首先次计费数进行确认某户某次呼产生告警话单次次呼计费情况正常两次呼间时间间隔秒钟排修改数开发员认CCB问题查果然
    中继选线发生抢需重新选线时CCBreset_CCB_for_reseatch_called_location()会关呼信息清掉造成计费情况分析失败产生计费费0告警话单
    更正reset_CCB_for_reseatch_called_location()中清信息代码重选中继时清户部分属性
    思考启示:
    1计费测试程中话单观察重应该放细疑点
    2计费测试仅仅次电话达效果越接户实际情况越发现问题

    案例192
    案例描述
    进行128模块V5户CENTREX新业务测试时偶然遇怪现象:群V5ST户开放MCT权限进行恶意呼追查时次报恶意呼追查成功音报半正报出恶意呼号码时业务中断重新回通话态重新追查次报已申请新业务次申请成功恶意呼追查新业务会突户恶意呼追查权肯定时程序出问题重现次挂机重新呼应新业务现象直没出现约反复操作20遍出现次样情况显然程序中存某种问题

    处理程
    出现问题时开发员A取联系起试图重现问题通许次反复操作出现次种情况确认问题A表现出高度责心马驾调试环境反复调测终天逮住狐狸尾巴:
    1户接听恶意呼者电话 启动恶意呼追查业务 V5_CR_VOICETONE状态 听MCT音户脉方式拨意数字 立停止送MCT音 户切换回恶意呼者通话 程序中没拨号类型作判断 导致户音频拨号会作样处理
    2取消次MCT服务 户切换回恶意呼者通话外 果释放MCT_HANDLE 模块样资源 次MCT业务户成功 会申请MCT_HANDLE时失败 V5模块ST模块方处理问题 没MCT_HANDLE释放掉 V5户会听新业务失败音 ST户会听音乐
    停拨测V5户MCT业务时 时听音时 网板杂音等原(户碰话机键) 导致DTR收位号 会立停止次
    MCT服务 户会听MCT送音突然中断 然恢复恶意呼者通话 次MCT时 面述原 会听新业务失败音 次失败 MCT_HANDLE分配成功否 该户MCT标志置1 户挂机时 会该模块唯MCT_HANDLE资源释放掉 该功正常实现
    追查问题时开发员A发现导致死机严重问题:户启动MCT服务 正听报追查号码MCT音时 恶意户时挂机 CCB处理中 针ST户送DISCONNECT V5ST户送RELEASE消息 导致V5X收消息 该V5ST户cr2清掉 V5_USER_TALBE[ ] cr2变0xFFFF 样V5_CR_VOICETONE超时 程序中会检查cr2状态否HOLD 取cr2容时 cr2已清 会发生指针越界GP错误


    通调测发现定位解决问题

    思考启示
    常熟视睹业务正常流程操作没问题业务保证定没问题善抓住丝毫异常现象难重现问题千万轻易放网设备出问题实验室难出现难重现问题显易见问题般消灭实验室难难消灭隐藏深问题说老实话产品许问题 需扎扎实实锲舍工作

    10分配资源否已正确释放
    案例1101
    正 文
    接入网A产品网软件测试中发现WINDSOWS资源损耗问题:网软件运行天WINDOWS总会出现资源够告警提示果网软件关掉重新启动话会出现
    WINDOWS资源完全耗现象终网系统反应慢法正常工作
    现象判断出网软件存隐蔽存泄露资源释放问题种资源耗缓慢程定位问题呢?
    定位种问题利WINDOWS中系统资源监视工具开Windows附件系统工具资源状况系统资源户资源GDI资源实时监视工具
    工具发现导致断消耗资源特定操作呢?
    首先开发员探讨列出消耗资源操作操作组合样缩监视范围避免没范围碰运气否海捞针
    监视前首先重新启动WINDOWS运行程序开系统状况监视工具然运行网软件记时资源状况数
    然针疑操作快速量重复进行种重复性操作利QArun测试工具执行QArun记录操作者次操作步骤然设定次数重复操作操作观察时资源状况记时数操作前数较果操作前数数没变化变化排项操作否断定项操作会引起资源耗
    疑操作操作组合重复程
    通步骤终找出引起资源耗罪魁祸首分析相应部分代码发现引起资源耗原:存泄露画笔画刷资源完未释放等

    案例1102
    正 文
    某产品台软件版C++写程序员写代码时常构造函数中申请块存释放程序代码中常申请释放

    void WarnSvrSaveWarnData()
    {


    for(int m0m {
    HISTORY_FILTER_INDEX* item
    new HISTORY_FILTER_INDEX
    item>CsnBuffer[EVENT_ALARM][m]Csn

    item>Positionm
    +(RecordsInHistoryFileRecordsInBuffer[EVENT_ALARM])

    If a warn with a certain Csn is not in EventFilterIndex
    it is not necessary to be added to HistoryFilterIndex
    int item_totalEventFilterIndexGetItemsInContainer()
    BOOL find_flagfalse
    for(int k0k if(EventFilterIndex[k]>Csnitem>Csn)
    {
    find_flagtrue
    break
    }
    if(find_flag)
    {
    HistoryFilterIndexAdd(item)
    if(HistoryFilterIndexIsFull())
    ClearIndexEntry()
    }
    建议处加
    else
    delete item
    }
    程序员认台运行环境量存字节浪费会造成死机等重事然长时间累计起必然会造成资源紧张出现障
    实际种思想造成产品稳定原机网运行月年家存分配释放较敏感台产品正常运行天方注意原吧

    案例1103
    正 文
    进行代码审查程中造成存泄漏代码较面举种常见存泄漏错误供测试员代码审查中参考:
    1 函数出口时没出口处动态申请存进行释放般异常处理时容易出现种错误面代码段样例子:

    pRecord new char[pTable>GetRecordLength()]
    assert(pRecord NULL)

    if (pTable>GoTop(FALSE) DBIERR_NONE)
    return 果里返回pRecord释放

    pTable>Close()
    delete[] pRecord
    }


    2 指针赋值时没检查指针否空果指针空指针原指存丢失请代码段:

    struct FileInfo * pdbffile new struct FileInfo
    pdbffile>pfileinfo new struct ffblk
    pdbffile>srcname srcRootPath
    pdbffile>desname desRootPath
    pdbffile>prev NULL
    pfile pdbffile
    赋值前没检查pfile否空果空会造成pfile指存丢失
    dbf_start_needed FALSE
    dbf_Finish FALSE
    flag_begined TRUE
    if(FALSE Copy(TRUE))
    {
    dbf_start_needed TRUE
    WarnMsgOut(Error occurs while copying files in directory trying again)
    }
    }

    3 连续二次存动态分配第二次分配失败时忘记释放第次已申请存

    pMsgDB_DEV (PDBDevMsg)GetBuff( sizeof( DBDevMsg ) __LINE__)
    if( pMsgDB_DEV NULL )
    return

    pMsgDBApp_To_Logic (LPDBSelfMsg)GetBuff( sizeof(DBSelfMsg) __LINE__ )
    if( pMsgDBApp_To_Logic NULL )
    return处返回造成pMsgDB_DEV指存丢失


    4代码中缺少应条件分支处理导致程序未执行操作退出时没释放应释放存种情况般缺少应else分支switch语句default分支没应处理
    static void OncePowerCmdHandle( struct HT_Appmsg * msg )
    {

    pPower_test_answer (struct _oncepower_test_answer *)GetBuff(sizeof(struct _oncepower_test_answer)__LINE__)
    if( pPower_test_answer NULL_PTR )
    return

    if (TSS_State[testpsn]state TEST_DEV_BUSY ||
    TSS_State[testpsn]state TEST_DEV_ERROR )
    {
    }
    else if (TSS_State[testpsn]state TEST_DEV_IDLE )
    {
    }
    缺少 else 分支造成 pPower_test_answer 释放
    }

    造成存泄漏情况种典型情况
    然存泄露般出现异常情况毕竟系统造成隐患系统健壮性降低测试员作代码审查时述种情况尤注意

    案例1104
    正 文进行SARPDU包发收测试程中时考虑边界值发送包范围[0Nmax]SARPDU包接收值KmaxMBUF块
    M实测中SARPDU包接收值设2000(Kmax2000B) MBUF块长设512(M 512B)发送包正确分支取值限0限Nmax2000然02000间机取干值考虑MBUF块长增加M倍数干选值附值测试般思路偶然机会选择包长2000Kmax2000B发现问题原
    MBUF块长512块中实际存放数500(MBUF头2长字尾部1长字12B块控制)发送包长正500整数倍4整数倍SAR(BT8230)FREE链摘成5MBUF(原略)SAR驱动知道4MBUF样层户时释放4MBUF漏掉1MBUF短段时间存耗(问题非常严重实际运中500整数倍PDU包概率较旦出现会发生次存泄漏样干天干月运行会系统崩溃)
    前未发现问题原原缓块长2048减12B控制信息实际存放数长度2036考虑2048值忽略2036选取限中干值时选取包长度2036倍数概率非常未发现该问题
    测试中般难取值范围中值覆盖全选取限中干取值时格外仔细考虑方面全中某值测试边界值涉数字量选取象该例中正确分支测试边界02000512整数倍500 整数倍12 整数倍等值必测边界值非测测机选取谓干选值

    案例1105
    正 文
    ABISCPP中函数rel_ABIS_CCB_conn( )中进行消息链表Msg_Queue[ces]拆链操作时相应CCB进行次拆链操作拆节点果出现该CCB应消息节点止情况会出现量节点释放问题
    if( Msg_Queue[ces]msghead NULL_PTR )message buffer notempty
    {
    get first message record
    pMsgRecord Msg_Queue[ces]msghead
    release buffermessages concerning with ccb_no
    for( index 0 index < MSGBUFFERNUM index++ )
    {
    里pMsgRecord值进行判断
    if( (pMsgRecord NULL_PTR) && pMsgRecord>CCB_no
    ccb_no )
    {
    free the message buffer
    if( pMsgRecord Msg_Queue[ces]msghead )head
    Msg_Queue[ces]msghead pMsgRecord>pnext
    else if( pMsgRecord Msg_Queue[ces]msgtail )tail
    {
    Msg_Queue[ces]msgtail pPrevMsgRecord
    Msg_Queue[ces]msgtail>pnext NULL_PTR
    }
    elsenot head and tail
    {
    pPrevMsgRecord>pnext pMsgRecord>pnext
    }
    put buffer back to buffer pool
    if( Msg_Bufferempty_num 0 )
    {
    Msg_Bufferlinkhead Msg_Bufferlinktail pMsgRecord
    pMsgRecord>pnext NULL_PTR里
    pMsgRecord>pnext置空
    Msg_Bufferempty_num++
    }
    else
    {
    Msg_Bufferlinktail>pnext pMsgRecord
    pMsgRecord>pnext NULL_PTR里
    pMsgRecord>pnext置空
    Msg_Bufferlinktail pMsgRecord
    Msg_Bufferempty_num++
    }
    }
    else if( pMsgRecord NULL_PTR )
    breakend of if
    get next message record
    pPrevMsgRecord pMsgRecord
    pMsgRecord pMsgRecord>pnext时pMsgRecord
    NULL_PTR跳出for循环语句
    }end of for
    }end of if
    里拆节点导致pMsgRecordNULL_PTR进行判断时会跳出循环样保证CCB关节点均拆时果CCB应消息节点止消息节点均法释放造成节点数断减少直接影响系统建链程系统稳定带隐患
    开发员联系根段算法编写程序验证该问题提出相应解决方案消该隐患

    案例1106
    正 文
    1建立呼保持通话AM控存监控操作界面中观察通话建立块
    FBI板
    2通话FBI板拔出观察通话情况时话音中断信令然保持观察AM控存监控操作界面E3M板2K网界面发现AM侧检测光纤已断通话CTNE3M板占时隙置空闲AM控存监控操作界面E3M板2K网界面观察时隙占情况
    3分30秒1分钟3分钟时拔出FBI板插回原槽位发现次插回FBI板话音立恢复
    4观察BAM印消息发现印模块占CTN板HWDM时隙空闲数较混乱印消息图示:

    中:
    1) 模块1234占CTN板两条HWDM时隙数256(两条HW两DM组成OPT相联HW两保留时隙DM空闲时隙数:254
    2) E3M板条HW相联DM空闲时隙数:128















    现象应2问题:idle_count印混乱BM释放障光路时隙应CCB线信道等资源

    1idle_count印混乱函数restore_one_hw中处理造成前作B型机历史遗留问题没重视

    2B2模块2条光路果断掉中条模块状态会改变原B型机程序作处理应该增加功免光路障导致资源吊死

    解决方法:
    问题: 函数restore_one_hw中原代码作改动:
    mod_dm[mod][i]tailtsn idle_dm_head + 125
    ( idle_dm_head 384 )
    mod_dm[mod][i]idle_count + TS_PER_DM 1
    mod_dm[mod][i]idle_count + TS_PER_DM 1

    改:
    if ( idle_dm_head 384 )
    {
    mod_dm[mod][i]tailtsn idle_dm_head + 127
    mod_dm[mod][i]idle_count + TS_PER_DM
    }
    else
    {
    mod_dm[mod][i]tailtsn idle_dm_head + 126
    mod_dm[mod][i]idle_count + TS_PER_DM 1
    }
    问题二分析:
    目前模块状态IPATH调DBMS模块边检查实现存条光路认相邻模块正常具体OPT板时隙状态维护没呼控制接口具体OPT板状态功检测IPATH完成BM侧没专门维护OPTMC2板模块转交OS组处理

    总结:
    拔出FBC板通话话音中断AMCM侧已拔出FBC 板相关资源全部置时BM侧机程序应该AMCM侧致释放掉占资源原通话信令连接断开模块开发员缺少相互间解造成AMCM侧BM侧开发员交流够作测试员类似两模块相关部分应该充分进行测试想然起出问题方容易测出问题

    案例1107
    进行关排队指示系统测试中先闭塞掉基站业务信道TCH进行呼直接挂机超时释放发现TC存中继资源吊死问题
    问题重现定位分析发现ccb超时收AIR发clear cmd进入 rel_one_bm_res( )时ccb登记CIC放pre_occupied_res没放入occuped_resrel_one_bm_res()存入occuped_resCIC进行判断AIE发UNBOOKCIC没存入pre_occupied_resCIC进行判断UNBOOK掉导致TC中继资源吊死应超时函数释放函数中pre_occupied_resCIC进行处理
    程中CIC资源存放老CCBpre_occupied_res中超时函数释放函数中均未pre_occupied_res中CIC进行处理(AIE UNBOOK)导致TC中继资源吊死
    超时函数RR_time_out()中timer_nameTN_WAIT_ASS_READY时释放函数rel_one_bam_res()中增加CCBpre_occupied_res中CIC判断释放处理
    资源时周密考虑资源释放问题样系统断稳定
    资源释放交换机说关重点点疏忽终交换机资源死掉知道千里长堤毁蚁穴

    11防止资源重复释放
    案例1111
    正 文
    进行话务量呼时统计代码中出现AIE收UNBOOK CIC消息时发现身电路状态空闲出现断言说明AIE电路电路误释放
    问题出现原种:
    1 RR发错电路号导致AIE状态错误
    2 AIE发起资源核查失败控制表项释放
    3 RR发起重复释放操作导致AIE某表项连续收两UNBOOK消息
    分析完情况分析定位
    原发生情况RR发UNBOOK消息带AIR连接号模块号会错误导致会出现断言测试数结果文件中没出现断言原成立
    原二发生情况AIE收资源核查失败消息数目应该零实际情况统计结果中收资源核查失败消息数零说明情况二成立
    分析问题RR重复释放造成会发生重复释放需进行进步分析
    呼正常流程会产生重复释放怀疑该问题异常流程关统计代码中查找异常流程发现该次统计中BSC切换流程次出现问题具体原切换程中目标区申请信道产生切换失败造成集中研究流程发现存问题:
    原区目标区发送部切换请求消息时带AIRAIE项信息目标区收信息保存身占资源中果目标侧申请信道失败会源侧发部切换拒绝消息产生释放释放前目标侧RR没占资源中AIRAIE信息清导致重复释放时AIRAIE发起释放操作AIR释放时保护机制会产生问题AIE没保护机制新CCBAIE电路释放掉老CCB通话结束发起释放时产生重复释放
    面分析出问题RR释放流程错误造成加修改新CCB释放前AIRAIE信息预占资源中清
    RR释放非常复杂程正确整理资源确保资源合理释放摆面前艰巨问题仔细分析种发生情况正确释放种资源会吊死资源会产生重复释放

    12公资源互斥性竞性
    案例1121
    正 文
    试验环境:CPX8216 CPCI 机架vxWorks操作系统Tornado101调试环境
    测试例:测试板间通信性接口板A接口板B循环发送消息通超级终端观察消息收发情况
    测试结果:发送定数量消息帧会出现发送址出错现象
    原分析:接收板回送缓区指针发送板采memcpy单字节拷贝方式发送速度快接收速度两板竞发送板系统总线访问缓区指针享存导致数访问突
    memcpy程断出现发送板读发送址出错现象
    采四字节拷贝函数bcopyLongs传送发送缓区指针问题解决
    享存访问设计考虑互斥外总线竞问题

    案例1122
    正 文
    问题描述:
    进行BCCH载频互助新功开发行联调测试程中发现问题:数台设置TRX倒换否允许进行设定整表关闭基站中配4TRX区BCCHTRX电源发现应区重新初始化成功载频互助成功时候台该区站点进行4级复位时重新开前关闭该区原配BCCHTRX电源发现应区初始化失败
    问题定位:
    问题定位开始先查载频互助相关代码站点初始化流程中处理BTSM程序初始化程中先判断次初始化前否发生载频互助发生判断原配BCCH(数库中实际配置BCCHTRX)否已恢复(正常建立TEI正常设置该TRX应RC属性总正常开工)载频互助发生原配BCCHTRX(CoTRXGroupForBts[BtsNo]MainTRX)已恢复前进行互助TRX (CoTRXGroupForBts[BtsNo]AidTRX)数原配BCCHTRX数交换回重新进行初始化表面原理应该没什逻辑错误会出现初始化成功呢?
    程序中导致该问题变量加印调试程序然重现该问题终印出信息中发现载频互助发生互助BCCHTRX实际数配置BCCHTRXTRX问题载频互助实质实际数配置BCCHTRX正常开工TRX作BCCH根线索查询BTSM程序没发现问题根源查合进版相关模块程序终找出问题根源
    载频互助程序中全局变量ptrBTS_CONFIG_MAP[BtsNo]TRX_no_BCCH_in表示前实际运行BCCHTRX号时变化CoTRXGroupForBts[BtsNo]MainTRX表示原配BCCHTRX号固定两者系统开工系统开工接口函数FetchOneSiteConfig( )中赋相值:该函数409行赋值语句CoTRXGroupForBts[BTS_no_temp]MainTRX ptrBTS_CONFIG_MAP[BTS_no_temp]TRX_no_BCCH_in前函数FetchOneSiteConfig()系统开工时调次CoTRXGroupForBts[BTS_no_temp]MainTRX 系统开工变DBMI步开发整改中作处理:次数动态设定先判断站点没发生载频互助发生试图先目前进行互助TRX数实际数配置成BCCHTRX数倒换回然进行站点初始化问题出现DBMI中认DB中原配BCCHTRXptrBTS_CONFIG_MAP[BTS_no_temp]TRX_no_BCCH_in次进行站点初始化时调函数FetchOneSiteConfig()样导致CoTRXGroupForBts[BTS_no_temp]MainTRX值DB中实际原配BCCHTRX致导致BCCH相关数倒换出现错误终导致相应区初始化成功
    收获反思:问题出现机程序两功模块DBMIBTSM间开发缺少相互沟通引起果开发前两模块开发员先约定全局变量途果DBMIBTSM两功模块认CoTRXGroupForBts[BTS_no_temp]MainTRX实际数原BCCHTRX号会出现问题现BSC机程序功模块时合进许代码功模块间联系突肯定会存需开发员开发设计方案时相互沟通否功模块间突引起问题肯定会存明显暴露出产品埋伏炸弹机会越

    二接口类代码问题
    1函数参数进行效性检查
    案例211
    案例描述
    某交换类产品BAM台理系统注册表存储台系统数动备份时间数动备份进行系统测试时考虑注册表中数值意性测系统没注册表中存储值作相应合法性检测系统产生良影响

    处理程
    通审查源程序实际验证发现果然存问题BAM关数动备份程序程序该项值做简单处理没时间进行合法性验证动备份操作发生前台通讯高峰期者设置数需数库进行操作时系统会产生重影响


    系统注册表中数样进行种情况测试包括合法合法数设置

    思考启示
    系统数输入种渠道仅包括机命令系统INI文件包括注册表等途径测试时种情况进行全方位测试保证系统性

    案例212
    案例描述
    设计规定07TSS板支持数字户外线强测数字户外线测试正常意强测正通话数字户发现返回报告:
    户外线测试

    测试时间 19990603 164806
    号首集 0
    户号码 6540136
    BAM测试状态 正常
    机测试状态 正常
    AVAG 008
    AVBG 029
    AVAB 021
    DVAG 062
    DVBG 062
    DVAB 000
    RAG >10M
    RBG >10M
    RAB >10M
    RL >10M
    CAG 0001
    CBG 0001
    CAB 0001
    结 断线
    结断线肯定错误测试期间查询TSS状态显示TSS空闲见机返回报告错误

    处理程
    修改命令ADD RTSTI应存储程问题解决


    户外线测试机没判户否数字户

    思考启示
    测试项功测试系统提供功满足求系统没提供功否误执行导致错误结

    案例213
    正 文
    般开发员认函数参数简单实际设计调函数时容易犯参数方面错误面例子进行分析希引起家重视
    1函数设计中函数局部变量保存次函数重新调时需保留值
    void SlaverDownLoadProc( WORD wMsgLength void *pTempMsgAddr )
    {
    void *pTempTargetAddr

    SSLAVERLOADMSG *pSTempSlaverLoadMsg ( SSLAVERLOADMSG * )pTempMsgAddr

    if ( COMMON_BOARD_LOAD_PROGRAM pSTempSlaverLoadMsg>m_ucCmd )
    pTempTargetAddr ( void * )SDRAM_LOAD_PROG_START_ADDR
    #ifndef MMX * MMX板数加载备份方式*
    else if ( COMMON_BOARD_LOAD_FPGA pSTempSlaverLoadMsg>m_ucCmd )
    pTempTargetAddr ( void * )SDRAM_FPGA_START_ADDR


    case BEGIN_LOAD
    if ( ( LOAD_MIDDLE_FRAME pSTempSlaverLoadMsg>m_ucLoadCmd )
    &&( ( dwRecFrameNum 0xFF ) pSTempSlaverLoadMsg>m_ucOrderNo )
    )
    {
    * 序号帧命令字合法保存BUFFER *
    memcpy( ( BYTE * )pTempTargetAddr ( BYTE * )pSTempSlaverLoadMsg + 5 wMsgLength 5 )
    * 5 m_ucBoardType + m_ucCmd + m_ucSerialNo + m_ucLoadCmd + m_ucOrderNo *
    dwRecFrameNum ++


    里收帧调函数次进入时函数pTempTargetAddr赋值两固定值中导致收新帧次帧数覆盖显然函数应作全局变量参数pTempTargetAddr错误定义局部变量
    2函数输入参数较互相间联系时较易出错方
    测试串口务时发现错误:加入新户时户名输入四十字符时程序死掉调试踪发现input函数中调GetString第二参数赋值时没搞清楚参数间关系第参数(传入指针)指长度40字符字符串第二参数时错误字符串长度设置41导致串口接收第41字符时程序越界操作导致死机面函数GetString声明:
    signed long GetString
    (
    char * szString * OUT 字符串指针 *
    WORD wSize * IN 指定字符串长度 *
    )
    1
    然关函数参数错误止例未模块接口函数部检验传入参数合法性指针参数效性参数未赋值参数类型匹配考虑周导致溢溢等编程者容易出错方家走读代码时需特注意方

    案例214
    正 文
    交换机V5协议测试中相常相简单测试项目交换机某V5接口发起备倒换命令V5测试中会利通项目前项目测试许次没遇异常情况
    次测试中遇麻烦交换机侧输入参数模块号V5接口号逻辑C通道ID发起备链路倒换命令操作结果居然效V5端口
    种提示令感诧异AN侧够正常发起备链路倒换LE侧正常发起该V5端口指定链路倒换系统完全正常见数配置没错误排错误重点放三输入参数:模块号V5接口号均非常常规数值应该没问题逻辑C通道ID数值较然协议规定65535应该效值想常规配置数时逻辑C通道ID值直配较许问题出
    逻辑C通道ID值改作样操作操作成功显然参数效值范围定义误细细检查发现单字节范围效必然该参数定义类型误原:函数OAM_Swap_Communication_Link(_UC v5_interface_UC logic_c_id)里逻辑C通道定义字符型导致改_US型解决
    推广终端功测试中输入参数值测试应该量覆盖效值正常情况果输入值效值应该出正确结果果输入值非法值系统应该出错误提示予执行 参数值效性判断特应该注意特殊值界值字节双字节处等等

    案例215
    现象分析:
    回载频配置表跳频数表中零频点重复频点时MA编码正确问题单时发现载频配置表跳频数表中重复频点零频点时带跳频呼成功
    时首先考虑系统消息发否正确观察系统消息发现带CA表没错误已滤掉重复频点零频点
    考虑指配命令带MA值否正确结果发现MA编码正确已滤掉重复频点零频点
    初步分析开始怀疑基站配置时否正确滤效频点然查阅代码发现果然 BTSM基站初始化设置载频属性设置信道属性时没载频配置表跳频数表中频点效性做检查致表中出现非法频点时跳频呼成功

    回顾反思:
    问题发现没什特殊分析方法般排法问题隐藏非常深觉问题发现暴露开发程中问题:实现模块间效沟通避免某模块修改引起模块连锁反映
    RRBTSM没考虑重复频点零频点情况家寄托数配置正确相安事RR首先增加非法频点滤件事系统变更加坚强BTSM知道变化错误数面前束手策反起相反效果
    公司常说道工序道工序帝引申相关模块模块帝试想果模块想想改动否带良影响时解模块新进展类问题会发生

    案例216
    正 文
    现象分析:
    动态数配置测试增加区时发现区正常初始化观察ABIS_BTSM接口踪窗口没关初始化流程相关消息分析发现调函数
    BTSM_make_send_site_config(_UC site_no _UC ObjectClass _US BTS_no _UC TRX_no _UC OperMode)
    {
    ………
    判断合法性
    if ((site_no > MAX_SITE_NUM)
    || (BTS_no > MAX_BTS_NUM)
    || (TRX_no > MAX_TRX_A_BTS))
    {
    ASSERT(FALSE)
    return (FALSE)
    }
      ………
    }
    进行区级操作调该函数时TRX_NO0xFF带入函数合法性检查时会返回引发该错误

    回顾反思:
    较普通错误回顾产生解决程觉启发引起编程规范思考

    说该错误引起编程规范关函数 BTSM_make_send_site_config()没 BTS_noTRX_no 合法性判断代码审查时考虑符合编程规范中检查参数输入效性条提出请开发员增加参数效性检查
    开发员忽略问题该函数级象调进行区级操作时
    TRX_NO0xFF带入函数合法性检查时会返回引起述错误
    回头函数发现然符合编程规范少违反设计途面面俱函数条
    查代码类似问题少诸:函数入口参数加效性检查函数返回值加处理等问题找问题象颗颗隐型炸弹稍微注意时会带严重果
    正前文述测试开发员会代码熟悉程度代码编制时间太久遗忘等诸类原忽略问题时良程序风格编程规范会成强力保护伞试想果文提函数设计开发严格规范进行问题没产生土壤果段代码编写严格遵守规范系统变坚摧

    2注意出口函数处理
    案例221
    摘 :果函数存出口应注意函数出口处理
    问题描述:根函数功需求测函数函数体开始时保存前系统务模式设置新务模式抢占模式函数返回时应该恢复务旧模式否会影响整系统功实现问题出里函数复杂分支结构出口出口务模式进行恢复出口没恢复样导致函数返回系统务模式改变问题
    问题分析:问题出现原函数出口程序员注重分支功实现细节忽视者忘记函数出口应做收尾工作象场战争样战争胜利扫战场开总结会否会象李成样仗完开始享受前功弃毛席说:宜剩勇追穷寇沽名学霸王函数出口处理应充分重视
    案例意义:类问题常见出口函数测试时应充分构造测试例采分支覆盖测试方法函数出口环境恢复资源释放情况进行观察编程员说果函数统出口效避免减少类似问题
    三维护类代码问题
    1 统枚举类型
    案例311
    正 文
    基站告警屏蔽测试中偶尔告警ID测试基站出意料报错:消息物理位置致通踪消息发现机消息中单板类型值基站致查机程序知:基站单板类型(TRX)定义中:告警台告警屏蔽0X23(BCID_CUI)基站开发员称0X09(BCID_TRX)
    该问题启示:测试中应遍历实际情况外希BTSBSC开发员间协作更加精密懈击

    2 注释量少占代码总量20%
    案例321XXX产品BAM某版部分代码注释量统计
    注释例统计 例(字节) 例(字) 例(行) 文件名

    0000( 0 2160) 0000( 0 352) 0000( 0 48) hlr\source\include\aah
    0000( 0 1317) 0000( 0 137) 0000( 0 64) newalarm\source\include\alarmerrh
    0080( 228 2841) 0115( 49 426) 0030( 7 230) newalarm\source\include\alarmrech
    0222( 220 988) 0213( 37 173) 0115( 11 95) newconfig\src\include\alarmrech
    0000( 0 329) 0000( 0 27) 0000( 0 24) newfhlr\source\include\alarmrech
    0151( 691 4563) 0242( 128 528) 0114( 26 228) hlr\source\assemblerc
    0229( 631 2748) 0361( 113 313) 0160( 22 137) newalarm\source\assemblerc

    0088(2138962423601) 0122(32953268773) 0082(10475127119) 总计(整项目)
    8% 12% 8%

    四产品兼容性问题
    1系统配置命令方式
    案例411
    事现象:时RPU A网络设备访问机RPU板PING RPU A通RPU APING通RPU板复位恢复正常问题偶然出现

    问题分析步骤:

    首先分析造成RPU板网络通原通常种:
    A) 物理连接问题(网口坏)
    B) 太网设置环工作方式
    C) 太网链路层协议误Ethernet IISNAP致
    D) MAC址非法(广播址首位偶数等)
    E) MACIP址网络设备重复
    F) IP协议设置转发
    G) 设置防火墙

    检查完全排ABCDEF种原太网口没设置防火墙规默认包滤设置允许通排防火墙原

    验证否防火墙造成开RPU A防火墙调试信息果然发现防火墙限制采防火墙规2该规限制访问网络设备

    太网口防火墙没配置规理说应该适规0默认规什原太网口采2号规呢?

    进步观察调试信息发现太网口分配部户号49时想防火墙部户号DMU通道号直接应关系试验果然发现应普通拨号说防火墙部户号等户占DMU通道号

    时RPU板DMU通道闭塞保留49号DMU通道户拨号网占第49号通道该户采第3号防火墙规太网口样该收第3号防火墙规限制

    头重复次刚程:
    1复位RPU板户没拨号网RPU板太网口采防火墙部户号49采第0号防火墙规
    2第49号MODEM户网该户采防火墙规X(0
    问题已查明防火墙太网口处理应该分配部户号49太网口致第49号DMU通道形成应关联系统运行带极隐患

    案例412
    数通信某产品进行终端行测试程中发现奇怪问题先通
    TELNETNETTERM登录机系统然两TELNET终端时包PING机PING XXXXXXXXXXXX 包长1000Bytes中终端收两应答反应终端收应答显示超时反应重新TELNET登录登录TELNET终端试图登录第二TELNET终端失败(系统支持3TELNET终端)测试员怀疑前登录两TELNET务已死掉通超级终端登录串口开TRACE信息TRACE信息显示前已3TELNET务处运行状态实际时已TELNET终端两TELNET终端已没反应确定没登录交换机系统确定前述两TELNET务已死掉开发员起重现问题时奇怪现象发生机架重复述测试步骤问题次重现机架重复述测试步骤非常正常没问题开发员仔细检查程序法发现问题症结问题持续日法解决众开发员会诊怀疑pSOS系统配置问题较两产生现象机架pSoS系统系统配置文件发现中关pNA+Buffer配置部分某配置配置改问题机架系统配置进行测试问题消失恢复原配置问题重现问题确定系统配置误
    案例验系统机架运行现象时考虑原外应考虑否操作系统配置外问题带出附加问题版理存较问题测试机架机架运行程序版样

    2设备接
    案例421
    正 文
    测试环境:
    A8010 Refiner通中继线Bell 1240交换机进行接

    现象描述:
    Bell 1240交换机引出PRI中继线接入RefinerE1接入口接通Refiner RPU板中继灯灭状态电话进行测试线路通忙音

    原分析:
    问题原两点:
    1Bell 1240未送号码
    2Bell 1240交换机PRI选路方式Refiner接入服务器

    解决办法:
    (1) A8010 Refiner配置数RPU板正常运转中继显示正常电话拨号忙音Debug 进行调试发现Bell 1240交换机未户号码送号码交换机员联系发现方传送全部映射虚拟号码接入服务器号码改虚拟号码行配置正常传送接入服务器
    (2) 数配置正常发现DMU进行选路选断开调试发现Bell 1240交换机PRI选路方式Channel方式Refiner接入服务器默认选路方式Tsmap方式更改配置户正常接入

    启示分析
    测试环境般交换机接入服务器交换机接入设备运行数配置环境稳定设备进行接时发现定设备完全兼容许东西问题发生认识(PRI选路方式)测试中定深入细致测细问题厂家设备进行接测试样保证产品卖局方正常稳定运行

    3
    案例431
    正 文
    负荷分担基思想通链路中带宽均匀分布流量目前没考虑PMP2M UNI34UNI没考虑优先级百分况局路表址长度定相等目前BEST EFFORT呼仅分配150K带宽(UBR业务)参数static void GetBandwidth( STraffic *sTempTraffic DWORD *pdwBandwidth )函数细调达统计均匀参数合适二条负荷分担路ABA中已建10MPVC果述参数太少BEST EFFORT呼B会A果选取150KB70呼(BEST EFFORT)AB时分担呼
    根述负荷分担基思想进行负荷分担 功测试测试中线路连接图图示








    HP测试仪设置ForwordBackword Peak Cell Rate1000cellss测试仪3口7口发起呼(信令类型UNI31)没发起呼前交换机 12
    578口ILMI信令均激活三口建立光口链路时三口已带宽(Used BandInOut)2000cellsps (sh port 已带宽信令链路占)现测试仪3口发起次呼sh port 57已带宽2000变3000时建立起条5口7口间SVC发起第二次呼sh port 8已带宽2000变3000 5口已带宽3000变4000时增加条5口8口间SVC断发起呼7口8口已带宽交增长样证明负荷分担功实现
    RadiumMPUsh po 7
    Port status Active
    Band width STM_1
    OE attribute Optical
    Clock attribute Source timing
    Type UNI
    Loopback mode No loop
    Alarm status NODEFECT
    Max BandIn 353207
    Max BandOut 353207
    Used BandIn 2000
    Used BandOut 2000
    Max VPCs 100
    Max VCCs 1900
    Used PVPs 0
    Used PVCs 2
    Used SVCs 331
    Test mode off
    测试程中出现现象:交换机17口交换机278口ILMI注册成功三口获端网络前缀交换机18口ILMI状态VERIFYING没获端网络前缀LOG信息该口ILMI注册程正确查该口ILMI协议版31信令版UNI31三口
    ILMI协议版40 信令版IISP发起呼交换机17口中继交换机28口没进行分担交换机18口ILMI协议版设置408口进行负荷分担说明ILMI协议版没实现适应功开发员沟通知交换机ILMI40版适应厂家ILMI31版适应交换机ILMI31版端网络前缀获仅限ILMI40 非协议规定设计设计中没考虑ILMI31 获端网络前缀支持实际开局中ILMI激活信令版手工设置IISP实现厂家产品互通
    测试结果说明负荷分担功已正确实现条件ILMI版必须40


    五版控制问题
    1新老代码中全局变量致
    案例511
    正 文
    开始时RPU板网口址20226856通太网口RPU板软件数进行加载RPU板运行正常程序数全部正确改变RPU板址(1026856)进行户呼接入测试发现户正确输入户名口令验证通RPU板telnet窗口中开RADIUS调试开关显示认证请求报文计费报文发正确RADIUS服务器直没收应答局方维护员查RADIUS服务器找记录验证计费始终成功
    接通途径尝试定位问题:
    1块RPU板加载老版程序(注意块RPU板址已1026857)重新测试认证计费正常进行没出现问题排方RADIUS服务器存问题
    2出现问题方RADIUS报文发送接受考虑RADIUS报文UDP包方式传送RPUtelnet中开UDP报文调试开关踪
    RADIUS报文发现RADIUS报文已发送填充源址(Source IP Address)字段值20226856定位问题RADIUS模块填充发送RADIUS报文源址时然RPU板改变址前老址导致RADIUS服务器发送应答报文正确返回
    问题已定位时间紧迫立修改程序采取重新复位RPU板方法暂时回避问题次发生

    启 示:
    1软件全局变量更改考虑模块受影响
    2测试员测试中考虑种情况边缘取值


    六测试性代码问题
    1调试信息印信息正确性
    案例611
    正 文制作软件呼器SPT板放音程序进行修改调试中发现进行呼段时间交换机动重启修改代码开始处增加印消息踪程序流程程序结构:



    次踪印信息发现消息印消息1开始会发生重启现象次重试发现消息1结束踪印时时消息2印直没踪初步判断程序错误发生消息1处理集中力量检查消息1处理长时间检查未处理流程中发现错误消息1开始处直接RETURN屏蔽掉消息1处理次测试发现重启现象旧偶尔够函数入口处印消息
    什会出现样情况呢?什情况导致重启呢?
    修改情况方两条消息处会会第二条消息处理造成?然现象太报着试试想法消息2入口处加RETURN居然重启现象重现
    立检查消息2处理快发现处理开始指针错误导致程序死机重启
    错误简单根现象错误判断什消息2导致死机前印消息什台见呢?
    考虑交换机消息印机制会发现程序中印消息马台显示消息机传台需定时间果Printf印消息久程序发生严重错误导致程序死机印消息没发送台然会出现想应该印消息
    总结
    1环境特殊性常常认应该事件没发生导致问题迷惑解
    2表面现象骗找问题实质需绕明显摆面前表面现象角度考虑


    案例练第二部分

    户login模块编制:首先passwordtxt记录注册户id口令passwordtxt文件行格式:IdPassword
    中:
    Id (字母+数字) 16 字符
    Password (字母+数字) 16字符
    求户输入id口令时程序通查找passwordtxt检查户否存否合法直接输出相应结果户直接回车时程序退出求考虑般异常
    规:
    1 组完成
    2 首先花3040分钟画流程图
    3 然30-40分钟编码C语言编
    4 3045分钟组部讨选择代表性认较先行评点
    5 45分钟1时集体评审
    1〕符合规范部分〉集体醒
    2〕符合规范〉加强巩固
    6 求严格软件编程规范进行编码评审
    7 保留代码节

    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 积分 [ 获取积分 ]

    下载文档

    相关文档

    软件编程规范总则CHECKLIST

     软件编程规范总则CHECKLIST 检 查 人:________________ 检查日期:1999年_____月_____日 审查内容:_________________...

    10年前   
    25875    0

    软件编程实习总结

    软件编程实习总结  实习时间:3月1日―――5月9日  实习地点:广州xx大学生实训基地  实训目标:  1.通过系统性的实训,熟练掌握java se、java ee知识体系,具备java开发...

    9年前   
    518    0

    软件编程测试部工作总结

    软件编程测试部工作总结  XX年已近尾声,回顾这一年里的工作收获颇多。年初一直在参与中行对公系统的测试工作,中国银行对公代客资金管理系统已2月份对公系统顺利投产。紧接着春节后又开始了xx银行的...

    9年前   
    554    0

    编程模拟练习

    模拟练习 一、选择题  1、传输用的基带信号主要要求: A、原始消息代码必须编成适合于传输用的码型;  B、电波形应适合于基带系统的传输。 C、设备简单可靠。 D、A和B答案...

    10年前   
    7826    0

    编程规范和范例

     目 录 1 排版 6 2 注释 11 3 标识符命名 18 4 可读性 20 5 变量、结构 22 6 函数、过程 28 7 可测性 36 8 程序效率 ...

    13年前   
    24758    0

    软件测试规范

    一.软件测试理论 1.什么是软件测试     无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。在开发大型软件系统的漫长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符...

    9年前   
    7180    0

    软件项目管理规范

    软件项目管理规范一、软件项目管理的定义软件项目管理是软件工程和项目管理的交叉学科,软件项目管理的概念涵盖了管理软件产品开发所必须的知识、技术及工具。根据美国项目管理协会PMI对项目管理的定义可...

    1年前   
    351    0

    编程培训心得3篇

    编程培训心得3篇篇一:软件编程学_心得 软件编程学_心得 随着计算机技术的发展和工作的需要,为了能够更好的维护公司生产管理系统;公司安排我们到北大青鸟APTECH进修。我们选择了时下最流行...

    3年前   
    698    0

    编程培训实习总结

    编程培训实习总结  实习时间:3月1日―――5月9日  实习地点:广州xx华南大学生实训基地  实训目标:  1.通过系统性的实训,熟练掌握java se、java ee知识体系,具备java...

    9年前   
    441    0

    04应用软件管理规范

    1.目的 规定本公司应用软件开发、管理适用本手册,确保工作人员正确执行本手册的规定。 2.适用范围 适用于已立项的新疆航空公司应用软件开发管理工作。 3.职责 3.1应用软件开发研制...

    12年前   
    5670    0

    22「实例」人力资源规划管理规范

    人力资源规划管理规范 1 目 的: 为了实现公司整体经营目标,根据公司发展需要的内部和外部环境,运用科学有效的方法,进行人力资源预测、投资和控制;在此基础上制定职务编制、人员配置、教育培...

    11年前   
    3845    0

    PLC编程软件 GX-developer 安装详细说明

    PLC编程软件 GX-developer 安装详细说明本文为GX DEVELOPER的安装说明,三菱的其他软件安装也类似这样:1,安装前,请确定下载文件的大写及文件名称:2,先安装 通用环境,...

    3年前   
    810    0

    数控编程技术毕业论文UG软件在MP3设计中的应用

    制造自动化技术是先进制造技术中的重要组成部分,其核心技术是数控技术。数控加工工艺分析与编程则是数控加工的核心,合理的工艺是保证数控加工质量。数控技术是综合应用计算机、自动控制、自动检测及精密机械...

    4年前   
    1425    0

    软件文档-计算机软件质量保证计划规范

    软件文档:计算机软件质量保证计划规范1主题内容与适用范围 本规范规定了在制订软件质量保证计划时应该遵循的统一的基本要求。 本规范适用于软件特别是重要软件的质量保证计划的制订工作。对于非重要软件...

    9年前   
    573    0

    软件发布管理流程规范

    软件发布管理流程规范编 制: 审 核: 日 期: 版 本: 编 号: 密 级: 修改历史修改时间修改人修改原因版本目 录1. 目标 42. 发布流程 42.1. ...

    2年前   
    546    0

    软件项目开发和管理规范

    软件项目开发和管理规范V1软件开发标准化工作流程1 引言1.1 编写目的软件项目管理是软件工程和项目管理的交叉学科,软件项目管理的概念涵盖了管理软件产品开发所必须的知识、技术及工具。根据美国项...

    9年前   
    600    0

    软件测试标准规范

    软件测试标准规范1 目的为了确保软件产品质量,使产品能够顺利交付和通过验收,特编写本文档,以作参考2 适用范围本文档适用于项目开发过程中的单元测试、集成测试、系统测试、业务测试、验收测试以及一...

    4年前   
    877    0

    软件功能规格说明书编写规范

     软件功能规格说明书 编写规范 文件编号: NW503102 ...

    13年前   
    9730    0

    软件版本管理规范V2

    软件版本管理规范制订:审核:______批准:______ 文 件 修 订 记 录文件名称工程设计变更管理程序编号F-02-002 ...

    4年前   
    626    0

    linux编程SHELL编程实验报告

    Linux编程课程设计报告题 目: Linux Shell编程 专 业 学 号 姓 名 ...

    1年前   
    607    0

    文档贡献者

    小***果

    贡献于2013-03-12

    下载需要 2 积分 [ 获取积分 ]
    下载文档