2013年9月16日 星期一

Round 2: Look back as a programmer

L步驟:SP1已順利解決,程式處於可執行、可驗證的狀態。儘管SP2尚未解決,我們仍可(1)決定是否程式已達要求?如是,則表示程式將被釋出且暫時不解SP2。(2)探索有無其他議題。如有,則表示進入下一輪時,我們除SP2外,有選擇其他議題的空間。

此次,讓我們以programmer的觀點來回顧程式:看程式碼。

身為programmer,你在乎的事情必然與程式有關。手邊的程式的寫法是否容易讓自己或其他programmer寫出錯誤的程式碼?程式是否容易閱讀、編輯?程式是否容易維護(新增功能、修改或拿掉既有功能)?程式是否容易測試,會不會很耗時間、且經常造成遺漏一些該測而未測的項目?

山頭很多,你得決定要攻哪一座。由於現在程式規模仍小,測試也不太難〈雖然測使用者輸入時將會費一番功夫,但我們尚未深入考慮SP2,此時尚無具體可回顧的測試項目〉。所以讓我們選擇找出容易導致自己或其他programmer犯錯的程式碼。

檢視程式,可發現向量及其維度分別以double []型態與 int型態的兩個值表達。例如,

void outputVector(double v[], int dim);

呼叫時,你必須自行關聯這兩個值,確保它們的正確性:

outputVector(u,dim_u);

如果u=[1,1]而dim_u = 3,那麼ouputVector將會應出錯誤的向量(例如[1,1,-347292697])。

同樣的問題也發生在

bool inputVector(double v[], int dim);

及它的呼叫:

cin >> dim_u;
u = new double[dim_u];
inputVector(u,dim_u);

事實上,上面程式片段的代表維度的變數 dim_u 的值可被任意(有意或無意)修改;一旦被修改,則向量及其維度一致性即遭到破壞。我們因此找到一個議題:向量及其維度應能確保一致。 

讓我們進入下一輪。

© Y C Cheng, 2013. All rights reserved.

沒有留言:

張貼留言