教你如何開發--方法論

偶然(最近這個詞用的很多)發現了一篇好文。完全是方法論的東西。也不知道是哪個牛人寫的。我覺得這篇文章完全可以指導我們平時的開發工作。

 

原文地址 : http://ee.sjtu.edu.cn:8080/os/lab1.asp

 

 

實驗指導書
() 實驗的目的和要求
    操作系統是一門實踐性很強的課程,只有把理論和實踐緊密地結合在一起,才能取得較好的學習效果。學生們通過課堂學習或自學,並在完成書本每一章後面的一些習題後,理解了操作系統的基本概念。但僅有這一方面的訓練還是很不夠的。一個普遍的規律是學生們似乎已掌握了書本內容,也能完成一些基本的習題甚至很輕鬆地通過了一些測驗,但一旦需要編制一個稍爲複雜的實用系統軟件,哪怕只有近百行的不大的程序,就會碰到很多難以克服的困難,甚至不知從何處下手。即使絞盡了腦汁,花了很多時間才編寫出來的程序,在計算機上卻怎麼也調試不出來。程序中不僅有不少平時不注意的語法錯誤,更含有一些嚴重的邏輯錯誤,改正了一個又暴露出了另一個。好多小時過去了,不少學生還坐在終端前面束手無策。即使勉強調試出了程序,但程序結構性差,效率低,也經不起較爲嚴格的測試。
    上機實驗是一種更全面更嚴格的訓練,是學習環節中的一個不可缺少的組成部分。實驗對於提高學生用學到的書本知識解決實際問題,培養實際工作所需要的動手能力,對於提高以科學理論和工程上的技術規範地開發大型、複雜、高質量的應用軟件和系統軟件具有關鍵性的作用。機器是最爲嚴厲的老師,通過上機實驗,學生可以在程序設計方法、上機操作等基本技能和科學的作風方面受到比較系統和嚴格的訓練。
    很多學生認爲上機實驗就是編寫一個程序,上機通一通。有少數學生甚至不作準備,直接在終端前“打草稿”,邊運行邊修改。這些學生以爲按實驗步驟規範地做是添了麻煩,做“文章”比編程更吃力。對以往的教學實驗中的問題分析表明,規範化的實驗步驟不但可以培養科學、正規化的工作方法和作風,爲今後設計編制複雜、龐大的應用程序和系統程序打下紮實的基礎,即使在現階段的實驗中也能有效地少犯和避免犯大錯誤,節約上機準備和上機調試時間。
    在工廠中,一個產品的開發需要經過分析、設計、製造、測試等一系列的過程,一個軟件開發的步驟與其很相似。因此上機實驗要規範化地進行,以保證實驗順利完成。
 
