需求也有例外

2021-08-25 18:43:02 字數 2293 閱讀 3897

需求也有例外

很多專案開發人員只重技術,不重業務,認為只要技術好,專案看看需求就可以做了,完全不主動去做任何業務準備。有的需求幾乎一看就懂,似乎很簡單,但是正確理解並不簡單,因為需求也有很多例外。

下面是乙個計算個人貸款利息的例項,多年前曾因遭客戶投訴而鬧的沸沸揚揚:

使用者需求:一年期短期貸款的到期利息按合同規定的年利率計算,提前還款按實際天數計算利息(每年按12個月計算,每月按30天計算)。

根據需求,開發人員就有以下幾種方式對利息進行計算:

方法一:(到期還款按年利率計算,提前還款按日利率計算,):

日利率=年利率/12/30=年利率/360

到期還款利息=本金*年利率

提前還款利息=本金*實際天數*日利率

方法二:(全部用日利率進行計算)

日利率=年利率/12/30=年利率/360)

到期還款利息=本金*365*日利率

提前還款利息=本金*實際天數*日利率

方法三:(到期還款按年利率計算,提前還款按日利率倒減計算):

日利率=年利率/12/30=年利率/360

到期還款利息=本金*年利率

提前還款利息=(本金*年利率)-本金*(365-實際天數)*日利率

這三種方法從需求理解上看似乎都沒問題,這就是乙個簡單的計算,結果是銀行遭到提前還款客戶的投訴,並且投訴到報社,報社到各家銀行去採訪,發現好幾家銀行都有此問題,有的提前還款比到期還款利息還多,有的到期還款利息計算也多。

我們看一下問題究竟出在哪:

客戶貸款10萬元,提前三天還款(實際天數362),當時的年利率5.31%

按方法一:

到期還款利息=100000*5.31/100=5310元

提前還款利息=100000*362*(5.31/100/360)=5339.5元

結果:提前三天還款,反而要比到期還款多付29.5元利息。

按方法二:

到期還款利息=100000*365*(5.31/100/360)=5383.75元

提前還款利息=100000*362*(5.31/100/360)=5339.5元

結果:提前還款要多付29.5元利息,就是到期還款也要多付73.75元

按方法三:

到期還款利息=100000*5.31/100=5310元

提前還款利息=100000*5.31/100-100000*3*(5.31/100/360)=5265.75元

結果:提前三天還款,比到期還款少付44.25元利息。

同乙個需求得出不同的結果,而且是錯誤的結果,其原因:

因為:日利率=年利率/360(每年按12個月計算,每月按30天計算的誤導)

實際天數計算又是按365天,(有5天的誤差)

所以:在360後提前還款就會出現明顯問題

結果:方法一和方法二因多收客戶利息遭投訴

方法三的隱性錯誤是,如果客戶在貸款1-5天時就來提前還款,利息算出來就是負數或0

正確的方法應該如下:(任何時間提前還款都沒問題)

到期還款利息=本金*年利率

日利率=年利率/365

提前還款利息=本金*日利率*實際天數

按此方法計算:

到期還款利息=100000*5.31/100=5310元

提前還款利息=100000*362*(5.31/100/365)=5266.36元

結果:提前三天還款,比到期還款少付43.64元。

看了以上的分析,就可知道出錯似乎是因為按完全按需求做而產生的,這就是需求例外,這種情況在需求中時有發生。所以乙個好的開發人員看需求決不能盲從,因為使用者只從純業務角度談需求,而我們是站在業務和技術實施的兩個角度去看需求,要從大到小,從粗到細的去分析。

對於需求判斷是否是例外,首先要看需求點是否符合邏輯(在乙個計算中,一年有的按360計算,有的按365天計算不符合邏輯),其次要看是否符合常理(提前還款多還息肯定不符合常理),只要我們真正理解了需求,那需求例外也就不會成為意外了。

PL SQL常用例外

oracle pl sql 例外處理 1 基本結構 begin 語句 exception 例外處理 when when others end 2 常用預定義例外 exception when cursor already open then ora 06511 sqlcode 6511 游標已經開啟...

例外處理 PL SQL

預定義例外 處理常見的oracle錯誤 no data found 編寫乙個塊,輸入雇員的編號,並顯示改雇員的姓名 如果雇員的編號不存在,怎樣去處理?declare v name varchar2 50 begin select ename into v name from emp where em...

PL SQL程式之例外

什麼是例外?例外是程式語言提供的一種功能,用來增強程式的健壯性和容錯性 oracle的異常處理 系統定義例外 no data found 沒有找到資料 too many rows select into語句匹配多個行 zero divide 被零除 value error 算術或轉換錯誤 timeo...