天天看點

總結:開發容易出Bug的代碼或操作

又有一段時間沒有發表文章了,感覺在同一個公司待久了,能寫出來的東西就少了,呵呵,大家是不是有一樣的感覺。

今天來總結一下開發常見的易引發錯誤或影響效率的東西。

開發對于懂開發的人來說其實很簡單,做開發這項工作簡直就像日常吃飯一樣熟練,但是,開發過程中,由于各種各樣的問題,例如:業務邏輯不清晰、開發人員粗心、開發人員經驗不夠、生産環境不同等等,這些問題導緻各種BUG,是需要特别重視的,下面整理了一些情況來說明問題。

svn檔案漏送出影響他人開發,這個在實際開發中出現比較頻繁.

A:漏送出檔案(自己不知道,他本地代碼編譯沒報錯)

B:擷取編譯報錯,在群裡大叫“誰的代碼,編譯不過”

…………過了半天沒有回答,去查下svn送出記錄,查出是A送出後就出問題了

B: 在QQ群裡,“@A,你送出的有問題,自己去看下”

A: 看下自己果然有檔案沒送出,趕緊把漏送出的檔案送出了,在群裡回複“可以了,再擷取下”

……然後,就ok了。

非空判斷

B2bDistributorOrderMapping distributorOrderMap = allDistributorOrder.Where(o => o.OrderId == order.OrderId).FirstOrDefault();

var amount =  distributorOrderMap.CreditAmount.GetValueOrDefault(0M);//如果distributorOrderMap為空,則必定報錯

循環内多次連續讀取資料庫-最大可能導緻資料庫伺服器cpu高

while (hasData)//每天訂單數10000的情況下

{

var orderListQuery = OrdersRepository.Entities.Where(o => o.CheckInDate <= usedDate && (o.FinanceReceiptDate >= usedDate || o.CheckOutDate >= usedDate) && o.CancelStatus != (int)OrderCancelStatusEnum.OrderCanceled && o.OrderStatusId == audited);

if (loopCount == 0) order = orderListQuery.OrderBy(o => o.OrderId).FirstOrDefault();

else order = orderListQuery.OrderBy(o => o.OrderId).Skip(loopCount).FirstOrDefault();

if (order == null) hasData = false;

else hasData = true;

loopCount++;

}

邏輯不嚴謹-粗心導緻

//正确代碼

if(a==1) return 100;

else return 0;

//錯誤代碼

var retVal;

if(a==1) retVal=100;

retVal = 0;

return retVal;

測試代碼寫死臨時本地配置(如:192.168.9.220)被誤送出,本地測試沒問題,一發到線上就報錯

索引超出範圍報錯

如:

var a=new int[2]{0,1};//兩個元素,下标為0,1

Var b=a[2];//取下标為2的元素,報錯

資料庫基礎資料或網站配置不同

比如:

測試環境資料庫加了個字段線上忘記加,或本地config配置檔案加、改配置,線上忘記改,造成各種報錯,也是最常見的錯誤。

進階問題:

環境沖突,未考慮測試環境和正式環境

測試環境上傳檔案用cdn傳檔案:http://cdn.xxxx.com/2016-01-01.txt

正式環境檔案也是:http://cdn.xxxx.com/2016-01-01.txt

有可能測試環境剛生成檔案,造成檔案覆寫,正式環境正好在擷取,就擷取了測試環境的同名檔案内容,造成資料錯誤。

環境不同導緻

比如,财務事務補償正常的操作流程圖:

總結:開發容易出Bug的代碼或操作

出錯情況的正常情況分析:

總結:開發容易出Bug的代碼或操作

總結:

其實有BUG也是正常的,發現後及時修複就行了,但是如果大量的BUG是因為人粗心或思維不嚴謹、遺漏等原因造成的,那就太不應該了。

是以平日裡,我們開發時必須要考慮仔細,送出前至少保證先編譯通過,那樣問題就會減少很多。