靜態代碼分析,在Windows平臺上長期受到忽視,近幾年卻變得越來越重要。靜態分析重新獲得關注,始于一款Microsoft內部的工具——
FX Cop,由于它非常受歡迎,所以微軟將其公開發布。在Visual Studio 2005中,FX Cop作為Visual
Studio團隊開發版的一部分集成到該IDE中。
帶有附加功能或免除單元測試需要的第二代工具正在研發當中,包括.NET4的Code Contracts和自主研發的NStatic。
托管代碼并不是唯一獲得關注的領域。Ubitsoft公司正對T-SQL應用相同的技術。隨著數據庫增長,封裝在T-SQL中的業務邏輯數量變化相當明顯,有時候甚至在重要性方面勝過普通代碼。要協助管理這一情況,Ubitsoft公司創建了SQL Enlight。我們就此和他們的開發主管Iliyan Stoyanov進行了溝通。
這是個相當新穎的產品,你可以給我們一些關于SQL Enlight如何誕生的背景嗎?
我們設計SQL Enlight作為T-SQL管理和反射工具,但由于我們需要更多的時間來實現心中的所有想法,所以決定先發布T-SQL重格式化功能,稍后逐步來添加新功能。
你決定對Transact-SQL腳本分析提供支持是基于哪一點考慮呢?
從本項目開始,該分析功能就是我們其中一個目標,但我們決定推遲它的發布,直到我們完成T-SQL語法分析器擴展為止,它支持新的SQL Sever 2005 T-SQL語法。
你如何決定給分析添加哪些規則呢?
我們實現的分析規則基本上來自互聯網找到的提示和實踐,或者來自SQL Enlight用戶提交給我們的分析規則請求。
你們的技術支持提到過你正研發一個新版本,它會對整個數據庫進行分析??梢越o我提供一些關于它的信息嗎?
是的。我們正研發新的1.6版本,它將是我們SQL Enlight1.x版本的里程碑。該新版本會包含兩項重要特性——創建自定義分析規則功能和支持在數據庫上運行分析。我們也打算包含命令行工具和MsBuild任務。
SQL Enlight當前版本支持這些分析規則。
設計
- 包括NULL常量在內的相等和不等比較
- 非ANSI外部聯接語法
- 非ANSI內部聯接語法
- 過時的語法,字符串_別名=表達式
- 在執行數據操作語句(像INSERT/UPDATE/DELETE)之后,使用TRY..CATCH結構或者檢查該@@ERROR變量
- 在存儲過程、視圖和表值函數中支持SELECT *
- 使用SCOPE_IDENTITY()替換@@IDENTITY
- 支持ORDER BY子句中使用常量已經過時
- TOP子句用在不帶ORDER BY子句的查詢
- 在INSERT語句中總是使用列的列表
- 反對不帶WITH關鍵字的表提示用法
- (聚集或非聚集)索引類型未指定
- 避免使用GOTO語句來改善可讀性
- 考慮使用括號來改善可讀性和避免由于邏輯操作符的優先級導致的錯誤。
命名
- 在命名函數的時候避免使用“fn_”前綴
- 在命名存儲過程的時候避免使用“sp_”前綴
性能
- 變量@variable已聲明但從未使用
- 變量@variable已使用但之前未分配
- 變量@variable已分配但其值從未使用
- 在LIKE謂詞中以“%”開始的模式
- 考慮使用表變量來代替臨時表
- 在觸發器中避免返回結果
- 使用非常小的變量長度類型(大小為1或者2)
- 在存儲過程和觸發器中使用“SET NOCOUNT ON”選項
- 在WHERE子句中避免使用不等操作符(<>,!=)
- 本地游標沒有關閉
- 本地游標無明確釋放
- 本地游標引用無明確釋放
- 在WHERE子句的函數中避免封裝過濾列
- 可以從WHERE子句中提取確定性函數調用,避免不必要的表掃描
- 輸入參數從未使用
- 輸出參數從未賦值
- 在WHERE子句中避免使用“NOT IN”謂詞
- 不要使用不帶聚合函數的“GROUP BY”子句
posted on 2008-12-09 09:24
墻頭草 閱讀(1179)
評論(1) 編輯 收藏 所屬分類:
業界資訊