第一篇: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:無影人
412:隱士 420:俠客
421:獨(dú)行客
422:俠盜 500:管理員
510:超級管理員
全職業(yè)通用技能: 技能ID 技能名稱 5001000 速度提升 5001001 龍咆哮 5001002 快速移動
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 快速移動
冰雷法師
2201004 冰凍術(shù) 2201001 精神力 2200000 魔力吸收 2201003 緩速術(shù) 2201002 快速移動 2201005 雷電術(shù)
牧師
2301004 祝福 2301002 群體治愈 2301005 圣箭術(shù) 2301003 神之保佑 2300000 魔力吸收 2301001 快速移動
獵人
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)弓 無形箭 快速弩 精準(zhǔn)弩 終極弩
穿透箭3201003 無形箭 快速暗器 精準(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 無雙矛 1311003 無雙槍 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
無影人
4110000 4111005 4111006 4111001 4111004 凈化 巫毒術(shù) 魔法抗性 神圣祈禱 時空門 圣光 圣龍召喚 箭雨 烈火箭 貫穿箭 替身術(shù) 銀鷹召喚 箭掃射 疾風(fēng)步 升龍弩 寒冰箭 金鷹召喚 貫穿箭 替身術(shù) 弩掃射 疾風(fēng)步 藥劑精通 多重飛鏢 二段跳 聚財術(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ù)盾 斂財術(shù) 強(qiáng)化盾 穩(wěn)如泰山 磁石 寒冰掌 突進(jìn) 葵花寶典 輕舞飛揚(yáng) 勇士的意志冒險島勇士進(jìn)階斗氣 阿基里斯 突進(jìn)
萬佛歸一破圣靈之錘 連環(huán)環(huán)破 圣靈之劍 穩(wěn)如泰山 磁石
勇士的意志冒險島勇士圣域 寒冰掌 阿基里斯 穩(wěn)如泰山
1321010 靈魂助力 1321007 靈魂治愈 1320009 惡龍附身 1320008 靈魂祝福 1320006 突進(jìn)
1321000 勇士的意志 1321001 冒險島勇士 1321003 磁石 1321002 阿基里斯
火毒魔導(dǎo)師
2121008 勇士的意志 2121001 創(chuàng)世之破 2121005 冰魔獸 2121003 火鳳球
2121004 終極無限 2121002 魔法反擊 2121000 冒險島勇士 2121007 天降落星
2121006 枚杜斯之眼
冰雷魔導(dǎo)師
2221008 勇士的意志 2221001 創(chuàng)世之破 2221007 落霜冰破 2221006 鏈環(huán)閃電 2221003 冰鳳球 2221005 火魔獸 2221004 終極無限 2221002 魔法反擊 2221000 冒險島勇士
主教
2321007 光芒飛射 2321009 勇士的意志 2321003 圣龍支配 2321001 創(chuàng)世之破 2321008 圣光普照 2321005 圣靈之盾 2321004 終極無限 2321002 魔法反擊 2321000 冒險島勇士 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 集中精力 冒險島勇士 火鳳凰 火眼晶晶 暴風(fēng)箭雨 勇士的意志 刺眼箭 神弩手
飛龍沖擊波 冰鳳凰
冒險島勇士 一擊要害箭 火眼晶晶 穿透箭 勇士的意志 假動作
冒險島勇士 忍者伏擊 忍者沖擊 挑釁 暗器傷人 三連光環(huán)擊破武器用毒液 暗殺
勇士的意志 一出雙擊
4220002 假動作
4221000 冒險島勇士 4221004 忍者伏擊 4221003 挑釁 4221006 煙霧彈
4220005 武器用毒液
攻擊類技能:
hs 技能簡介級別號 與String.wz相連
req 要求其它技能級別達(dá)到x時才可加此技能
masterLevel 技能初始級別上限 4轉(zhuǎn)技能大部分為10 需要用技能書提升
mob 對怪物的影響效果(頭頂上--)
skillType 技能類型 被動1 主動輔助 2 主動攻擊式輔助 3
disable 值為1時禁止提升技能級別
invisible 技能是否可見 值為0或不存在此項(xiàng)時可見
elemAttr 攻擊屬性 f為火 其它暫且不在此添加
action 技能發(fā)動時執(zhí)行的動作 延遲由此產(chǎn)生
prop 發(fā)動幾率 有多種類型 1 被動技能發(fā)動幾率(如終極箭)2 技能特殊效果發(fā)動幾率(爆炸箭昏迷)
mastery 武器熟練度 游戲中的%是按照該值*5 如60%熟練對應(yīng)的是12
mobCount 技能攻擊數(shù)量
bulletCount 技能攻擊次數(shù)
cooltime 冷凍時間 技能連續(xù)使用的時間間隔
damage 傷害% 按照角色的攻擊值
range 攻擊長度 本處為單向攻擊長度
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可以做到碰怪無敵
eva 回避值
exp 擊殺后獲得的經(jīng)驗(yàn)值
fs 不明 常值為10
level 怪物級別
maxHP 怪物最大血值
maxMP 怪物最大魔值
MADamage 魔法攻擊
MDDamage 魔法防御
PADamage 物理攻擊 PDDamage 物理防御
speed 移動速度
undead 是否為不死系(決定著牧師是否可治療造成傷害)
怪物攻擊部分: attack(1 2 3 4)
attackAfter 攻擊效果影響時間
conMP 耗費(fèi)的魔量
knockback 擊退角色
range 攻擊影響范圍
tremble 屏幕震動(1震動 0不震動)
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 裝備要求的級別
reqLUK 裝備要求的幸運(yùn)
reqSTR 裝備要求的力量
tuc 可升級次數(shù)
knockback 擊退怪物幾率
notSale 無法出售
only 固有道具
price 出售價格(賣到店里的價格=這個價格的2分之1)
timeLimited 時間限制
tradeBlock 不可交易
equipTradeBlock 裝備后不可交易
exp 武器升級需要的武器經(jīng)驗(yàn)值
incPADMax 升級時增加的最大攻擊
incPADMin 升級時增加的最小攻擊
incMADMax 升級時增加的最大魔法攻擊
incMADMin 升級時增加的最小魔法攻擊
incDEXMax 升極時增加的最大敏捷
incDEXMin 升極時增加的最小敏捷
incSTRMax 升級時增加的最大力量
incSTRMin 升級時增加的最小力量
incLUKMax 升級時增加的最大幸運(yùn)
incLUKMin 升級時增加的最小幸運(yùn)
incINTMax 升級時增加的最大智力
incINTMin 升級時增加的最小智力
----------------------------------------------
Item.wz類
slotMax 折疊最大數(shù)量
recoveryHP 恢復(fù)HP
recoveryMP 恢復(fù)MPmcType 消耗類型
c*****umeOnPickup 拾起消耗(一揀到就自動使用)
party 全組隊(duì)恢復(fù)?
hpR HP恢復(fù)百分比
mpR MP恢復(fù)百分比
berserk 增加角色傷害%
booster 減少攻擊延遲(類似快速箭之類的)
time 持續(xù)時間
reward(獎賞)→count 獲得數(shù)量
reward(獎賞)→item 獲得的物品ID reward(獎賞)→prob 獲得的幾率(這里是萬分之X)
----------------------------------------------
Etc.wz類
物品鍛造類
catalyst 允許使用的催化劑
itemNum 制造出的數(shù)量
meso 需要的金錢
recipe(所需的材料)→count 需要的數(shù)量
recipe(所需的材料)→item 需要的材料ID
reqLevel 要求角色級別
reqSkillLevel 要求鍛造技能級別
reqItem 要求擁有的道具
---------------*****ingMob.wz類
fatigue 疲勞一定時間(估計(jì)1分鐘)內(nèi)增加的值
jump 騎上騎寵后角色的跳躍值
speed 騎上騎寵后角色的移動速度
swim 騎上騎寵后角色的游泳速度
---------------Morph.wz類
jump 變身后角色的跳躍力
speed 變身后角色的移動速度
swim 變身后角色的游泳速度
---------------Quest.wz類
nextQuest 下一個任務(wù)
exp 任務(wù)完成獎勵經(jīng)驗(yàn)
money 任務(wù)完成獎勵的金錢
npc 任務(wù)所要找的NPC
job 任務(wù)所要求的職業(yè)
count 任務(wù)所要求的物品數(shù)量
id 任務(wù)所要求的物品ID
end 任務(wù)結(jié)束時間
start 任務(wù)開始時間
interval 重復(fù)接到任務(wù)的間隔
normalAutoStart 任務(wù)自動開始
---------------Map.wz類
bgm 地圖背景音樂
cloud 云?
fieldLimit 地圖限制類型
forcedReturn 強(qiáng)制返回 999999999貌似是附近的主城或者本地圖
hideMinimap 是否隱藏迷你地圖
mapMark 地圖標(biāo)記
mobRate 怪物比例
returnMap 返回地圖
town 是否為村莊主城
version 版本?
VRBottom 地圖底部
VRLeft 地圖左邊
VRRight 地圖右邊
VRTop 地圖頂邊
地板部分
next 下一個地板
prev 上一個地板
x1 地板的左邊X x2 地板的右邊X y1 地板的上邊y y2 地板的下邊y ToolTip 提示的文本
User 地圖進(jìn)入者 這個項(xiàng)展開有對使用者攻擊的加成 幸運(yùn) 力量等 以及對武器裝備的改變 CS效
第二篇:寫給某位WZ同學(xué)的感謝信
我也不知道最近怎么會有這么多的不順心,但是我知道,不管怎么樣,只要有你在我就放心,寫給某位WZ同學(xué)的感謝信。只要告訴你,所有問題都不會再是問題。我也知道(雖然不知道為什么會有這樣的感覺)不管怎么樣,你都會在。所以,謝謝。
昨天可能真的是極限了,不知道給誰說,只想到你,如果那個短信你不回,昨天晚上可能就崩潰了。幸虧你回了,我說,幸虧你在。幸虧你在,幸虧還有你。雖然今天跟你打電話的時候,我還是沒能控制住,我知道我哭得很難聽,嗯,很難聽,但是,你在聽,我知道,所以,謝謝。
所以謝謝你,感謝有你,讓我再難過的時候都不是一個人,我知道有你分擔(dān),總會覺得莫名地放心。有的時候覺得自己真的有些自私,友情需要兩方面的付出,但我好像不停在向你索取,每次電話都是你打過來聽我抱怨,幫我分析解決問題,感謝信《寫給某位WZ同學(xué)的感謝信》。我反而沒辦法為你做同樣的事,其實(shí)你也知道我也想,只是你比我成熟,看問題也更正確,我卻做不到……所以,謝謝。
其實(shí)你可能是這個世界上除了俺爹和馬天宇之外我最喜歡的男的了,嗯,應(yīng)該是。很慶幸我們只是朋友,從來不是情侶,才可以有事情的時候毫無顧忌地告訴你,才可以大方承認(rèn)我想你,才可以在別人都誤會的時候坦然一笑,我們不是曖昧。是朋友…… 真是慶幸有你這么個朋友,每次想起你都是充滿感激的心,我知道我不夠好,不夠招人喜歡,毛病也多,你對我這么好實(shí)在是習(xí)慣了,對誰都好,是吧。但是真的很喜歡你,嗯,喜歡……
所以我電話里最后一句話是實(shí)話,我真的怕在你面前太坦白了,會招你厭,我怕你會煩我,是真的……所以你千萬不能煩我,雖然我知道我對著電話哭的聲音很難聽,但是你真的不能煩我,不能不理我。因?yàn)橐菦]有你,我不知道再有像昨天晚上的時候,我怎么熬過去……所以,謝謝親愛的,謝謝你……
最后,你要好好復(fù)習(xí),好好考試,哼哼,不要讓我擔(dān)心。
第三篇:部門代碼
部門代碼
總經(jīng)理:GMD 行政人事部:AD 技術(shù)部:TD 發(fā)展部:RDD 宣傳部:PD 策劃部:SD 工程部:ED 造價部:EC 財務(wù)部:ACD 投融資部:FD 戰(zhàn)略計(jì)劃部:SPD 招標(biāo)合約部:BCD 審計(jì)部:ADD 招商部:MD 研究院:RI 物業(yè)部:PD 后勤部:LD 資源管理部:RD
第四篇:代碼檢查
代碼檢查
摘要:代碼檢查是白盒測試的一種靜態(tài)測試方法,是眾多軟件測試方法中發(fā)現(xiàn)軟件缺陷最有效的方法之一。本文結(jié)合國內(nèi)外學(xué)者在相關(guān)領(lǐng)域的研究情況,介紹代碼檢查相關(guān)的基本概念、過程和分析方法。
關(guān)鍵字:白盒測試,代碼檢查,靜態(tài)分析,檢查規(guī)則
一、引言
按照測試時源代碼是否可見,軟件測試可以分為白盒測試和黑盒測試兩類。
白盒測試(結(jié)構(gòu)測試),即邏輯驅(qū)動的測試,是在了解程序內(nèi)部結(jié)構(gòu)的基礎(chǔ)上,對程序的邏輯結(jié)構(gòu)進(jìn)行檢查,從中獲取測試數(shù)據(jù)。白盒測試關(guān)注的是測試用例執(zhí)行的程度或覆蓋程序邏輯結(jié)構(gòu)的程度。白盒測試一般只應(yīng)用于軟件開發(fā)階段。
白盒測試,又可按照是否需要運(yùn)行程序,進(jìn)一步細(xì)分為了靜態(tài)測試和動態(tài)測試兩種。通常情況下是按照先靜態(tài)后動態(tài)測試順序來實(shí)施。其中,靜態(tài)測試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等測試內(nèi)容。靜態(tài)測試既可以由人工進(jìn)行,充分發(fā)揮人的邏輯思維優(yōu)勢,也可以借助軟件工具自動進(jìn)行。
代碼檢查是一種對程序代碼進(jìn)行靜態(tài)檢查。傳統(tǒng)的代碼檢查是通過人工閱讀代碼的方式,檢查軟件設(shè)計(jì)的正確性;用人腦模擬程序在計(jì)算機(jī)中的運(yùn)行,仔細(xì)推敲、校驗(yàn)和核實(shí)程序每一步的執(zhí)行結(jié)果,進(jìn)而判斷其執(zhí)行邏輯、控制模型、算法和使用參數(shù)與數(shù)據(jù)的正確性。
在實(shí)踐中,代碼檢查比動態(tài)測試更有效率,能找到更多的缺陷,通常能發(fā)現(xiàn)30%~70%的邏輯設(shè)計(jì)和編碼缺陷。代碼檢查非常耗費(fèi)時間,而且需要專業(yè)知識和經(jīng)驗(yàn)的積累。代碼檢查定位在編譯之后和動態(tài)測試之前進(jìn)行,在檢查前,應(yīng)準(zhǔn)備好需求描述文檔、程序設(shè)計(jì)文檔、程序的源代碼清單、代碼編碼標(biāo)準(zhǔn)和代碼缺陷檢查表等。
代碼檢查可以發(fā)現(xiàn)的軟件問題包括:聲明或引用錯誤、函數(shù)/方法參數(shù)錯誤、語句不可達(dá)錯誤、數(shù)組越界錯誤、控制流錯誤、界面錯誤和輸入/輸出錯誤等。
1、代碼檢查
代碼檢查包括桌面檢查、代碼走查和代碼審查等方式,主要檢查代碼和設(shè)計(jì)的一致性,代碼對標(biāo)準(zhǔn)地遵循、可讀性,代碼邏輯表達(dá)的正確性,代碼結(jié)構(gòu)的合理性等方面;發(fā)現(xiàn)違背程序編寫標(biāo)準(zhǔn)的問題,程序中不安全、不明確和模糊的部分,找出程序中不可移植部分、違背程序編程風(fēng)格的問題,包括變量檢查、命名和類型檢查、程序邏輯檢查、程序語法檢查和程序結(jié)構(gòu)檢查等內(nèi)容。下面對代碼檢查的三種具體方式進(jìn)行介紹。
桌面檢查
是一種傳統(tǒng)的檢查方法,由程序員檢查自己編寫的程序。程序員在程序通過編譯之后對源代碼代碼進(jìn)行分析、檢驗(yàn),并補(bǔ)充相關(guān)的文檔,目的是發(fā)現(xiàn)程序中的錯誤。
代碼走查
代碼走查就是針對代碼,在假想的輸入情況下,逐行的瀏覽代碼,走查代碼中潛在的缺陷并記錄結(jié)果的過程。
代碼走查以小組會議方式進(jìn)行,每小組3-5人。與代碼審查不同的是,走查要求與會者扮演計(jì)算機(jī)的角色讓測試用例沿被測程序的邏輯運(yùn)行,是在模擬動態(tài)測試;而代碼審查更多的是靜態(tài)測試。
代碼審查
代碼審查是由一組人通過閱讀、討論和爭議對程序進(jìn)行靜態(tài)分析的過程,以小組會的方式進(jìn)行。
審查小組一般由若干程序員(包括程序代碼的設(shè)計(jì)者)和代碼檢查人員組成。會前把設(shè)計(jì)規(guī)格說明書、控制流程圖、程序文本以及要求、規(guī)范、錯誤檢查清單交給與會者,開會時程序作者朗讀解釋程序,其他人則集中精力,捕捉程序在結(jié)構(gòu)、功能、編碼風(fēng)格等方面的問題。
2、代碼檢查項(xiàng)
代碼檢查項(xiàng)即檢查代碼時,指定需要進(jìn)行檢查的內(nèi)容。具體如:檢查變量的交叉引用表;檢查標(biāo)號的交叉引用表;檢查子程序、宏、函數(shù);等價性檢查;標(biāo)準(zhǔn)檢查;風(fēng)格檢查;選擇、激活路徑;對照程序的規(guī)格說明,詳細(xì)閱讀代碼,逐字逐句分析;補(bǔ)充文檔。
檢查項(xiàng)可以作為依據(jù),用來編制代碼規(guī)則、規(guī)范和缺陷檢查表等。
3、編碼規(guī)范
編碼規(guī)范是程序編寫過程中必須遵循的一套事先約定或者已經(jīng)制度化、標(biāo)準(zhǔn)化的規(guī)則集,一般會詳細(xì)的規(guī)定代碼的語法規(guī)則和語法格式。
一個良好的編碼規(guī)范能夠帶來許多好處:改善代碼質(zhì)量;提高開發(fā)進(jìn)度;增進(jìn)團(tuán)隊(duì)精神。對于軟件開發(fā)而言,采用好的編程規(guī)范,雖然不能徹底杜絕糟糕的代碼產(chǎn)生。但對于代碼檢查和將來的代碼維護(hù),仍然是意義重大的。
4、缺陷檢查表
在進(jìn)行人工代碼檢查時,使用代碼缺陷檢查表作為代碼檢查的參考依據(jù)。在軟件測試項(xiàng)目實(shí)踐中代碼缺陷檢查表又常被稱作代碼檢查清單。
代碼缺陷檢查表中一般包括開發(fā)人員容易出錯的地方和在以往的工作中遇到的典型錯誤。對應(yīng)于不同的編程語言,代碼缺陷檢查表的具體內(nèi)容將會有所不同。例如:對于C/C++語言代碼缺陷檢查表內(nèi)容有以下幾部分:文件結(jié)構(gòu);文件的版式;命名規(guī)則;表達(dá)式與基本語句;常量;函數(shù)設(shè)計(jì);內(nèi)存管理;C++函數(shù)的高級特性;類的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù);類的高級特性;其他的常見問題等。
5、代碼檢查規(guī)則
在代碼檢查中,需要依據(jù)被測軟件的特點(diǎn),選用適當(dāng)?shù)臉?biāo)準(zhǔn)與規(guī)范。在使用測試軟件進(jìn)行自動化代碼檢查或輔助代碼檢查時,測試工具需要內(nèi)置許多編碼規(guī)范。不同編程語言,對應(yīng)的檢查規(guī)范有所不同。針對與C/C++語言的規(guī)則有以下幾類規(guī)則:通用規(guī)則、C++編碼規(guī)則、C編碼規(guī)則、Meyers-Klaus規(guī)則以及自定義規(guī)則。使用時,需要根據(jù)編程語言和被測程序的特點(diǎn),選擇適當(dāng)?shù)囊?guī)則進(jìn)行檢查。
6、靜態(tài)分析
靜態(tài)分析是不執(zhí)行程序,而分析程序代碼的過程。源代碼被靜態(tài)分析器分析之后,得到的靜態(tài)分析結(jié)果,通常可以表示成一棵靜態(tài)語法樹。其中包含了被測項(xiàng)目源代碼的靜態(tài)結(jié)構(gòu)信息:基本代碼成分、程序結(jié)構(gòu)、語句結(jié)構(gòu)、類型和模板等信息。
程序代碼靜態(tài)分析的結(jié)果能夠給代碼檢查提供幫助。
三、代碼檢查過程
傳統(tǒng)的代碼檢查是一種靜態(tài)檢查程序的測試方法,通常以團(tuán)隊(duì)的形式來進(jìn)行。檢查團(tuán)隊(duì)由程序作者,一個負(fù)責(zé)人,一個記錄員以及一些檢查員組成。首先需要一系列的準(zhǔn)備工作,包括參與者的挑選和材料的準(zhǔn)備。然后是個人準(zhǔn)備階段,每個小組成員各自熟悉材料。個人準(zhǔn)備階段后,就是實(shí)際的檢查會議。在會議上,檢查小組在假想的輸入下,由程序作者帶領(lǐng),逐行的瀏覽代碼,評審代碼中潛在的缺陷。檢查小組根據(jù)發(fā)現(xiàn)缺陷的嚴(yán)重程度和類型對其進(jìn)行分類,并將問題記錄下來供作者修正。會議后是作者的返工,作者匯報每個缺陷,最后確認(rèn)每個缺陷已經(jīng)被陳述過了。圖 11為傳統(tǒng)的代碼檢查過程。
圖 1 代碼檢查過程示意圖
代碼檢查過程中的兩個重要階段“個人準(zhǔn)備”和“召開會議”階段有以下注意事項(xiàng):
1、“個人準(zhǔn)備”階段:
會前準(zhǔn)備階段是檢查過程的一個關(guān)鍵階段,因?yàn)槿绻麢z查者沒有為檢查做好充分的準(zhǔn)備,檢查效果會大打折扣。如果有檢查人員沒有做好準(zhǔn)備,主審員可取消其代碼檢查資格,甚至取消這次檢查會議。
檢查人員要熟悉檢查內(nèi)容的相關(guān)文檔,了解程序背景、設(shè)計(jì)思想和編程方法,在讀懂、“吃”透代碼的基礎(chǔ)上,查出盡可能多的錯誤。
2、“召開會議”階段:
參與會議的檢查者應(yīng)具有一定的專業(yè)技能和經(jīng)驗(yàn),缺乏經(jīng)驗(yàn)的檢查人員必然缺乏合適的領(lǐng)域知識來深入理解材料;
參與會議的檢查者應(yīng)做充分的個人準(zhǔn)備,沒有做充分準(zhǔn)備的檢查人員不能在檢查會中做出實(shí)質(zhì)性的貢獻(xiàn);
檢查會議的速度應(yīng)進(jìn)行控制,如果試圖在短時間內(nèi)處理太多的材料,檢查效果也會大打折扣。現(xiàn)在較為常見的代碼檢查速度上的建議為:匯編代碼150行/小時,C語言150行/小時,而對于C++、Java這種面向?qū)ο笳Z言,代碼檢查速度可以提高到200-300行/小時。
由此可見,代碼檢查適合于采用工具輔助的特性有:文檔處理,個人準(zhǔn)備,會議支持,數(shù)據(jù)收集。
文檔處理
這是工具可支持的最明顯的領(lǐng)域。傳統(tǒng)的檢查要求分發(fā)每份文檔的復(fù)印件等,而將紙質(zhì)的文檔替換成計(jì)算機(jī)式的文檔,不只是簡單的介質(zhì)變更,更是提供了一種契機(jī)——提高文檔的可用性和表示性的機(jī)遇。
個人準(zhǔn)備
首先,自動的缺陷檢測可以用來發(fā)現(xiàn)簡單的缺陷。如果簡單問題能被自動發(fā)現(xiàn),檢查員就能專注于更加復(fù)雜/困難的缺陷,以及那些不能被自動發(fā)現(xiàn)的、潛在的、可能帶來更大影響的問題。另外,自動化工具應(yīng)該對個人準(zhǔn)備階段提供更多的幫助。例如,檢查員可以利用檢查表以及其它支持文檔,并能很容易地交叉引用它們;還有些代碼輔助理解工具,可為檢查員理解程序、了解程序結(jié)構(gòu)提供幫助。? 會議支持
一些成員由于某些原因,可能沒有花費(fèi)足夠的時間來進(jìn)行準(zhǔn)備,但他們?nèi)匀粎⒓訒h并試圖掩蓋他們的過失。項(xiàng)目管理人員可以使用計(jì)算機(jī)監(jiān)控的個人準(zhǔn)備時間信息,來剔除那些沒有做好個人準(zhǔn)備的成員,或者督促他們投入更多的努力。
召開會議時,檢查員通常面對的是一堆枯燥的程序代碼,如果在代碼之外再結(jié)合一些圖、表等便于分析、理解代碼的信息,相信檢查會議可以進(jìn)行得更加有序和高效。
數(shù)據(jù)收集
代碼檢查一個重要的部分就是度量信息的收集,用來提供反饋以改進(jìn)檢查過程。度量信息包括會議時間、發(fā)現(xiàn)的缺陷、檢查花費(fèi)的總時間等。根據(jù)這些數(shù)據(jù),可以來評價每一次代碼審查的質(zhì)量,進(jìn)而給出關(guān)于代碼審查的改進(jìn)建議。
通過對檢查過程的部分階段提供計(jì)算機(jī)支持,代碼檢查可以進(jìn)行得更加有效。使用計(jì)算機(jī)來支持檢查過程,可以提高效率,并增加檢查過程的嚴(yán)格性。
四、代碼檢查歷史數(shù)據(jù)
代碼檢查中的歷史數(shù)據(jù)本質(zhì)是軟件問題(缺陷)。按照不同的代碼檢查角度,存在多種對缺陷分類的方法。對過往發(fā)現(xiàn)的軟件問題進(jìn)行分析,總結(jié)出今后對于類似的代碼需要按照某種規(guī)則來加以檢查,這種的規(guī)則就是檢查清單上的一條清單項(xiàng),代碼檢查清單就是大量規(guī)則的集合。此外,由于軟件問題總是以軟件問題報告為載體形式出現(xiàn),因此軟件問題報告也被通俗的理解為代碼檢查歷史數(shù)據(jù)。
下面對缺陷分類、代碼檢查清單和軟件問題報告加以研究。
1、缺陷分類
關(guān)于缺陷分類存在以下幾種常見的劃分方式:
1)按缺陷出現(xiàn)的區(qū)域分類
這種分類方式是最常見的缺陷分類方式。按照出現(xiàn)區(qū)域?qū)⒋a缺陷劃分為變量級、屬性級、函數(shù)/方法級和類級缺陷。其中,變量級、屬性級和部分函數(shù)/方法級的缺陷,與傳統(tǒng)的面向過程編程中的缺陷分類基本一致;而多數(shù)方法級缺陷和類級缺陷,則是針對面向?qū)ο蠹夹g(shù)編程特點(diǎn)提出的。
2)按檢測內(nèi)容分類
分為沖突、一致性問題兩種。
沖突對應(yīng)于文獻(xiàn)[1]中的基于確定性“信念”的判定,而一致性問題則對應(yīng)于基于可能性“信念”的判定。
3)按對代碼的危害分類
按照對代碼的危害,一般分為浪費(fèi)時間和空間;語義混淆;暴露封裝性,擴(kuò)大使用權(quán)限;程序一致性問題;程序約束條件問題和空指針問題等。
2、代碼檢查清單(Checklist)
代碼檢查過程中,代碼檢查人員都會有一份代碼檢查清單。代碼檢查清單是一份為代碼檢查人員準(zhǔn)備的缺陷檢查表,檢查表中開列所有可能與代碼有關(guān)的缺陷,并注明了檢查的內(nèi)容、缺陷類型以及嚴(yán)重性。檢查清單是檢查代碼的依據(jù),代碼檢查人員根據(jù)它來發(fā)現(xiàn)并判斷問題。代碼檢查清單中會逐條列出所有應(yīng)該檢查的缺陷種類,以及每條缺陷的各種特征,并且根據(jù)缺陷的嚴(yán)重程度和類型對其進(jìn)行分類。通常每一條缺陷的特征描述如下:
1)缺陷描述:該缺陷的問題描述、舉例說明,以及相應(yīng)的正確形式;
2)缺陷出現(xiàn)的區(qū)域:分別為表達(dá)式級、語句級、聲明級、模板缺陷、預(yù)處理缺陷、類級缺陷以及性能缺陷。表達(dá)式級、語句級、聲明級以及預(yù)處理的缺陷,主要面向過程程序中的缺陷;模板缺陷、類級缺陷,則是針對面向?qū)ο筌浖奶攸c(diǎn)提出的;代碼冗余等歸為性能缺陷;
3)缺陷對代碼的危害:代碼中出現(xiàn)某種缺陷將會造成什么樣的影響。
例如,檢查表中一條缺陷的特征描述如下:
問題描述:指針?biāo)竷?nèi)存釋放后沒有將指針賦為NULL。
舉例說明:
char *p=(char *)malloc(100);strcpy(p, “hello”);free(p);//p所指的內(nèi)存被釋放,但是p所指的地址還是不變 …
if(p!=NULL)//沒有起到防錯的作用 { strcpy(p, “world”);//出錯 }
正確形式:在釋放內(nèi)存的同時將指針置空。
char *p=(char *)malloc(100);strcpy(p, “hello”);free(p);p=NULL;//增加指針置空語句
…
if(p!=NULL){ strcpy(p, “world”);}
出現(xiàn)區(qū)域:語句級。
危害:指針被free釋放后其地址并不會自動發(fā)生改變(非NULL),p成為了“野”指針,這種情況下再對p進(jìn)行操作,很容易造成程序崩潰,后果非常嚴(yán)重。而代碼檢查清單正是由若干條這樣的缺陷特征描述構(gòu)成的。
3、軟件問題報告(Software Problem Report)
在軟件測試過程中,對于發(fā)現(xiàn)的每個軟件問題(缺陷),都要進(jìn)行記錄該錯誤的特征和再現(xiàn)步驟等信息,以便相關(guān)人員分析和處理軟件問題。為了管理測試發(fā)現(xiàn)的軟件問題,通常要采用軟件問題報告數(shù)據(jù)庫,將每一個發(fā)現(xiàn)的軟件問題輸入到軟件問題報告數(shù)據(jù)庫中,軟件問題報告數(shù)據(jù)庫的每一條記錄稱為一個軟件問題報告。
軟件問題報告包括頭信息、簡述、操作步驟和注釋。
頭信息包括:被測試軟件名稱、版本號、缺陷或錯誤類型、可重復(fù)性、測試平臺、平臺語言、缺陷或錯誤范圍。并要求填寫完整和準(zhǔn)確。
簡述是對缺陷或錯誤特征的簡單描述,可以使用短語或短句,要求簡練和準(zhǔn)確。
操作步驟是描述該缺陷或錯誤出現(xiàn)的操作順序,要求完整、簡潔和準(zhǔn)確。對命令、系統(tǒng)變量、選項(xiàng)要用大寫字母,對控件名稱等要加雙引號。
注釋一般是對缺陷或錯誤的附加描述,一般包括缺陷或錯誤現(xiàn)象的圖像,包括其他建議或注釋文字。
軟件問題報告是軟件測試過程中最重要的文檔之一。它記錄了軟件問題發(fā)生的環(huán)境,軟件問題的再現(xiàn)步驟以及性質(zhì)的說明,而且還可以跟蹤軟件問題的處理過程和狀態(tài)。軟件問題的處理進(jìn)程從一定角度反映了測試的進(jìn)程和被測軟件的質(zhì)量狀況及改善過程。
五、代碼檢查規(guī)則管理的研究
1、潛在的編碼規(guī)則和缺陷代碼模式
潛在的編碼規(guī)則(Implicit Coding Rules)和缺陷代碼模式(Bug Code Pattern)是Tomoko MATSUMURA在文獻(xiàn)[3,4]中針對代碼檢查實(shí)踐,提出的兩個相關(guān)的概念。
潛在的編碼規(guī)則
潛在的編碼規(guī)則包含以下幾個特征:
1)不同于在開發(fā)啟動時明確決定的“編碼規(guī)范”的規(guī)則,這些規(guī)則在長期的測試/維護(hù)過程中是潛伏的,對這些規(guī)則的發(fā)現(xiàn)是不可預(yù)見的。
2)這些規(guī)則很少在設(shè)計(jì)文檔或者特定的文檔中被清楚的描述。他們通常只存在于開發(fā)人員、測試/維護(hù)人員的記憶中。換言之,是一種尚未系統(tǒng)化的經(jīng)驗(yàn)積累和總結(jié)的結(jié)果。
3)不同于使用規(guī)范庫的公用規(guī)則。對于特定的軟件有其特定的規(guī)則,這也意味著對于不同的軟件有不同的潛在的編碼規(guī)則。
4)由于違反潛在的編碼規(guī)則導(dǎo)致的缺陷通常情況下不是那么容易發(fā)現(xiàn)的。其中相當(dāng)多一部分只在特定的罕見的情況下發(fā)生,所以在早期要想發(fā)現(xiàn)這些問題是很困難的。
5)目前,還不存在好的工具或者檢查清單來發(fā)現(xiàn)違反潛在的編碼規(guī)則的代碼片段,通常的檢查工具(例如PC-Lint、Purify)和通用的檢查清單只能發(fā)現(xiàn)常見的問題。
6)為了減少違反潛在的編碼規(guī)則的現(xiàn)象的發(fā)生,而進(jìn)行重構(gòu)通常很困難。要重構(gòu)一個軟件,準(zhǔn)確理解代碼是非常必要的,然而,老的系統(tǒng)太復(fù)雜,并且沒有精確的文檔和了
解系統(tǒng)的專業(yè)維護(hù)人員。總之,重構(gòu)過期系統(tǒng)的代價很大,需要冒很大的風(fēng)險。
缺陷代碼模式:違反潛在的編碼規(guī)則的編碼模式。
缺陷代碼模式不是肯定會導(dǎo)致缺陷的發(fā)生,一段符合缺陷代碼模式的代碼片段,并不意味著代碼片段一定就有缺陷,缺陷代碼模式只是疑似存在缺陷。另一方面,因?yàn)槿毕荽a模式是靜態(tài)的,沒有考慮到代碼片段之間的動態(tài)關(guān)聯(lián)。需要代碼檢查人員或者維護(hù)人員把符合缺陷代碼模式的代碼片段提出來,并判斷究竟是否存在缺陷。
在軟件開發(fā)過程中發(fā)現(xiàn)和建立缺陷代碼模式有三條主要途徑。其一:在進(jìn)行代碼檢查過程中,代碼檢查人員發(fā)現(xiàn)一個軟件問題的同時,根據(jù)對該問題是否具備代表性和通用性等因素的考慮,確定是否建立一個缺陷代碼模式;其二:當(dāng)軟件失效或者發(fā)生問題,檢查對應(yīng)的代碼部分,發(fā)現(xiàn)并確定是否有潛在的編碼規(guī)范與之相關(guān);其三:分析現(xiàn)存的代碼規(guī)范和積累的大量問題報告,從中提煉出潛在的編碼規(guī)則。
在文獻(xiàn)[3,4]中還給我們介紹了一個代碼缺陷檢測系統(tǒng)的大致工作流程,如2所示。
圖2 缺陷檢測模型系統(tǒng)的代碼檢查流程參考圖
2、C++代碼檢查規(guī)則類型
1)規(guī)則層次
在代碼檢查工作中常常可以發(fā)現(xiàn)這樣的現(xiàn)象:有些規(guī)則能在所有的項(xiàng)目中都能發(fā)現(xiàn)問題,另一些規(guī)則所能發(fā)現(xiàn)的問題只存在于某類項(xiàng)目中。
根據(jù)規(guī)則的這個特點(diǎn),如圖 33中所示,參考文獻(xiàn)[2]中將代碼檢查規(guī)則分為兩個層次:
公共規(guī)則(General checks):用于檢查在大多數(shù)情況都有可能發(fā)生的缺陷。
項(xiàng)目相關(guān)規(guī)則(Project specific checks):用于在項(xiàng)目中檢查可能的缺陷。
圖 3 一個典型的代碼檢查規(guī)則清單節(jié)選圖
在項(xiàng)目中積累了大量軟件問題報告歷史數(shù)據(jù)的支持下,可以從中進(jìn)一步細(xì)化出與項(xiàng)目或開發(fā)人員相關(guān)的檢查規(guī)則。
在學(xué)習(xí)任何一種計(jì)算機(jī)編程語言時,總是按照基本數(shù)據(jù)類型->表達(dá)式->語句->復(fù)雜語句->函數(shù)->整個程序體(類)的順序逐步學(xué)習(xí)的。事實(shí)上軟件正是按照這樣的順序自下而上逐層組建起來的,代碼缺陷作為軟件編程寫時的一種異常情況,毫不例外也是按照這樣層次的構(gòu)建而成。在實(shí)際測試項(xiàng)目的代碼檢查過程中,我們發(fā)現(xiàn)在每個層次上都有可能存在潛在代碼缺陷,要找到引起軟件問題的根源,要求在盡可能低的層次上找到引發(fā)缺陷的代碼。正因如此,非常有必要在C++語法的每個層次上都建立相應(yīng)的檢查元規(guī)則。
圖4為一個代碼檢查規(guī)則體系模型圖[2],圖中展示了在代碼檢查項(xiàng)目開始前,通過逐級組合各種元規(guī)則和規(guī)則形成新的檢查規(guī)則,最后形成了初始的檢查清單。在項(xiàng)目實(shí)踐中,經(jīng)過對缺陷代碼模式的推導(dǎo),進(jìn)而得到擴(kuò)展的檢查清單。初始檢查清單和擴(kuò)展檢查清單本質(zhì)上并沒有什么區(qū)別,只是因?yàn)樾纬傻臅r間不同。
圖4 代碼檢查規(guī)則體系模型圖
在檢查代碼時我們有時會想要定義一個帶有否定意義的規(guī)則,如“在AA情況下如果沒有BB,則可能存在一個問題”。這類檢查規(guī)則采用自然語言描述比較容易,但是要用代碼實(shí)現(xiàn)起來往往并不簡單,并且對這類規(guī)則的定義和維護(hù)也比較麻煩。定義組合規(guī)則,是解決這類問題一種變通的方法。
下面簡單介紹一下定義組合規(guī)則的原理。如圖5中所示定義三個規(guī)則,“滿足情況AA”對應(yīng)規(guī)則R1,“滿足在AA情況下出現(xiàn)BB”對應(yīng)規(guī)則R2,將滿足R1但不滿足R2(即以!符號表示)組合則對應(yīng)規(guī)則R3-“在AA情況下如果沒有BB,則可能存在一個問題”。
圖5 組合規(guī)則示例圖
根據(jù)前面討論,本文將代碼檢查的規(guī)則分類設(shè)計(jì)如下:
公共規(guī)則?
定義針對函數(shù)體(含)以上層次的檢查規(guī)則,在這些層次上出現(xiàn)的缺陷問題一般不容易精確到具體的代碼行。
關(guān)鍵字規(guī)則?
針對每個關(guān)鍵字定義的檢查規(guī)則。由于關(guān)鍵字是C++語法中一種最普通的元素,單獨(dú)使用關(guān)鍵字規(guī)則的意義不大,一般情況需要和語句、表達(dá)式規(guī)則或者復(fù)雜語句規(guī)則配合使用。
語句/表達(dá)式規(guī)則?
針對基本語句類型或基本表達(dá)式定義的規(guī)則,滿足對應(yīng)結(jié)構(gòu)的表達(dá)式,則可認(rèn)為符合了相應(yīng)的表達(dá)式規(guī)則。語句/表達(dá)式規(guī)則中可以包含多個關(guān)鍵字,在同一語句/表達(dá)式規(guī)則中包含的關(guān)鍵字地位是平等的,與檢查的先后次序無關(guān)。
復(fù)雜語句塊規(guī)則?
針對條件、開關(guān)選擇等多分支語句定義的規(guī)則,通常由關(guān)鍵字、語句/表達(dá)式進(jìn)行組合來定義復(fù)雜語句塊,并在定義時可以進(jìn)行嵌套,在定義復(fù)雜語句塊規(guī)則加入語句或表達(dá)式和復(fù)雜語句時需要考慮檢查的先后次序。
高級組合規(guī)則?
關(guān)鍵字規(guī)則、語句/表達(dá)式規(guī)則和復(fù)雜語句塊規(guī)則合稱為普通規(guī)則。
對于難以使用普通規(guī)則定義方式定義的復(fù)雜語義,需要定義高級組合規(guī)則。定義高級組合規(guī)則可以使用上面幾種規(guī)則作為基本單元,也可以嵌套使用其它組合規(guī)則。
圖6為一個由下至上、由多個缺陷代碼模式組合形成的組合規(guī)則結(jié)構(gòu)圖。其中{}表示某條缺陷代碼模式對應(yīng)的規(guī)則。
圖6 組合規(guī)則結(jié)構(gòu)圖
六、代碼分析方法
1、靜態(tài)分析
靜態(tài)分析主要對源代碼進(jìn)行詞法分析、語法分析,提取被分析程序的靜態(tài)信息,所提取的靜態(tài)信息是代碼缺陷檢測的基礎(chǔ)。靜態(tài)分析結(jié)果主要包括三部分信息:
程序定義信息:程序定義信息包含了程序中所有的定義和聲明信息,如類定義、方法和數(shù)據(jù)成員的定義、方法內(nèi)局部變量的定義等。
程序結(jié)構(gòu)信息:主要指方法內(nèi)的控制流信息和方法間的調(diào)用關(guān)系。靜態(tài)分析器分析程序的語句分支、分支間的嵌套關(guān)系和方法調(diào)用,記錄方法的控制流信息和調(diào)用信息,構(gòu)造語法樹。
分支內(nèi)的變量操作:以方法控制流程中的分支為基本單元,記錄每一分支中各語句對各變量施加的操作和操作序列。
2、數(shù)據(jù)流分析
數(shù)據(jù)流分析也是一種靜態(tài)代碼檢查方法。它是在不通過計(jì)算機(jī)運(yùn)行被測程序的條件下,利用預(yù)先進(jìn)行靜態(tài)分析后獲取的信息,檢測對變量的賦值與使用操作中,是否存在不合理情況,即找出被測程序中是否存在變量在使用前未被賦值;變量在兩次賦值之間未被使用;一個變量在被賦值后是否未被使用等異常情況。
數(shù)據(jù)流分析目前的主要用途大多局限在編譯器的實(shí)現(xiàn)和優(yōu)化技術(shù)方面,而在代碼檢查系統(tǒng)中實(shí)用的數(shù)據(jù)流分析技術(shù)并不多見,主要集中在某幾種缺陷檢測上,如賦值引用異常檢測以及內(nèi)存錯誤檢測,使用方式主要是定義數(shù)據(jù)流操作的符號,使用該符號系統(tǒng)構(gòu)造數(shù)據(jù)流表達(dá)式(由數(shù)據(jù)操作符號構(gòu)成的符號串),再分析該符號串來確定是否存在代碼缺陷。
數(shù)據(jù)流分析包括以下兩個步驟:一是分析程序的所有邏輯路徑;二是對所有邏輯路徑上的所有變量,分析其所有操作序列,然后將得到的操作序列輸入自動機(jī)進(jìn)行分析。因此數(shù)據(jù)流分析方法不可避免的存在以下缺點(diǎn):
1)信息量多,上面所述的數(shù)據(jù)流分析方法是一種窮舉法。事實(shí)上一個變量在大部分路徑上存在問題的幾率并不高,因此窮舉每個變量的所有操作序列不可避免的要分析很多正確的信息,而且信息量巨大;
2)組合爆炸,當(dāng)程序復(fù)雜度增長時,該分析方法的復(fù)雜度呈幾何級數(shù)增長,并且當(dāng)這種組合是建立在對所有邏輯路徑、所有變量的窮舉基礎(chǔ)上時,如果不能找到一個非常高效的算法,數(shù)據(jù)流分析方法將是一個非常低效的方法;
3)實(shí)用性低,上述兩點(diǎn)導(dǎo)致的數(shù)據(jù)流分析的實(shí)用性降低。
為緩解這些的缺點(diǎn),數(shù)據(jù)流分析過程有許多改進(jìn)方法,但實(shí)現(xiàn)都具有一定難度。本系統(tǒng)中數(shù)據(jù)流分析不是重點(diǎn),采取的策略是盡可能簡化數(shù)據(jù)流分析的過程,或者在可能的情況下盡量避免數(shù)據(jù)流分析。
第五篇:代碼注釋格式
////////////////////////////////////////////////////////////////////////// //函數(shù)名稱: WriteFile //函數(shù)功能: 向加密鎖創(chuàng)建文件,并且向文件中寫入數(shù)據(jù),注意寫入的數(shù)據(jù)不宜過大,最好少于2k為最佳 //參數(shù)說明: fileSize: 文件的大小,以字節(jié)為單位 // fileID: 文件在加密鎖中的ID, // fileName: 文件在加密鎖中的名字 // fileContent: 文件內(nèi)容
//返 回 值: 如果寫入文件成功,則返回true,如果寫入文件失敗,則返回false.//作 者: luyao ///////////////////////////////////////////////////////////////