欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      WZ職業(yè)技能代碼

      時(shí)間:2019-05-13 11:23:18下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《WZ職業(yè)技能代碼》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《WZ職業(yè)技能代碼》。

      第一篇:WZ職業(yè)技能代碼

      100:戰(zhàn)士

      110:劍客

      111:勇士

      112:英雄 120:準(zhǔn)騎士

      121:騎士

      122:圣騎士 130:槍戰(zhàn)士

      131:龍騎士

      132:黑騎士 200:魔法師

      210:火毒法師

      211:火毒巫師

      212:火毒魔導(dǎo)士 220:冰雷法師

      221:冰雷巫師

      222:冰雷魔導(dǎo)士 230:牧師

      231:祭司

      232:主教 300:弓箭手

      310:獵人

      311:射手

      312:神箭 320:弩弓手

      321:游俠

      322:箭神 400:飛俠

      410:刺客

      411:無(wú)影人

      412:隱士 420:俠客

      421:獨(dú)行客

      422:俠盜 500:管理員

      510:超級(jí)管理員

      全職業(yè)通用技能: 技能ID 技能名稱 5001000 速度提升 5001001 龍咆哮 5001002 快速移動(dòng)

      5101003 祝福+神之保佑 5101001 速度激化 5101000 治愈+凈化 5101004 隱身 5101002 神圣祈禱 5101005 復(fù)活

      新手技能

      1003

      匠人之魂 1004

      坐騎 1002

      疾風(fēng)步 1001

      緊急治療 1000

      蝸牛投擲術(shù)

      戰(zhàn)士技能

      1000002 恢復(fù)術(shù) 1000000 生命恢復(fù) 1000001 生命強(qiáng)化 1001003 圣甲術(shù) 1001004 強(qiáng)力攻擊 1001005 群體攻擊

      魔法師技能

      2001004 魔法彈 2000001 魔力強(qiáng)化 2000000 魔力恢復(fù) 2001003 魔法鎧甲 2001005 魔法雙擊 2001002 魔法盾

      弓箭手技能

      3001004 斷魂箭 3000001 強(qiáng)力箭 3001005 二連射 3001003 集中術(shù) 3000000 精準(zhǔn)箭 3000002 遠(yuǎn)程箭

      飛俠

      4001003 隱身術(shù) 4001002 混亂術(shù) 4001334 二連擊 4000001 遠(yuǎn)程暗器 4001344 雙飛斬 4000000 集中術(shù)

      劍客

      1101005 快速斧 1100001 精準(zhǔn)斧 1100003 終極斧 1100002 終極劍 1101007 傷害反擊 1101006 憤怒之火 1101004 快速劍 1100000 精準(zhǔn)劍

      準(zhǔn)騎士 1201005 快速鈍器 1200001 精準(zhǔn)鈍器 1200003 終極鈍器 1200002 終極劍 1201007 傷害反擊 1201004 快速劍 1200000 精準(zhǔn)劍 1201006 壓制術(shù)

      槍騎士

      1300003 終極矛 1300002 終極槍 1301007 神圣之火 1301006 極限防御 1301005 快速矛 1300001 精準(zhǔn)矛 1301004 快速槍 1300000 精準(zhǔn)槍

      火毒法師

      2101004 火焰箭 2101001 精神力 2100000 魔力吸收 2101005 毒霧術(shù) 2101003 緩速術(shù) 2101002 快速移動(dòng)

      冰雷法師

      2201004 冰凍術(shù) 2201001 精神力 2200000 魔力吸收 2201003 緩速術(shù) 2201002 快速移動(dòng) 2201005 雷電術(shù)

      牧師

      2301004 祝福 2301002 群體治愈 2301005 圣箭術(shù) 2301003 神之保佑 2300000 魔力吸收 2301001 快速移動(dòng)

      獵人

      3101005 爆炸箭 3101002 快速箭 3100000 精準(zhǔn)弓 3100001 終極弓 3101003 3101004

      弩弓手

      3201002 3200000 3200001 3201005 3201004

      刺客

      4101003 4100000 4100001 4101005 4100002 4101004

      俠客

      4201002 4200000 4200001 4201003 4201005 4201004

      勇士

      1111007 1111006 1111005 1111002 強(qiáng)弓 無(wú)形箭 快速弩 精準(zhǔn)弩 終極弩

      穿透箭3201003 無(wú)形箭 快速暗器 精準(zhǔn)暗器 強(qiáng)力投擲 生命吸收 恢復(fù)術(shù) 輕功 快速短刀 精準(zhǔn)短刀 恢復(fù)術(shù) 輕功 回旋斬 神通術(shù) 防御崩壞 氣絕斧 氣絕劍 斗氣集中

      強(qiáng)弩

      1110000 魔力恢復(fù) 1111004 狂亂之斧 1111003 狂亂之劍 1110001 盾防精通 1111008 虎咆哮

      騎士

      1211006 寒冰鈍器 1211002 屬性攻擊 1211004 烈焰鈍器 1211003 烈焰之劍 1211005 寒冰之劍 1210000 魔力恢復(fù) 1211008 雷鳴鈍器 1211009 魔法崩壞 1210001 盾防精通

      1211007 雷鳴之劍

      龍騎士

      1311008 龍之魂 1311004 無(wú)雙矛 1311003 無(wú)雙槍 1311006 龍咆哮 1310000 魔法抗性 1311002 矛連擊 1311007 力量崩壞 1311005 龍之獻(xiàn)祭 1311001 槍連擊

      火毒巫師

      2110001 魔力激化 2111006 火毒合擊 2111002 末日烈焰 2110000 火毒抗性 2111003 致命毒霧 2111004 封印術(shù) 2111005 魔法狂暴

      冰雷巫師

      2210001 魔力激化 2211006 冰雷合擊 2211002 冰咆哮 2210000 冰雷抗性 2211004 封印術(shù) 2211005 魔法狂暴 2211003 落雷槍

      祭司

      2311001 2311005 2310000 2311003 2311002 2311004 2311006

      射手

      3111004 3111003 3110001 3111002 3111005 3111006 3110000

      游俠

      3211004 3211003 3211005 3210001 3211002 3211006 3210000

      無(wú)影人

      4110000 4111005 4111006 4111001 4111004 凈化 巫毒術(shù) 魔法抗性 神圣祈禱 時(shí)空門 圣光 圣龍召喚 箭雨 烈火箭 貫穿箭 替身術(shù) 銀鷹召喚 箭掃射 疾風(fēng)步 升龍弩 寒冰箭 金鷹召喚 貫穿箭 替身術(shù) 弩掃射 疾風(fēng)步 藥劑精通 多重飛鏢 二段跳 聚財(cái)術(shù) 金錢攻擊

      4111002 影分身 4111003 影網(wǎng)術(shù)

      獨(dú)行客

      4211002 落葉斬 4211004 分身術(shù) 4211001 轉(zhuǎn)化術(shù) 4211006 金錢炸彈 4211005 4211003 4210000

      英雄

      1120004 1120003 1121011 1120005 1121008 1121010 1121000 1121001 1121006 1121002

      圣騎士

      1220005 1220010 1221012 1221009 1220006 1221004 1221003 1221000 1221001 1221007 1221011 1221002

      黑騎士

      1320005 金錢護(hù)盾 斂財(cái)術(shù) 強(qiáng)化盾 穩(wěn)如泰山 磁石 寒冰掌 突進(jìn) 葵花寶典 輕舞飛揚(yáng) 勇士的意志冒險(xiǎn)島勇士進(jìn)階斗氣 阿基里斯 突進(jìn)

      萬(wàn)佛歸一破圣靈之錘 連環(huán)環(huán)破 圣靈之劍 穩(wěn)如泰山 磁石

      勇士的意志冒險(xiǎn)島勇士圣域 寒冰掌 阿基里斯 穩(wěn)如泰山

      1321010 靈魂助力 1321007 靈魂治愈 1320009 惡龍附身 1320008 靈魂祝福 1320006 突進(jìn)

      1321000 勇士的意志 1321001 冒險(xiǎn)島勇士 1321003 磁石 1321002 阿基里斯

      火毒魔導(dǎo)師

      2121008 勇士的意志 2121001 創(chuàng)世之破 2121005 冰魔獸 2121003 火鳳球

      2121004 終極無(wú)限 2121002 魔法反擊 2121000 冒險(xiǎn)島勇士 2121007 天降落星

      2121006 枚杜斯之眼

      冰雷魔導(dǎo)師

      2221008 勇士的意志 2221001 創(chuàng)世之破 2221007 落霜冰破 2221006 鏈環(huán)閃電 2221003 冰鳳球 2221005 火魔獸 2221004 終極無(wú)限 2221002 魔法反擊 2221000 冒險(xiǎn)島勇士

      主教

      2321007 光芒飛射 2321009 勇士的意志 2321003 圣龍支配 2321001 創(chuàng)世之破 2321008 圣光普照 2321005 圣靈之盾 2321004 終極無(wú)限 2321002 魔法反擊 2321000 冒險(xiǎn)島勇士 2321006 復(fù)活

      神射手

      3121009 勇士的意志 3120005 擊腿箭 3121008 神射手

      3121003 飛龍沖擊波 3121007 3121000 3121006 3121002 3121004

      箭神

      3221008 3221006 3220004 3221003 3221005 3221000 3221001 3221002 3221007

      隱士

      4121009 4120002 4121000 4121004 4121008 4121003 4121006 4121007 4120005

      俠盜

      4221001 4221008 4221007 集中精力 冒險(xiǎn)島勇士 火鳳凰 火眼晶晶 暴風(fēng)箭雨 勇士的意志 刺眼箭 神弩手

      飛龍沖擊波 冰鳳凰

      冒險(xiǎn)島勇士 一擊要害箭 火眼晶晶 穿透箭 勇士的意志 假動(dòng)作

      冒險(xiǎn)島勇士 忍者伏擊 忍者沖擊 挑釁 暗器傷人 三連光環(huán)擊破武器用毒液 暗殺

      勇士的意志 一出雙擊

      4220002 假動(dòng)作

      4221000 冒險(xiǎn)島勇士 4221004 忍者伏擊 4221003 挑釁 4221006 煙霧彈

      4220005 武器用毒液

      攻擊類技能:

      hs 技能簡(jiǎn)介級(jí)別號(hào) 與String.wz相連

      req 要求其它技能級(jí)別達(dá)到x時(shí)才可加此技能

      masterLevel 技能初始級(jí)別上限 4轉(zhuǎn)技能大部分為10 需要用技能書提升

      mob 對(duì)怪物的影響效果(頭頂上--)

      skillType 技能類型 被動(dòng)1 主動(dòng)輔助 2 主動(dòng)攻擊式輔助 3

      disable 值為1時(shí)禁止提升技能級(jí)別

      invisible 技能是否可見 值為0或不存在此項(xiàng)時(shí)可見

      elemAttr 攻擊屬性 f為火 其它暫且不在此添加

      action 技能發(fā)動(dòng)時(shí)執(zhí)行的動(dòng)作 延遲由此產(chǎn)生

      prop 發(fā)動(dòng)幾率 有多種類型 1 被動(dòng)技能發(fā)動(dòng)幾率(如終極箭)2 技能特殊效果發(fā)動(dòng)幾率(爆炸箭昏迷)

      mastery 武器熟練度 游戲中的%是按照該值*5 如60%熟練對(duì)應(yīng)的是12

      mobCount 技能攻擊數(shù)量

      bulletCount 技能攻擊次數(shù)

      cooltime 冷凍時(shí)間 技能連續(xù)使用的時(shí)間間隔

      damage 傷害% 按照角色的攻擊值

      range 攻擊長(zhǎng)度 本處為單向攻擊長(zhǎng)度

      hpCon HP消耗

      mpCon MP消耗 lt.X 技能影響范圍 右上X

      lt.Y 技能影響范圍 右上Y

      rb.X 技能影響范圍 左下X

      rb.Y 技能影響范圍 右下Y

      iconMouseOver iconDisabled icon effect

      之類的都為圖象效果 不作解釋

      ---------------

      Mob.wz類

      acc 怪物攻擊的命中值

      bodyAttack 英文翻譯:身體碰撞

      改0可以做到碰怪無(wú)敵

      eva 回避值

      exp 擊殺后獲得的經(jīng)驗(yàn)值

      fs 不明 常值為10

      level 怪物級(jí)別

      maxHP 怪物最大血值

      maxMP 怪物最大魔值

      MADamage 魔法攻擊

      MDDamage 魔法防御

      PADamage 物理攻擊 PDDamage 物理防御

      speed 移動(dòng)速度

      undead 是否為不死系(決定著牧師是否可治療造成傷害)

      怪物攻擊部分: attack(1 2 3 4)

      attackAfter 攻擊效果影響時(shí)間

      conMP 耗費(fèi)的魔量

      knockback 擊退角色

      range 攻擊影響范圍

      tremble 屏幕震動(dòng)(1震動(dòng) 0不震動(dòng))

      type 攻擊類型

      Character.wz類

      afterImage 攻擊的劃痕

      attack 此處意義不明

      attackSpeed 攻擊速度

      cash 是否現(xiàn)金道具(0不是 1是)

      incACC 增加命中

      incDEX 增加敏捷

      incINT 增加智力

      incLUK 增加運(yùn)氣

      incSTR 增加力量

      incPAD 增加物理攻擊

      incHP 增加血值

      incMP 增加魔值

      incMAD 增加魔法攻擊

      incMDD 增加魔法防御

      incPAD 增加物理攻擊

      incPDD 增加物理防御

      reqDEX 裝備所要求的敏捷

      reqINT 裝備要求的智力

      reqJob 裝備要求的職業(yè)

      reqLevel 裝備要求的級(jí)別

      reqLUK 裝備要求的幸運(yùn)

      reqSTR 裝備要求的力量

      tuc 可升級(jí)次數(shù)

      knockback 擊退怪物幾率

      notSale 無(wú)法出售

      only 固有道具

      price 出售價(jià)格(賣到店里的價(jià)格=這個(gè)價(jià)格的2分之1)

      timeLimited 時(shí)間限制

      tradeBlock 不可交易

      equipTradeBlock 裝備后不可交易

      exp 武器升級(jí)需要的武器經(jīng)驗(yàn)值

      incPADMax 升級(jí)時(shí)增加的最大攻擊

      incPADMin 升級(jí)時(shí)增加的最小攻擊

      incMADMax 升級(jí)時(shí)增加的最大魔法攻擊

      incMADMin 升級(jí)時(shí)增加的最小魔法攻擊

      incDEXMax 升極時(shí)增加的最大敏捷

      incDEXMin 升極時(shí)增加的最小敏捷

      incSTRMax 升級(jí)時(shí)增加的最大力量

      incSTRMin 升級(jí)時(shí)增加的最小力量

      incLUKMax 升級(jí)時(shí)增加的最大幸運(yùn)

      incLUKMin 升級(jí)時(shí)增加的最小幸運(yùn)

      incINTMax 升級(jí)時(shí)增加的最大智力

      incINTMin 升級(jí)時(shí)增加的最小智力

      ----------------------------------------------

      Item.wz類

      slotMax 折疊最大數(shù)量

      recoveryHP 恢復(fù)HP

      recoveryMP 恢復(fù)MPmcType 消耗類型

      c*****umeOnPickup 拾起消耗(一揀到就自動(dòng)使用)

      party 全組隊(duì)恢復(fù)?

      hpR HP恢復(fù)百分比

      mpR MP恢復(fù)百分比

      berserk 增加角色傷害%

      booster 減少攻擊延遲(類似快速箭之類的)

      time 持續(xù)時(shí)間

      reward(獎(jiǎng)賞)→count 獲得數(shù)量

      reward(獎(jiǎng)賞)→item 獲得的物品ID reward(獎(jiǎng)賞)→prob 獲得的幾率(這里是萬(wàn)分之X)

      ----------------------------------------------

      Etc.wz類

      物品鍛造類

      catalyst 允許使用的催化劑

      itemNum 制造出的數(shù)量

      meso 需要的金錢

      recipe(所需的材料)→count 需要的數(shù)量

      recipe(所需的材料)→item 需要的材料ID

      reqLevel 要求角色級(jí)別

      reqSkillLevel 要求鍛造技能級(jí)別

      reqItem 要求擁有的道具

      ---------------*****ingMob.wz類

      fatigue 疲勞一定時(shí)間(估計(jì)1分鐘)內(nèi)增加的值

      jump 騎上騎寵后角色的跳躍值

      speed 騎上騎寵后角色的移動(dòng)速度

      swim 騎上騎寵后角色的游泳速度

      ---------------Morph.wz類

      jump 變身后角色的跳躍力

      speed 變身后角色的移動(dòng)速度

      swim 變身后角色的游泳速度

      ---------------Quest.wz類

      nextQuest 下一個(gè)任務(wù)

      exp 任務(wù)完成獎(jiǎng)勵(lì)經(jīng)驗(yàn)

      money 任務(wù)完成獎(jiǎng)勵(lì)的金錢

      npc 任務(wù)所要找的NPC

      job 任務(wù)所要求的職業(yè)

      count 任務(wù)所要求的物品數(shù)量

      id 任務(wù)所要求的物品ID

      end 任務(wù)結(jié)束時(shí)間

      start 任務(wù)開始時(shí)間

      interval 重復(fù)接到任務(wù)的間隔

      normalAutoStart 任務(wù)自動(dòng)開始

      ---------------Map.wz類

      bgm 地圖背景音樂(lè)

      cloud 云?

      fieldLimit 地圖限制類型

      forcedReturn 強(qiáng)制返回 999999999貌似是附近的主城或者本地圖

      hideMinimap 是否隱藏迷你地圖

      mapMark 地圖標(biāo)記

      mobRate 怪物比例

      returnMap 返回地圖

      town 是否為村莊主城

      version 版本?

      VRBottom 地圖底部

      VRLeft 地圖左邊

      VRRight 地圖右邊

      VRTop 地圖頂邊

      地板部分

      next 下一個(gè)地板

      prev 上一個(gè)地板

      x1 地板的左邊X x2 地板的右邊X y1 地板的上邊y y2 地板的下邊y ToolTip 提示的文本

      User 地圖進(jìn)入者 這個(gè)項(xiàng)展開有對(duì)使用者攻擊的加成 幸運(yùn) 力量等 以及對(duì)武器裝備的改變 CS效

      第二篇:寫給某位WZ同學(xué)的感謝信

      我也不知道最近怎么會(huì)有這么多的不順心,但是我知道,不管怎么樣,只要有你在我就放心,寫給某位WZ同學(xué)的感謝信。只要告訴你,所有問(wèn)題都不會(huì)再是問(wèn)題。我也知道(雖然不知道為什么會(huì)有這樣的感覺)不管怎么樣,你都會(huì)在。所以,謝謝。

      昨天可能真的是極限了,不知道給誰(shuí)說(shuō),只想到你,如果那個(gè)短信你不回,昨天晚上可能就崩潰了。幸虧你回了,我說(shuō),幸虧你在。幸虧你在,幸虧還有你。雖然今天跟你打電話的時(shí)候,我還是沒能控制住,我知道我哭得很難聽,嗯,很難聽,但是,你在聽,我知道,所以,謝謝。

      所以謝謝你,感謝有你,讓我再難過(guò)的時(shí)候都不是一個(gè)人,我知道有你分擔(dān),總會(huì)覺得莫名地放心。有的時(shí)候覺得自己真的有些自私,友情需要兩方面的付出,但我好像不停在向你索取,每次電話都是你打過(guò)來(lái)聽我抱怨,幫我分析解決問(wèn)題,感謝信《寫給某位WZ同學(xué)的感謝信》。我反而沒辦法為你做同樣的事,其實(shí)你也知道我也想,只是你比我成熟,看問(wèn)題也更正確,我卻做不到……所以,謝謝。

      其實(shí)你可能是這個(gè)世界上除了俺爹和馬天宇之外我最喜歡的男的了,嗯,應(yīng)該是。很慶幸我們只是朋友,從來(lái)不是情侶,才可以有事情的時(shí)候毫無(wú)顧忌地告訴你,才可以大方承認(rèn)我想你,才可以在別人都誤會(huì)的時(shí)候坦然一笑,我們不是曖昧。是朋友…… 真是慶幸有你這么個(gè)朋友,每次想起你都是充滿感激的心,我知道我不夠好,不夠招人喜歡,毛病也多,你對(duì)我這么好實(shí)在是習(xí)慣了,對(duì)誰(shuí)都好,是吧。但是真的很喜歡你,嗯,喜歡……

      所以我電話里最后一句話是實(shí)話,我真的怕在你面前太坦白了,會(huì)招你厭,我怕你會(huì)煩我,是真的……所以你千萬(wàn)不能煩我,雖然我知道我對(duì)著電話哭的聲音很難聽,但是你真的不能煩我,不能不理我。因?yàn)橐菦]有你,我不知道再有像昨天晚上的時(shí)候,我怎么熬過(guò)去……所以,謝謝親愛的,謝謝你……

      最后,你要好好復(fù)習(xí),好好考試,哼哼,不要讓我擔(dān)心。

      第三篇:部門代碼

      部門代碼

      總經(jīng)理:GMD 行政人事部:AD 技術(shù)部:TD 發(fā)展部:RDD 宣傳部:PD 策劃部:SD 工程部:ED 造價(jià)部:EC 財(cái)務(wù)部:ACD 投融資部:FD 戰(zhàn)略計(jì)劃部:SPD 招標(biāo)合約部:BCD 審計(jì)部:ADD 招商部:MD 研究院:RI 物業(yè)部:PD 后勤部:LD 資源管理部:RD

      第四篇:代碼檢查

      代碼檢查

      摘要:代碼檢查是白盒測(cè)試的一種靜態(tài)測(cè)試方法,是眾多軟件測(cè)試方法中發(fā)現(xiàn)軟件缺陷最有效的方法之一。本文結(jié)合國(guó)內(nèi)外學(xué)者在相關(guān)領(lǐng)域的研究情況,介紹代碼檢查相關(guān)的基本概念、過(guò)程和分析方法。

      關(guān)鍵字:白盒測(cè)試,代碼檢查,靜態(tài)分析,檢查規(guī)則

      一、引言

      按照測(cè)試時(shí)源代碼是否可見,軟件測(cè)試可以分為白盒測(cè)試和黑盒測(cè)試兩類。

      白盒測(cè)試(結(jié)構(gòu)測(cè)試),即邏輯驅(qū)動(dòng)的測(cè)試,是在了解程序內(nèi)部結(jié)構(gòu)的基礎(chǔ)上,對(duì)程序的邏輯結(jié)構(gòu)進(jìn)行檢查,從中獲取測(cè)試數(shù)據(jù)。白盒測(cè)試關(guān)注的是測(cè)試用例執(zhí)行的程度或覆蓋程序邏輯結(jié)構(gòu)的程度。白盒測(cè)試一般只應(yīng)用于軟件開發(fā)階段。

      白盒測(cè)試,又可按照是否需要運(yùn)行程序,進(jìn)一步細(xì)分為了靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試兩種。通常情況下是按照先靜態(tài)后動(dòng)態(tài)測(cè)試順序來(lái)實(shí)施。其中,靜態(tài)測(cè)試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等測(cè)試內(nèi)容。靜態(tài)測(cè)試既可以由人工進(jìn)行,充分發(fā)揮人的邏輯思維優(yōu)勢(shì),也可以借助軟件工具自動(dòng)進(jìn)行。

      代碼檢查是一種對(duì)程序代碼進(jìn)行靜態(tài)檢查。傳統(tǒng)的代碼檢查是通過(guò)人工閱讀代碼的方式,檢查軟件設(shè)計(jì)的正確性;用人腦模擬程序在計(jì)算機(jī)中的運(yùn)行,仔細(xì)推敲、校驗(yàn)和核實(shí)程序每一步的執(zhí)行結(jié)果,進(jìn)而判斷其執(zhí)行邏輯、控制模型、算法和使用參數(shù)與數(shù)據(jù)的正確性。

      在實(shí)踐中,代碼檢查比動(dòng)態(tài)測(cè)試更有效率,能找到更多的缺陷,通常能發(fā)現(xiàn)30%~70%的邏輯設(shè)計(jì)和編碼缺陷。代碼檢查非常耗費(fèi)時(shí)間,而且需要專業(yè)知識(shí)和經(jīng)驗(yàn)的積累。代碼檢查定位在編譯之后和動(dòng)態(tài)測(cè)試之前進(jìn)行,在檢查前,應(yīng)準(zhǔn)備好需求描述文檔、程序設(shè)計(jì)文檔、程序的源代碼清單、代碼編碼標(biāo)準(zhǔn)和代碼缺陷檢查表等。

      代碼檢查可以發(fā)現(xiàn)的軟件問(wèn)題包括:聲明或引用錯(cuò)誤、函數(shù)/方法參數(shù)錯(cuò)誤、語(yǔ)句不可達(dá)錯(cuò)誤、數(shù)組越界錯(cuò)誤、控制流錯(cuò)誤、界面錯(cuò)誤和輸入/輸出錯(cuò)誤等。

      1、代碼檢查

      代碼檢查包括桌面檢查、代碼走查和代碼審查等方式,主要檢查代碼和設(shè)計(jì)的一致性,代碼對(duì)標(biāo)準(zhǔn)地遵循、可讀性,代碼邏輯表達(dá)的正確性,代碼結(jié)構(gòu)的合理性等方面;發(fā)現(xiàn)違背程序編寫標(biāo)準(zhǔn)的問(wèn)題,程序中不安全、不明確和模糊的部分,找出程序中不可移植部分、違背程序編程風(fēng)格的問(wèn)題,包括變量檢查、命名和類型檢查、程序邏輯檢查、程序語(yǔ)法檢查和程序結(jié)構(gòu)檢查等內(nèi)容。下面對(duì)代碼檢查的三種具體方式進(jìn)行介紹。

      桌面檢查

      是一種傳統(tǒng)的檢查方法,由程序員檢查自己編寫的程序。程序員在程序通過(guò)編譯之后對(duì)源代碼代碼進(jìn)行分析、檢驗(yàn),并補(bǔ)充相關(guān)的文檔,目的是發(fā)現(xiàn)程序中的錯(cuò)誤。

      代碼走查

      代碼走查就是針對(duì)代碼,在假想的輸入情況下,逐行的瀏覽代碼,走查代碼中潛在的缺陷并記錄結(jié)果的過(guò)程。

      代碼走查以小組會(huì)議方式進(jìn)行,每小組3-5人。與代碼審查不同的是,走查要求與會(huì)者扮演計(jì)算機(jī)的角色讓測(cè)試用例沿被測(cè)程序的邏輯運(yùn)行,是在模擬動(dòng)態(tài)測(cè)試;而代碼審查更多的是靜態(tài)測(cè)試。

      代碼審查

      代碼審查是由一組人通過(guò)閱讀、討論和爭(zhēng)議對(duì)程序進(jìn)行靜態(tài)分析的過(guò)程,以小組會(huì)的方式進(jìn)行。

      審查小組一般由若干程序員(包括程序代碼的設(shè)計(jì)者)和代碼檢查人員組成。會(huì)前把設(shè)計(jì)規(guī)格說(shuō)明書、控制流程圖、程序文本以及要求、規(guī)范、錯(cuò)誤檢查清單交給與會(huì)者,開會(huì)時(shí)程序作者朗讀解釋程序,其他人則集中精力,捕捉程序在結(jié)構(gòu)、功能、編碼風(fēng)格等方面的問(wèn)題。

      2、代碼檢查項(xiàng)

      代碼檢查項(xiàng)即檢查代碼時(shí),指定需要進(jìn)行檢查的內(nèi)容。具體如:檢查變量的交叉引用表;檢查標(biāo)號(hào)的交叉引用表;檢查子程序、宏、函數(shù);等價(jià)性檢查;標(biāo)準(zhǔn)檢查;風(fēng)格檢查;選擇、激活路徑;對(duì)照程序的規(guī)格說(shuō)明,詳細(xì)閱讀代碼,逐字逐句分析;補(bǔ)充文檔。

      檢查項(xiàng)可以作為依據(jù),用來(lái)編制代碼規(guī)則、規(guī)范和缺陷檢查表等。

      3、編碼規(guī)范

      編碼規(guī)范是程序編寫過(guò)程中必須遵循的一套事先約定或者已經(jīng)制度化、標(biāo)準(zhǔn)化的規(guī)則集,一般會(huì)詳細(xì)的規(guī)定代碼的語(yǔ)法規(guī)則和語(yǔ)法格式。

      一個(gè)良好的編碼規(guī)范能夠帶來(lái)許多好處:改善代碼質(zhì)量;提高開發(fā)進(jìn)度;增進(jìn)團(tuán)隊(duì)精神。對(duì)于軟件開發(fā)而言,采用好的編程規(guī)范,雖然不能徹底杜絕糟糕的代碼產(chǎn)生。但對(duì)于代碼檢查和將來(lái)的代碼維護(hù),仍然是意義重大的。

      4、缺陷檢查表

      在進(jìn)行人工代碼檢查時(shí),使用代碼缺陷檢查表作為代碼檢查的參考依據(jù)。在軟件測(cè)試項(xiàng)目實(shí)踐中代碼缺陷檢查表又常被稱作代碼檢查清單。

      代碼缺陷檢查表中一般包括開發(fā)人員容易出錯(cuò)的地方和在以往的工作中遇到的典型錯(cuò)誤。對(duì)應(yīng)于不同的編程語(yǔ)言,代碼缺陷檢查表的具體內(nèi)容將會(huì)有所不同。例如:對(duì)于C/C++語(yǔ)言代碼缺陷檢查表內(nèi)容有以下幾部分:文件結(jié)構(gòu);文件的版式;命名規(guī)則;表達(dá)式與基本語(yǔ)句;常量;函數(shù)設(shè)計(jì);內(nèi)存管理;C++函數(shù)的高級(jí)特性;類的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù);類的高級(jí)特性;其他的常見問(wèn)題等。

      5、代碼檢查規(guī)則

      在代碼檢查中,需要依據(jù)被測(cè)軟件的特點(diǎn),選用適當(dāng)?shù)臉?biāo)準(zhǔn)與規(guī)范。在使用測(cè)試軟件進(jìn)行自動(dòng)化代碼檢查或輔助代碼檢查時(shí),測(cè)試工具需要內(nèi)置許多編碼規(guī)范。不同編程語(yǔ)言,對(duì)應(yīng)的檢查規(guī)范有所不同。針對(duì)與C/C++語(yǔ)言的規(guī)則有以下幾類規(guī)則:通用規(guī)則、C++編碼規(guī)則、C編碼規(guī)則、Meyers-Klaus規(guī)則以及自定義規(guī)則。使用時(shí),需要根據(jù)編程語(yǔ)言和被測(cè)程序的特點(diǎn),選擇適當(dāng)?shù)囊?guī)則進(jìn)行檢查。

      6、靜態(tài)分析

      靜態(tài)分析是不執(zhí)行程序,而分析程序代碼的過(guò)程。源代碼被靜態(tài)分析器分析之后,得到的靜態(tài)分析結(jié)果,通??梢员硎境梢豢渺o態(tài)語(yǔ)法樹。其中包含了被測(cè)項(xiàng)目源代碼的靜態(tài)結(jié)構(gòu)信息:基本代碼成分、程序結(jié)構(gòu)、語(yǔ)句結(jié)構(gòu)、類型和模板等信息。

      程序代碼靜態(tài)分析的結(jié)果能夠給代碼檢查提供幫助。

      三、代碼檢查過(guò)程

      傳統(tǒng)的代碼檢查是一種靜態(tài)檢查程序的測(cè)試方法,通常以團(tuán)隊(duì)的形式來(lái)進(jìn)行。檢查團(tuán)隊(duì)由程序作者,一個(gè)負(fù)責(zé)人,一個(gè)記錄員以及一些檢查員組成。首先需要一系列的準(zhǔn)備工作,包括參與者的挑選和材料的準(zhǔn)備。然后是個(gè)人準(zhǔn)備階段,每個(gè)小組成員各自熟悉材料。個(gè)人準(zhǔn)備階段后,就是實(shí)際的檢查會(huì)議。在會(huì)議上,檢查小組在假想的輸入下,由程序作者帶領(lǐng),逐行的瀏覽代碼,評(píng)審代碼中潛在的缺陷。檢查小組根據(jù)發(fā)現(xiàn)缺陷的嚴(yán)重程度和類型對(duì)其進(jìn)行分類,并將問(wèn)題記錄下來(lái)供作者修正。會(huì)議后是作者的返工,作者匯報(bào)每個(gè)缺陷,最后確認(rèn)每個(gè)缺陷已經(jīng)被陳述過(guò)了。圖 11為傳統(tǒng)的代碼檢查過(guò)程。

      圖 1 代碼檢查過(guò)程示意圖

      代碼檢查過(guò)程中的兩個(gè)重要階段“個(gè)人準(zhǔn)備”和“召開會(huì)議”階段有以下注意事項(xiàng):

      1、“個(gè)人準(zhǔn)備”階段:

      會(huì)前準(zhǔn)備階段是檢查過(guò)程的一個(gè)關(guān)鍵階段,因?yàn)槿绻麢z查者沒有為檢查做好充分的準(zhǔn)備,檢查效果會(huì)大打折扣。如果有檢查人員沒有做好準(zhǔn)備,主審員可取消其代碼檢查資格,甚至取消這次檢查會(huì)議。

      檢查人員要熟悉檢查內(nèi)容的相關(guān)文檔,了解程序背景、設(shè)計(jì)思想和編程方法,在讀懂、“吃”透代碼的基礎(chǔ)上,查出盡可能多的錯(cuò)誤。

      2、“召開會(huì)議”階段:

      參與會(huì)議的檢查者應(yīng)具有一定的專業(yè)技能和經(jīng)驗(yàn),缺乏經(jīng)驗(yàn)的檢查人員必然缺乏合適的領(lǐng)域知識(shí)來(lái)深入理解材料;

      參與會(huì)議的檢查者應(yīng)做充分的個(gè)人準(zhǔn)備,沒有做充分準(zhǔn)備的檢查人員不能在檢查會(huì)中做出實(shí)質(zhì)性的貢獻(xiàn);

      檢查會(huì)議的速度應(yīng)進(jìn)行控制,如果試圖在短時(shí)間內(nèi)處理太多的材料,檢查效果也會(huì)大打折扣。現(xiàn)在較為常見的代碼檢查速度上的建議為:匯編代碼150行/小時(shí),C語(yǔ)言150行/小時(shí),而對(duì)于C++、Java這種面向?qū)ο笳Z(yǔ)言,代碼檢查速度可以提高到200-300行/小時(shí)。

      由此可見,代碼檢查適合于采用工具輔助的特性有:文檔處理,個(gè)人準(zhǔn)備,會(huì)議支持,數(shù)據(jù)收集。

      文檔處理

      這是工具可支持的最明顯的領(lǐng)域。傳統(tǒng)的檢查要求分發(fā)每份文檔的復(fù)印件等,而將紙質(zhì)的文檔替換成計(jì)算機(jī)式的文檔,不只是簡(jiǎn)單的介質(zhì)變更,更是提供了一種契機(jī)——提高文檔的可用性和表示性的機(jī)遇。

      個(gè)人準(zhǔn)備

      首先,自動(dòng)的缺陷檢測(cè)可以用來(lái)發(fā)現(xiàn)簡(jiǎn)單的缺陷。如果簡(jiǎn)單問(wèn)題能被自動(dòng)發(fā)現(xiàn),檢查員就能專注于更加復(fù)雜/困難的缺陷,以及那些不能被自動(dòng)發(fā)現(xiàn)的、潛在的、可能帶來(lái)更大影響的問(wèn)題。另外,自動(dòng)化工具應(yīng)該對(duì)個(gè)人準(zhǔn)備階段提供更多的幫助。例如,檢查員可以利用檢查表以及其它支持文檔,并能很容易地交叉引用它們;還有些代碼輔助理解工具,可為檢查員理解程序、了解程序結(jié)構(gòu)提供幫助。? 會(huì)議支持

      一些成員由于某些原因,可能沒有花費(fèi)足夠的時(shí)間來(lái)進(jìn)行準(zhǔn)備,但他們?nèi)匀粎⒓訒?huì)議并試圖掩蓋他們的過(guò)失。項(xiàng)目管理人員可以使用計(jì)算機(jī)監(jiān)控的個(gè)人準(zhǔn)備時(shí)間信息,來(lái)剔除那些沒有做好個(gè)人準(zhǔn)備的成員,或者督促他們投入更多的努力。

      召開會(huì)議時(shí),檢查員通常面對(duì)的是一堆枯燥的程序代碼,如果在代碼之外再結(jié)合一些圖、表等便于分析、理解代碼的信息,相信檢查會(huì)議可以進(jìn)行得更加有序和高效。

      數(shù)據(jù)收集

      代碼檢查一個(gè)重要的部分就是度量信息的收集,用來(lái)提供反饋以改進(jìn)檢查過(guò)程。度量信息包括會(huì)議時(shí)間、發(fā)現(xiàn)的缺陷、檢查花費(fèi)的總時(shí)間等。根據(jù)這些數(shù)據(jù),可以來(lái)評(píng)價(jià)每一次代碼審查的質(zhì)量,進(jìn)而給出關(guān)于代碼審查的改進(jìn)建議。

      通過(guò)對(duì)檢查過(guò)程的部分階段提供計(jì)算機(jī)支持,代碼檢查可以進(jìn)行得更加有效。使用計(jì)算機(jī)來(lái)支持檢查過(guò)程,可以提高效率,并增加檢查過(guò)程的嚴(yán)格性。

      四、代碼檢查歷史數(shù)據(jù)

      代碼檢查中的歷史數(shù)據(jù)本質(zhì)是軟件問(wèn)題(缺陷)。按照不同的代碼檢查角度,存在多種對(duì)缺陷分類的方法。對(duì)過(guò)往發(fā)現(xiàn)的軟件問(wèn)題進(jìn)行分析,總結(jié)出今后對(duì)于類似的代碼需要按照某種規(guī)則來(lái)加以檢查,這種的規(guī)則就是檢查清單上的一條清單項(xiàng),代碼檢查清單就是大量規(guī)則的集合。此外,由于軟件問(wèn)題總是以軟件問(wèn)題報(bào)告為載體形式出現(xiàn),因此軟件問(wèn)題報(bào)告也被通俗的理解為代碼檢查歷史數(shù)據(jù)。

      下面對(duì)缺陷分類、代碼檢查清單和軟件問(wèn)題報(bào)告加以研究。

      1、缺陷分類

      關(guān)于缺陷分類存在以下幾種常見的劃分方式:

      1)按缺陷出現(xiàn)的區(qū)域分類

      這種分類方式是最常見的缺陷分類方式。按照出現(xiàn)區(qū)域?qū)⒋a缺陷劃分為變量級(jí)、屬性級(jí)、函數(shù)/方法級(jí)和類級(jí)缺陷。其中,變量級(jí)、屬性級(jí)和部分函數(shù)/方法級(jí)的缺陷,與傳統(tǒng)的面向過(guò)程編程中的缺陷分類基本一致;而多數(shù)方法級(jí)缺陷和類級(jí)缺陷,則是針對(duì)面向?qū)ο蠹夹g(shù)編程特點(diǎn)提出的。

      2)按檢測(cè)內(nèi)容分類

      分為沖突、一致性問(wèn)題兩種。

      沖突對(duì)應(yīng)于文獻(xiàn)[1]中的基于確定性“信念”的判定,而一致性問(wèn)題則對(duì)應(yīng)于基于可能性“信念”的判定。

      3)按對(duì)代碼的危害分類

      按照對(duì)代碼的危害,一般分為浪費(fèi)時(shí)間和空間;語(yǔ)義混淆;暴露封裝性,擴(kuò)大使用權(quán)限;程序一致性問(wèn)題;程序約束條件問(wèn)題和空指針問(wèn)題等。

      2、代碼檢查清單(Checklist)

      代碼檢查過(guò)程中,代碼檢查人員都會(huì)有一份代碼檢查清單。代碼檢查清單是一份為代碼檢查人員準(zhǔn)備的缺陷檢查表,檢查表中開列所有可能與代碼有關(guān)的缺陷,并注明了檢查的內(nèi)容、缺陷類型以及嚴(yán)重性。檢查清單是檢查代碼的依據(jù),代碼檢查人員根據(jù)它來(lái)發(fā)現(xiàn)并判斷問(wèn)題。代碼檢查清單中會(huì)逐條列出所有應(yīng)該檢查的缺陷種類,以及每條缺陷的各種特征,并且根據(jù)缺陷的嚴(yán)重程度和類型對(duì)其進(jìn)行分類。通常每一條缺陷的特征描述如下:

      1)缺陷描述:該缺陷的問(wèn)題描述、舉例說(shuō)明,以及相應(yīng)的正確形式;

      2)缺陷出現(xiàn)的區(qū)域:分別為表達(dá)式級(jí)、語(yǔ)句級(jí)、聲明級(jí)、模板缺陷、預(yù)處理缺陷、類級(jí)缺陷以及性能缺陷。表達(dá)式級(jí)、語(yǔ)句級(jí)、聲明級(jí)以及預(yù)處理的缺陷,主要面向過(guò)程程序中的缺陷;模板缺陷、類級(jí)缺陷,則是針對(duì)面向?qū)ο筌浖奶攸c(diǎn)提出的;代碼冗余等歸為性能缺陷;

      3)缺陷對(duì)代碼的危害:代碼中出現(xiàn)某種缺陷將會(huì)造成什么樣的影響。

      例如,檢查表中一條缺陷的特征描述如下:

      問(wèn)題描述:指針?biāo)竷?nèi)存釋放后沒有將指針賦為NULL。

      舉例說(shuō)明:

      char *p=(char *)malloc(100);strcpy(p, “hello”);free(p);//p所指的內(nèi)存被釋放,但是p所指的地址還是不變 …

      if(p!=NULL)//沒有起到防錯(cuò)的作用 { strcpy(p, “world”);//出錯(cuò) }

      正確形式:在釋放內(nèi)存的同時(shí)將指針置空。

      char *p=(char *)malloc(100);strcpy(p, “hello”);free(p);p=NULL;//增加指針置空語(yǔ)句

      if(p!=NULL){ strcpy(p, “world”);}

      出現(xiàn)區(qū)域:語(yǔ)句級(jí)。

      危害:指針被free釋放后其地址并不會(huì)自動(dòng)發(fā)生改變(非NULL),p成為了“野”指針,這種情況下再對(duì)p進(jìn)行操作,很容易造成程序崩潰,后果非常嚴(yán)重。而代碼檢查清單正是由若干條這樣的缺陷特征描述構(gòu)成的。

      3、軟件問(wèn)題報(bào)告(Software Problem Report)

      在軟件測(cè)試過(guò)程中,對(duì)于發(fā)現(xiàn)的每個(gè)軟件問(wèn)題(缺陷),都要進(jìn)行記錄該錯(cuò)誤的特征和再現(xiàn)步驟等信息,以便相關(guān)人員分析和處理軟件問(wèn)題。為了管理測(cè)試發(fā)現(xiàn)的軟件問(wèn)題,通常要采用軟件問(wèn)題報(bào)告數(shù)據(jù)庫(kù),將每一個(gè)發(fā)現(xiàn)的軟件問(wèn)題輸入到軟件問(wèn)題報(bào)告數(shù)據(jù)庫(kù)中,軟件問(wèn)題報(bào)告數(shù)據(jù)庫(kù)的每一條記錄稱為一個(gè)軟件問(wèn)題報(bào)告。

      軟件問(wèn)題報(bào)告包括頭信息、簡(jiǎn)述、操作步驟和注釋。

      頭信息包括:被測(cè)試軟件名稱、版本號(hào)、缺陷或錯(cuò)誤類型、可重復(fù)性、測(cè)試平臺(tái)、平臺(tái)語(yǔ)言、缺陷或錯(cuò)誤范圍。并要求填寫完整和準(zhǔn)確。

      簡(jiǎn)述是對(duì)缺陷或錯(cuò)誤特征的簡(jiǎn)單描述,可以使用短語(yǔ)或短句,要求簡(jiǎn)練和準(zhǔn)確。

      操作步驟是描述該缺陷或錯(cuò)誤出現(xiàn)的操作順序,要求完整、簡(jiǎn)潔和準(zhǔn)確。對(duì)命令、系統(tǒng)變量、選項(xiàng)要用大寫字母,對(duì)控件名稱等要加雙引號(hào)。

      注釋一般是對(duì)缺陷或錯(cuò)誤的附加描述,一般包括缺陷或錯(cuò)誤現(xiàn)象的圖像,包括其他建議或注釋文字。

      軟件問(wèn)題報(bào)告是軟件測(cè)試過(guò)程中最重要的文檔之一。它記錄了軟件問(wèn)題發(fā)生的環(huán)境,軟件問(wèn)題的再現(xiàn)步驟以及性質(zhì)的說(shuō)明,而且還可以跟蹤軟件問(wèn)題的處理過(guò)程和狀態(tài)。軟件問(wèn)題的處理進(jìn)程從一定角度反映了測(cè)試的進(jìn)程和被測(cè)軟件的質(zhì)量狀況及改善過(guò)程。

      五、代碼檢查規(guī)則管理的研究

      1、潛在的編碼規(guī)則和缺陷代碼模式

      潛在的編碼規(guī)則(Implicit Coding Rules)和缺陷代碼模式(Bug Code Pattern)是Tomoko MATSUMURA在文獻(xiàn)[3,4]中針對(duì)代碼檢查實(shí)踐,提出的兩個(gè)相關(guān)的概念。

      潛在的編碼規(guī)則

      潛在的編碼規(guī)則包含以下幾個(gè)特征:

      1)不同于在開發(fā)啟動(dòng)時(shí)明確決定的“編碼規(guī)范”的規(guī)則,這些規(guī)則在長(zhǎng)期的測(cè)試/維護(hù)過(guò)程中是潛伏的,對(duì)這些規(guī)則的發(fā)現(xiàn)是不可預(yù)見的。

      2)這些規(guī)則很少在設(shè)計(jì)文檔或者特定的文檔中被清楚的描述。他們通常只存在于開發(fā)人員、測(cè)試/維護(hù)人員的記憶中。換言之,是一種尚未系統(tǒng)化的經(jīng)驗(yàn)積累和總結(jié)的結(jié)果。

      3)不同于使用規(guī)范庫(kù)的公用規(guī)則。對(duì)于特定的軟件有其特定的規(guī)則,這也意味著對(duì)于不同的軟件有不同的潛在的編碼規(guī)則。

      4)由于違反潛在的編碼規(guī)則導(dǎo)致的缺陷通常情況下不是那么容易發(fā)現(xiàn)的。其中相當(dāng)多一部分只在特定的罕見的情況下發(fā)生,所以在早期要想發(fā)現(xiàn)這些問(wèn)題是很困難的。

      5)目前,還不存在好的工具或者檢查清單來(lái)發(fā)現(xiàn)違反潛在的編碼規(guī)則的代碼片段,通常的檢查工具(例如PC-Lint、Purify)和通用的檢查清單只能發(fā)現(xiàn)常見的問(wèn)題。

      6)為了減少違反潛在的編碼規(guī)則的現(xiàn)象的發(fā)生,而進(jìn)行重構(gòu)通常很困難。要重構(gòu)一個(gè)軟件,準(zhǔn)確理解代碼是非常必要的,然而,老的系統(tǒng)太復(fù)雜,并且沒有精確的文檔和了

      解系統(tǒng)的專業(yè)維護(hù)人員??傊貥?gòu)過(guò)期系統(tǒng)的代價(jià)很大,需要冒很大的風(fēng)險(xiǎn)。

      缺陷代碼模式:違反潛在的編碼規(guī)則的編碼模式。

      缺陷代碼模式不是肯定會(huì)導(dǎo)致缺陷的發(fā)生,一段符合缺陷代碼模式的代碼片段,并不意味著代碼片段一定就有缺陷,缺陷代碼模式只是疑似存在缺陷。另一方面,因?yàn)槿毕荽a模式是靜態(tài)的,沒有考慮到代碼片段之間的動(dòng)態(tài)關(guān)聯(lián)。需要代碼檢查人員或者維護(hù)人員把符合缺陷代碼模式的代碼片段提出來(lái),并判斷究竟是否存在缺陷。

      在軟件開發(fā)過(guò)程中發(fā)現(xiàn)和建立缺陷代碼模式有三條主要途徑。其一:在進(jìn)行代碼檢查過(guò)程中,代碼檢查人員發(fā)現(xiàn)一個(gè)軟件問(wèn)題的同時(shí),根據(jù)對(duì)該問(wèn)題是否具備代表性和通用性等因素的考慮,確定是否建立一個(gè)缺陷代碼模式;其二:當(dāng)軟件失效或者發(fā)生問(wèn)題,檢查對(duì)應(yīng)的代碼部分,發(fā)現(xiàn)并確定是否有潛在的編碼規(guī)范與之相關(guān);其三:分析現(xiàn)存的代碼規(guī)范和積累的大量問(wèn)題報(bào)告,從中提煉出潛在的編碼規(guī)則。

      在文獻(xiàn)[3,4]中還給我們介紹了一個(gè)代碼缺陷檢測(cè)系統(tǒng)的大致工作流程,如2所示。

      圖2 缺陷檢測(cè)模型系統(tǒng)的代碼檢查流程參考圖

      2、C++代碼檢查規(guī)則類型

      1)規(guī)則層次

      在代碼檢查工作中常常可以發(fā)現(xiàn)這樣的現(xiàn)象:有些規(guī)則能在所有的項(xiàng)目中都能發(fā)現(xiàn)問(wèn)題,另一些規(guī)則所能發(fā)現(xiàn)的問(wèn)題只存在于某類項(xiàng)目中。

      根據(jù)規(guī)則的這個(gè)特點(diǎn),如圖 33中所示,參考文獻(xiàn)[2]中將代碼檢查規(guī)則分為兩個(gè)層次:

      公共規(guī)則(General checks):用于檢查在大多數(shù)情況都有可能發(fā)生的缺陷。

      項(xiàng)目相關(guān)規(guī)則(Project specific checks):用于在項(xiàng)目中檢查可能的缺陷。

      圖 3 一個(gè)典型的代碼檢查規(guī)則清單節(jié)選圖

      在項(xiàng)目中積累了大量軟件問(wèn)題報(bào)告歷史數(shù)據(jù)的支持下,可以從中進(jìn)一步細(xì)化出與項(xiàng)目或開發(fā)人員相關(guān)的檢查規(guī)則。

      在學(xué)習(xí)任何一種計(jì)算機(jī)編程語(yǔ)言時(shí),總是按照基本數(shù)據(jù)類型->表達(dá)式->語(yǔ)句->復(fù)雜語(yǔ)句->函數(shù)->整個(gè)程序體(類)的順序逐步學(xué)習(xí)的。事實(shí)上軟件正是按照這樣的順序自下而上逐層組建起來(lái)的,代碼缺陷作為軟件編程寫時(shí)的一種異常情況,毫不例外也是按照這樣層次的構(gòu)建而成。在實(shí)際測(cè)試項(xiàng)目的代碼檢查過(guò)程中,我們發(fā)現(xiàn)在每個(gè)層次上都有可能存在潛在代碼缺陷,要找到引起軟件問(wèn)題的根源,要求在盡可能低的層次上找到引發(fā)缺陷的代碼。正因如此,非常有必要在C++語(yǔ)法的每個(gè)層次上都建立相應(yīng)的檢查元規(guī)則。

      圖4為一個(gè)代碼檢查規(guī)則體系模型圖[2],圖中展示了在代碼檢查項(xiàng)目開始前,通過(guò)逐級(jí)組合各種元規(guī)則和規(guī)則形成新的檢查規(guī)則,最后形成了初始的檢查清單。在項(xiàng)目實(shí)踐中,經(jīng)過(guò)對(duì)缺陷代碼模式的推導(dǎo),進(jìn)而得到擴(kuò)展的檢查清單。初始檢查清單和擴(kuò)展檢查清單本質(zhì)上并沒有什么區(qū)別,只是因?yàn)樾纬傻臅r(shí)間不同。

      圖4 代碼檢查規(guī)則體系模型圖

      在檢查代碼時(shí)我們有時(shí)會(huì)想要定義一個(gè)帶有否定意義的規(guī)則,如“在AA情況下如果沒有BB,則可能存在一個(gè)問(wèn)題”。這類檢查規(guī)則采用自然語(yǔ)言描述比較容易,但是要用代碼實(shí)現(xiàn)起來(lái)往往并不簡(jiǎn)單,并且對(duì)這類規(guī)則的定義和維護(hù)也比較麻煩。定義組合規(guī)則,是解決這類問(wèn)題一種變通的方法。

      下面簡(jiǎn)單介紹一下定義組合規(guī)則的原理。如圖5中所示定義三個(gè)規(guī)則,“滿足情況AA”對(duì)應(yīng)規(guī)則R1,“滿足在AA情況下出現(xiàn)BB”對(duì)應(yīng)規(guī)則R2,將滿足R1但不滿足R2(即以!符號(hào)表示)組合則對(duì)應(yīng)規(guī)則R3-“在AA情況下如果沒有BB,則可能存在一個(gè)問(wèn)題”。

      圖5 組合規(guī)則示例圖

      根據(jù)前面討論,本文將代碼檢查的規(guī)則分類設(shè)計(jì)如下:

      公共規(guī)則?

      定義針對(duì)函數(shù)體(含)以上層次的檢查規(guī)則,在這些層次上出現(xiàn)的缺陷問(wèn)題一般不容易精確到具體的代碼行。

      關(guān)鍵字規(guī)則?

      針對(duì)每個(gè)關(guān)鍵字定義的檢查規(guī)則。由于關(guān)鍵字是C++語(yǔ)法中一種最普通的元素,單獨(dú)使用關(guān)鍵字規(guī)則的意義不大,一般情況需要和語(yǔ)句、表達(dá)式規(guī)則或者復(fù)雜語(yǔ)句規(guī)則配合使用。

      語(yǔ)句/表達(dá)式規(guī)則?

      針對(duì)基本語(yǔ)句類型或基本表達(dá)式定義的規(guī)則,滿足對(duì)應(yīng)結(jié)構(gòu)的表達(dá)式,則可認(rèn)為符合了相應(yīng)的表達(dá)式規(guī)則。語(yǔ)句/表達(dá)式規(guī)則中可以包含多個(gè)關(guān)鍵字,在同一語(yǔ)句/表達(dá)式規(guī)則中包含的關(guān)鍵字地位是平等的,與檢查的先后次序無(wú)關(guān)。

      復(fù)雜語(yǔ)句塊規(guī)則?

      針對(duì)條件、開關(guān)選擇等多分支語(yǔ)句定義的規(guī)則,通常由關(guān)鍵字、語(yǔ)句/表達(dá)式進(jìn)行組合來(lái)定義復(fù)雜語(yǔ)句塊,并在定義時(shí)可以進(jìn)行嵌套,在定義復(fù)雜語(yǔ)句塊規(guī)則加入語(yǔ)句或表達(dá)式和復(fù)雜語(yǔ)句時(shí)需要考慮檢查的先后次序。

      高級(jí)組合規(guī)則?

      關(guān)鍵字規(guī)則、語(yǔ)句/表達(dá)式規(guī)則和復(fù)雜語(yǔ)句塊規(guī)則合稱為普通規(guī)則。

      對(duì)于難以使用普通規(guī)則定義方式定義的復(fù)雜語(yǔ)義,需要定義高級(jí)組合規(guī)則。定義高級(jí)組合規(guī)則可以使用上面幾種規(guī)則作為基本單元,也可以嵌套使用其它組合規(guī)則。

      圖6為一個(gè)由下至上、由多個(gè)缺陷代碼模式組合形成的組合規(guī)則結(jié)構(gòu)圖。其中{}表示某條缺陷代碼模式對(duì)應(yīng)的規(guī)則。

      圖6 組合規(guī)則結(jié)構(gòu)圖

      六、代碼分析方法

      1、靜態(tài)分析

      靜態(tài)分析主要對(duì)源代碼進(jìn)行詞法分析、語(yǔ)法分析,提取被分析程序的靜態(tài)信息,所提取的靜態(tài)信息是代碼缺陷檢測(cè)的基礎(chǔ)。靜態(tài)分析結(jié)果主要包括三部分信息:

      程序定義信息:程序定義信息包含了程序中所有的定義和聲明信息,如類定義、方法和數(shù)據(jù)成員的定義、方法內(nèi)局部變量的定義等。

      程序結(jié)構(gòu)信息:主要指方法內(nèi)的控制流信息和方法間的調(diào)用關(guān)系。靜態(tài)分析器分析程序的語(yǔ)句分支、分支間的嵌套關(guān)系和方法調(diào)用,記錄方法的控制流信息和調(diào)用信息,構(gòu)造語(yǔ)法樹。

      分支內(nèi)的變量操作:以方法控制流程中的分支為基本單元,記錄每一分支中各語(yǔ)句對(duì)各變量施加的操作和操作序列。

      2、數(shù)據(jù)流分析

      數(shù)據(jù)流分析也是一種靜態(tài)代碼檢查方法。它是在不通過(guò)計(jì)算機(jī)運(yùn)行被測(cè)程序的條件下,利用預(yù)先進(jìn)行靜態(tài)分析后獲取的信息,檢測(cè)對(duì)變量的賦值與使用操作中,是否存在不合理情況,即找出被測(cè)程序中是否存在變量在使用前未被賦值;變量在兩次賦值之間未被使用;一個(gè)變量在被賦值后是否未被使用等異常情況。

      數(shù)據(jù)流分析目前的主要用途大多局限在編譯器的實(shí)現(xiàn)和優(yōu)化技術(shù)方面,而在代碼檢查系統(tǒng)中實(shí)用的數(shù)據(jù)流分析技術(shù)并不多見,主要集中在某幾種缺陷檢測(cè)上,如賦值引用異常檢測(cè)以及內(nèi)存錯(cuò)誤檢測(cè),使用方式主要是定義數(shù)據(jù)流操作的符號(hào),使用該符號(hào)系統(tǒng)構(gòu)造數(shù)據(jù)流表達(dá)式(由數(shù)據(jù)操作符號(hào)構(gòu)成的符號(hào)串),再分析該符號(hào)串來(lái)確定是否存在代碼缺陷。

      數(shù)據(jù)流分析包括以下兩個(gè)步驟:一是分析程序的所有邏輯路徑;二是對(duì)所有邏輯路徑上的所有變量,分析其所有操作序列,然后將得到的操作序列輸入自動(dòng)機(jī)進(jìn)行分析。因此數(shù)據(jù)流分析方法不可避免的存在以下缺點(diǎn):

      1)信息量多,上面所述的數(shù)據(jù)流分析方法是一種窮舉法。事實(shí)上一個(gè)變量在大部分路徑上存在問(wèn)題的幾率并不高,因此窮舉每個(gè)變量的所有操作序列不可避免的要分析很多正確的信息,而且信息量巨大;

      2)組合爆炸,當(dāng)程序復(fù)雜度增長(zhǎng)時(shí),該分析方法的復(fù)雜度呈幾何級(jí)數(shù)增長(zhǎng),并且當(dāng)這種組合是建立在對(duì)所有邏輯路徑、所有變量的窮舉基礎(chǔ)上時(shí),如果不能找到一個(gè)非常高效的算法,數(shù)據(jù)流分析方法將是一個(gè)非常低效的方法;

      3)實(shí)用性低,上述兩點(diǎn)導(dǎo)致的數(shù)據(jù)流分析的實(shí)用性降低。

      為緩解這些的缺點(diǎn),數(shù)據(jù)流分析過(guò)程有許多改進(jìn)方法,但實(shí)現(xiàn)都具有一定難度。本系統(tǒng)中數(shù)據(jù)流分析不是重點(diǎn),采取的策略是盡可能簡(jiǎn)化數(shù)據(jù)流分析的過(guò)程,或者在可能的情況下盡量避免數(shù)據(jù)流分析。

      第五篇:代碼注釋格式

      ////////////////////////////////////////////////////////////////////////// //函數(shù)名稱: WriteFile //函數(shù)功能: 向加密鎖創(chuàng)建文件,并且向文件中寫入數(shù)據(jù),注意寫入的數(shù)據(jù)不宜過(guò)大,最好少于2k為最佳 //參數(shù)說(shuō)明: fileSize: 文件的大小,以字節(jié)為單位 // fileID: 文件在加密鎖中的ID, // fileName: 文件在加密鎖中的名字 // fileContent: 文件內(nèi)容

      //返 回 值: 如果寫入文件成功,則返回true,如果寫入文件失敗,則返回false.//作 者: luyao ///////////////////////////////////////////////////////////////

      下載WZ職業(yè)技能代碼word格式文檔
      下載WZ職業(yè)技能代碼.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        代碼工作計(jì)劃(精選合集)

        2015年個(gè)人年度工作計(jì)劃 自從2014年年初進(jìn)入公司工作以來(lái),在公司領(lǐng)導(dǎo)的關(guān)懷和指導(dǎo)下,在公司部分同事的大力支持下,我在工作和生活上都學(xué)到了很多。 2015年公司將全面壯大,各項(xiàng)......

        中學(xué)代碼

        010407師大附中 010301西安市第一中學(xué) 010202西安市第八十三中 010527西安中學(xué) 010101西安高級(jí)中學(xué) 碑林區(qū) 學(xué)校代碼學(xué)校名稱 010101西安高級(jí)中學(xué)(重點(diǎn)) 010102西工大附中(重點(diǎn)......

        職業(yè)技能

        [$Name]的典型行為風(fēng)格,可被大致描述為是“溝通者”的類型。這種類型的人通常充滿熱情和樂(lè)觀,[$Gender]們通過(guò)人來(lái)實(shí)現(xiàn)目標(biāo)。[$Gender]們喜歡在人群中,因此不喜歡獨(dú)自工作。[$G......

        研究生專業(yè)代碼

        3.2.4 學(xué)位類別代碼 碼 201 202 203 204 205 206 207 208 209 210 211 212 213 20451 20852 20952 21051 21053 301 302 303 304 305 306 307 308 309 310 311 312 313......

        霍蘭德職業(yè)代碼

        霍蘭德職業(yè)代碼 一、 得分第一代碼對(duì)應(yīng)職業(yè) 將你測(cè)驗(yàn)得分居第一位的職業(yè)類型找出來(lái),對(duì)照下表,判斷一下自己適合的職業(yè)類型。 R(現(xiàn)實(shí)型、技能型);木匠、農(nóng)民、操作X光的技師、......

        大學(xué)畢業(yè)證書編號(hào)代碼

        大學(xué)畢業(yè)證書編號(hào)代碼 發(fā)布時(shí)間:2009-8-25 閱讀次數(shù):118 大學(xué)畢業(yè)證書編號(hào)代碼普通高校代碼學(xué)校代碼 學(xué)校名稱北京市 天津市 10001 北京大學(xué) 10055 南開大學(xué)10002 中國(guó)人民......

        部門代碼(推薦5篇)

        2012國(guó)家公務(wù)員考試部門代碼 中央黨群機(jī)關(guān) 中央國(guó)家行政機(jī)關(guān) 中央國(guó)家行政機(jī)關(guān)直屬機(jī)構(gòu)和派出機(jī)構(gòu) 國(guó)務(wù)院系統(tǒng)參照公務(wù)員法管理事業(yè)單位 中央黨群機(jī)關(guān) 部門代碼 部門......

        經(jīng)典災(zāi)難片推薦——《神秘代碼》

        經(jīng)典災(zāi)難片推薦——《神秘代碼》 1959年,美國(guó)馬塞諸塞州列辛頓威廉道斯小學(xué),該校即將迎來(lái)校慶日,小女孩露辛達(dá)?安伯利(Lara Robinson 飾)提出的創(chuàng)意為校長(zhǎng)所采納。校慶日時(shí),學(xué)生......