??? 我們在討論應用軟件的需求和設計的時候,常常會說:“我覺得這個需求不合理。”或者說:“按照我的經驗,這樣子設計是不合理的。”往往我們這樣說的時候,
是根據自己的經驗和直覺來判斷的。這樣的理由往往不被認同和接受,所以最終的結果可能并沒有向我們所想象的方向發展,直到最終我們得到一個教訓。
??? 為什么應用軟件的“合理性”很重要?
??? 理解應用軟件的“合理性”,對于軟件的構造者非常重要。合理性不僅是最終評價一個軟件質量的標準之一,同時還是軟件構造過程中的一個重要原則。
??? 黑格爾說:凡是合理的東西都是現實的,凡是現實的東西都是合理的(《法哲學原理》)。這里的“理”并不是指道德、法律或法則,而是指事物的本質和發展規 律。現實是指長期、穩定的現實存在,而不是偶然的現象、表象、感覺、主觀想象等等東西。對于應用軟件開發而言,現實的系統(尚未實現的系統)是合理的,而 只有目標系統成為一個合理的系統,它才會是現實的,才可以長期、穩定的存在,才可以最大限度的降低系統維護的成本。但現實卻是軟件的合理性長期得不到足夠 的重視,這給后期軟件的維護增加了很多不必要的麻煩,而這又往往是人們認識之外的。
??? 從軟件自身的發展看來,也附合一般事物的發展規律:隨著用戶對軟件的理解越來越深刻,他們提出和要求也越來越合理。但在早期軟件設計,特別是架構設計存在 不合理的情況下,一般只存在兩種結果——要么推倒重來,要么變成一堆垃圾,越來越難以維護,最終不得不被放棄。由此看來,應用軟件的合理性,特別是在應用 軟件生命周期的早期,具有至關重要的地位。
??? 從開發過程的角度來說,合理性是評價一個應用軟件的需求、設計的重要指標。我們在實際的開發過程中,總是在有意無意的使用它來衡量一個軟件需求可設計的好 壞。但是這種對合理性的應用是自發的,并不具備很大的說服力。在了解合理性的重要性之后,我們應該把對它的應用變成一種自覺的、主動的行為,有意識的去利 用它來幫助我們的應用軟件構造。
??? 需求合理性
??? 在需求階段,主要的任務的就是識別不合理的需求,并努力把合理的需求變得更加合理。
??? 對于應用軟件來說,初期的需求獲得一般是間接的。即需求分析人員通過用戶、客戶得到第一手資料,然后在這個基礎上進一步完善,逐漸形成一個完善的軟件需 求。所以需求在開始的時候主要由用戶、客戶對于現實系統的認識構成。這個時候的需求受限于用戶、客戶對現實系統的理解力,用戶、客戶對于現實系統的不正 確、不合理的認識不可避免的滲入了原始的需求中。例如,當一個工作流完成后,需要通知最初起動流程的用戶,這樣一個需求可能會被用戶認為:當一個工作流完 成時,需要流轉到最初起動流程的用戶。也就是說,用戶可能認識不到“通知”和“流轉”的區別。辨別原始需求中的不合理成份,并通過和用戶、客戶溝通來促使 其認識更加合理,是需求分析階段的重要工作內容。
??? 另外,軟件往往不僅僅是對現實系統的簡單模擬。限于現實系統手工操作的難度,很多自動化的、重復的勞動,以及對于系統數據的深加工操作,多數時候并沒有包 括在現實系統之內。在目標系統完成后,大規模自動計算的條件已經具備,喜歡思考的用戶、客戶會很快“發現”這些需求,這也是用戶、客戶對系統的認識進化的 合理結果。所以當我們考慮軟件的合理性時,應當把這些潛在的需求考慮在內。這就需要需求分析人員對系統需求進行深度挖掘,盡可能多的找到用戶、客戶的潛在 需求。
??? 我們需要理性的需求人員,憑借我們對于技術的深刻理解,來說服、引導、教育用戶和客戶。但在實際的操作過程中,并不能保證所有的說服、引導和教育都是成功 的。有些用戶相當固執,這意味著需求人員有時候不得不妥協。但妥協并不等于接受,需求人員有責任把其對不合理的需求的思考寫入需求文檔,以便在設計中還能 夠補救。
??? 設計合理性
??? 設計階段在需求階段之后,所以設計的合理性自然依賴于需求的合理性。另一方面,設計是形成目標系統模型的過程,它又依賴于計算機軟件的內容和形式。
??? 首先考慮的是設計對需求的順應。在需求合理的情況下,順應需求的設計自然也具有了和現實系統一樣的合理性。如果需求的合理性不能得到保證,則做為設計階段 不可缺少的嘗試是使設計本身具備一定的前瞻性,即設計要足夠靈活以適應將來需求的變化——在這種情況下,需求是最容易發生變化的。然而設計也不是要覆蓋所 有可能的需求變化,而是通過分析找到需求最可能合理的發展的方向,在這個方向上努力。
??? 畢竟應用軟件在形式和內容上都囿于計算機這個載體,其設計必然要適應這個世界的游戲規則。從某種意義上說,計算機軟件是人類思想動態的、模擬的存在,它是 人類思想的一種表現形式。人類對于外部世界的認識是逐日加深的,它越來越接近這個世界的本質。同時,作為人類思想形式化存在的軟件也必然需要保持同步的進 化。這種進化就是軟件存在的最基本的思想,它深刻的體現在軟件的移交和改進過程中。一直以來,從軟件設計理論中所提出的模塊化,模塊之間的高內聚、低偶 合,到做為架構師主要職責的軟件變化的控制和復雜性控制,都是這個思想的具體表現。
??? 另外,軟件運行過程中的性能、可靠性要求也是軟件合理性的一個方面。它可以被看作思想和數字空間的契合程度。當然,我們不能說一個低性能、低可靠性的應用是合理的。
??? 為什么應用軟件的“合理性”很重要?
??? 理解應用軟件的“合理性”,對于軟件的構造者非常重要。合理性不僅是最終評價一個軟件質量的標準之一,同時還是軟件構造過程中的一個重要原則。
??? 黑格爾說:凡是合理的東西都是現實的,凡是現實的東西都是合理的(《法哲學原理》)。這里的“理”并不是指道德、法律或法則,而是指事物的本質和發展規 律。現實是指長期、穩定的現實存在,而不是偶然的現象、表象、感覺、主觀想象等等東西。對于應用軟件開發而言,現實的系統(尚未實現的系統)是合理的,而 只有目標系統成為一個合理的系統,它才會是現實的,才可以長期、穩定的存在,才可以最大限度的降低系統維護的成本。但現實卻是軟件的合理性長期得不到足夠 的重視,這給后期軟件的維護增加了很多不必要的麻煩,而這又往往是人們認識之外的。
??? 從軟件自身的發展看來,也附合一般事物的發展規律:隨著用戶對軟件的理解越來越深刻,他們提出和要求也越來越合理。但在早期軟件設計,特別是架構設計存在 不合理的情況下,一般只存在兩種結果——要么推倒重來,要么變成一堆垃圾,越來越難以維護,最終不得不被放棄。由此看來,應用軟件的合理性,特別是在應用 軟件生命周期的早期,具有至關重要的地位。
??? 從開發過程的角度來說,合理性是評價一個應用軟件的需求、設計的重要指標。我們在實際的開發過程中,總是在有意無意的使用它來衡量一個軟件需求可設計的好 壞。但是這種對合理性的應用是自發的,并不具備很大的說服力。在了解合理性的重要性之后,我們應該把對它的應用變成一種自覺的、主動的行為,有意識的去利 用它來幫助我們的應用軟件構造。
??? 需求合理性
??? 在需求階段,主要的任務的就是識別不合理的需求,并努力把合理的需求變得更加合理。
??? 對于應用軟件來說,初期的需求獲得一般是間接的。即需求分析人員通過用戶、客戶得到第一手資料,然后在這個基礎上進一步完善,逐漸形成一個完善的軟件需 求。所以需求在開始的時候主要由用戶、客戶對于現實系統的認識構成。這個時候的需求受限于用戶、客戶對現實系統的理解力,用戶、客戶對于現實系統的不正 確、不合理的認識不可避免的滲入了原始的需求中。例如,當一個工作流完成后,需要通知最初起動流程的用戶,這樣一個需求可能會被用戶認為:當一個工作流完 成時,需要流轉到最初起動流程的用戶。也就是說,用戶可能認識不到“通知”和“流轉”的區別。辨別原始需求中的不合理成份,并通過和用戶、客戶溝通來促使 其認識更加合理,是需求分析階段的重要工作內容。
??? 另外,軟件往往不僅僅是對現實系統的簡單模擬。限于現實系統手工操作的難度,很多自動化的、重復的勞動,以及對于系統數據的深加工操作,多數時候并沒有包 括在現實系統之內。在目標系統完成后,大規模自動計算的條件已經具備,喜歡思考的用戶、客戶會很快“發現”這些需求,這也是用戶、客戶對系統的認識進化的 合理結果。所以當我們考慮軟件的合理性時,應當把這些潛在的需求考慮在內。這就需要需求分析人員對系統需求進行深度挖掘,盡可能多的找到用戶、客戶的潛在 需求。
??? 我們需要理性的需求人員,憑借我們對于技術的深刻理解,來說服、引導、教育用戶和客戶。但在實際的操作過程中,并不能保證所有的說服、引導和教育都是成功 的。有些用戶相當固執,這意味著需求人員有時候不得不妥協。但妥協并不等于接受,需求人員有責任把其對不合理的需求的思考寫入需求文檔,以便在設計中還能 夠補救。
??? 設計合理性
??? 設計階段在需求階段之后,所以設計的合理性自然依賴于需求的合理性。另一方面,設計是形成目標系統模型的過程,它又依賴于計算機軟件的內容和形式。
??? 首先考慮的是設計對需求的順應。在需求合理的情況下,順應需求的設計自然也具有了和現實系統一樣的合理性。如果需求的合理性不能得到保證,則做為設計階段 不可缺少的嘗試是使設計本身具備一定的前瞻性,即設計要足夠靈活以適應將來需求的變化——在這種情況下,需求是最容易發生變化的。然而設計也不是要覆蓋所 有可能的需求變化,而是通過分析找到需求最可能合理的發展的方向,在這個方向上努力。
??? 畢竟應用軟件在形式和內容上都囿于計算機這個載體,其設計必然要適應這個世界的游戲規則。從某種意義上說,計算機軟件是人類思想動態的、模擬的存在,它是 人類思想的一種表現形式。人類對于外部世界的認識是逐日加深的,它越來越接近這個世界的本質。同時,作為人類思想形式化存在的軟件也必然需要保持同步的進 化。這種進化就是軟件存在的最基本的思想,它深刻的體現在軟件的移交和改進過程中。一直以來,從軟件設計理論中所提出的模塊化,模塊之間的高內聚、低偶 合,到做為架構師主要職責的軟件變化的控制和復雜性控制,都是這個思想的具體表現。
??? 另外,軟件運行過程中的性能、可靠性要求也是軟件合理性的一個方面。它可以被看作思想和數字空間的契合程度。當然,我們不能說一個低性能、低可靠性的應用是合理的。