() 實驗步驟
    1. 問題分析
    在正式的程序設計之前首先要分析和透徹地理解問題本身,用結構化的分析方法分析問題的結構。要克服急於編程的慾望,開始時必須保證有一段時間集中精力分析軟件應當做什麼,而不是如何來做。根據問題的性質和要求構造一個滿足問題要求和限制的系統。
    結構化分析的基本方法就是“分解”和“抽象”。把一個大問題分割成若干個小問題,然後分別解決,這就是“分解”。先考慮問題的本質和功能,暫把問題的細節略去,以後再考慮實現的細節,這就是“抽象”。自頂向下逐層分解的分析體現了分解和抽象的原則,使人們不至於一下子陷入細節,這樣有助於正確地理解問題,避免走“冤枉路”。
    在結構化分析階段,學生應先畫出問題流程圖,導出系統的邏輯模型,用約定的圖型和記號,對問題進行邏輯上的模擬和描述。
    2. 結構化設計
    在導出了問題流程以後,就可以進行系統結構設計,即把問題模型轉化爲系統結構模型。這個階段的工作是將系統劃分成一個個模塊,選擇數據結構,定義在其上進行的操作,利用這些操作便可以實現系統所要求的功能。每一個操作是一個過程或函數,其對應於一個模塊,以完成系統的子功能。所有模塊應按從上向下調用的原則構成層次型的結構圖,並與問題的邏輯結構相對應。
    在結構化設計過程中要列出過程和函數間的調用關係,過程的接口部分說明,模塊之間的輸入輸出方式,模塊之間傳遞什麼數據類型,求精所得出的模塊結構圖。
    用結構化的自然語言描述模塊所要做的工作和輸入輸出。
    在把系統劃分成模塊時,要考慮以下幾個因素: 模塊內部數據聯繫度要大,模塊問的聯繫度要低,模塊儘量通過少數參數聯繫,模塊間的共享信息應儘量少。
    3. 過程設計
    即確定每個模塊的內部特徵,即怎樣做的問題。按照在前一階段規定的邏輯模塊設計程序和控制結構,使程序結構清晰、流暢。
    按照操作的要求確定數據結構及其算法。
    使用順序,選擇和循環三種基本的單入口和單出口的控制結構描述過程的內部流程,使程序的基本結構與問題的流圖結構保持一致,使程序的靜態結構與動態執行保持一致,使過程流圖易讀、易編碼、易修改。
    過程設計主要有圖形描述方法和設計語言描述方法兩種,前者有流程圖、 N-S盒圖和PAD(程序分析圖)。如採用C語言來進行程序設計,在過程設計階段可採用三個基本的控制結構和自然語言來描述程序流程,用這種方法進行過程設計,其結構與最終的程序接近,很容易進一步細化,編寫正式的語言程序。
    4. 結構化編程
    在完成了過程設計之後,就可以着手編寫C程序了。在編程時除了要求源程序的語法正確、程序邏輯無誤,還要求程序有較好的可讀性、可靠性、健壯性、可測試性和可修改性。
    結構化程序設計支持自頂向下、逐步求精的思想,採用順序、選擇和重複三種單入口、單出口基本控制語句和它們的嵌套組合來構成具有複雜層次的結構化程序,用這種方法編制出來的程序具有較好的可讀性、可靠性和可測試性。結構化編程方法嚴格限制goto語句的使用。
    (1) 結構化編程要求程序員有良好的程序設計風格,程序結構友好,層次分明,思想清晰。
    (2) 採用良好的程序書寫文體和格式,程序行按程序的層次結構合理安排縮格,使其按鋸齒形排列。程序中插入必要的空行,使邏輯結構更加清晰、易讀。
    (3) 在程序中加上必要的註釋。註釋有序言性和功能性兩類。註釋要包含程序模塊的功能、界面接口及進入及離開模塊的參數的說明、調用語句的格式。對程序中的數據結構及重要變量和一些主要語句要加以說明。一般講註釋的總量約佔全部源程序的三分之一到一半以上。註釋要在開發過程中形成,而不能在上機完成後補寫。
    (5) 選用有意義的常量、類型和變量標識符,並使這些標識符按一定的規律排列,儘量避免採用容易混淆的英文字母和數字字符作爲變量標識符,如英文字母o和數字0、英文字母I、l和數字1等。
    (6) 語句代碼要簡單,直接,清晰,不要追求奇特怪巧的“技術”。
    (7) 避免過多的循環或條件嵌套,避免複雜的條件測試。一般情況下邏輯運算“非”總令人頭痛一些。在多條件測試時,使用括號可增加條件測試的清晰性和可靠性。
    (8) 合理的對用戶友好的輸入輸出格式。交互式I/O中,輸入要有提示,並採用自由格式。輸出語句要帶有輸出值的說明,格式要整齊,美觀。
    (9) 不要修補結構不好的程序,要忍痛割愛,從新編寫。
    5. 上機調試
    一個程序輸入後,經過排除了語法錯誤,能初步地正常運行,並非大功告成了,還要對程序進行一系列的測試。測試是軟件開發中很重要的環節,學生通過上機要提高程序調試技術。測試方法有兩大類,即黑盒法和白盒法。
    採用黑盒法,測試者不關心程序內部是如何做的,只對程序的接口進行測試,檢查程序是否能得到它的“功能說明”所預期的結果。在進行黑盒法測試時,將輸入數據按“定義域”分成若干個等價類,在定義域內和定義域外各設計一組有代表性的數據對程序的行爲進行測試。程序往往在處理邊緣情況時最易犯錯誤,故檢查邊緣情況的測試最能暴露出程序中隱含的問題,測試效率也較高。一程序如在各個定義域之中和之外的邊界處運行正常的話,一般在其它部分也能正常地運行。
當採用黑盒法測試時發現了錯誤,根據程序的內部邏輯,憑經驗和直覺,用“猜錯”技巧對測試方案進行選擇和推斷,對一些認爲是可疑的、易錯的路徑進行測試。白盒法就是針對程序的各種判斷和分支語句設計多組輸入數據,對程序的執行進行跟蹤,儘量覆蓋程序的邏輯。測試時可在懷疑的部分插上標準的打印語句以顯示程序的動態行爲; 也可利用調試、排錯軟件幫助定位錯誤點,以便修改、排除。
 
    6. 整理和完成實驗報告
    按照以上步驟寫出實驗報告,包括問題分析、總體設計、過程設計、數據結構及算法思想、編程、測試步驟、測試數據、對測試中主要問題的解決方法、輸出結果。各種文檔要求在開發過程中形成,而不能在最後階段補寫(但可譽清)。爲了便於他人運行程序,最後還要寫出用戶使用說明和使用時的注意事項。
    作爲實驗報告,還應寫出通過本次實驗所獲得的經驗、心得、體會、本次實驗中存在的問題和尚待改進之處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章