一、提出問題
1.樹狀遍歷式尋找問題
每個問題都不是單一存在的,它都有相關(guān)問題,猶如一棵樹一樣,主問題就是主樹桿,主問題伴隨的其他問題,就是支樹桿,以次類推。首先不要怕麻煩,每當一個問題提出,必須提出盡量多的相關(guān)新問題。提出問題的方法:順藤摸瓜。
比如:寫一個通用編輯器程序,此程序為自己或別人開發(fā)其他專業(yè)編輯器打下可靠穩(wěn)定的基礎。
1)問題:什么是通用編輯器。編輯器面向的對象應該是不確定的。
2)如果數(shù)據(jù)類型不確定,我們?nèi)绾未_定程序編寫的對象??梢耘e出一些可能的假設。假設我們將此通用編輯器用作程序源代碼編輯,那么就應該有中斷、單步執(zhí)行等設置,這導致數(shù)據(jù)不能封裝在編輯器內(nèi)部,應該由后期開發(fā)指定數(shù)據(jù)結(jié)構(gòu)。
3)如果是程序編輯器,關(guān)鍵字的特顯必不可少,所以顯示的屬性應該給出接口。
4)諸如關(guān)鍵字此類的是否還有其他需要特顯的,那么,應該注意到特顯類不僅僅是一種,程序設計時,最好抽象出特顯的方法與數(shù)據(jù)結(jié)構(gòu)(不管以后有多少不可預知的特顯內(nèi)容)??梢陨钊肟紤]特顯接口應該如何給出,才能支持任意特顯方式,它還需要哪些信息。
5)抽象特顯類時,應該舉出盡量多的可能性,綜合考慮。
6)問題:哪些內(nèi)容需要特顯。編輯器很難知道,數(shù)據(jù)類應該自己了解。所以,特顯內(nèi)容的定義必須有一個機制讓后期開發(fā)時使用。
7)問題:源代碼編輯器有自動縮排、詞法、語法分析,這些操作如何在編輯器中體現(xiàn)??紤]語法類接口。是否有收縮與展開操作,接口又如何。
8)又假設:后期要擴展成字處理程序。數(shù)據(jù)有文本、圖象、特殊公式編輯、段落概念、表格等。
9)送進編輯器的數(shù)據(jù)可能是一組含有控制字的數(shù)據(jù),問題:如何獲得讓編輯器知道不同數(shù)據(jù)的不同顯示操作。編輯器肯定無法全知,所以,干脆交給后期開發(fā)需求處理。
10)未知數(shù)據(jù)應該有:顯示方法、光標定位處理等
11)光標定位需要當前坐標,所以,必須有接口讓編輯器知道數(shù)據(jù)寬高。
12)綜合結(jié)論:應該有一個接口機制。凡特殊操作的內(nèi)容,交給后期處理,但通用編輯器應該做好數(shù)據(jù)管理和傳送的工作,而這些工作,不管哪種編輯器都需要。
首先任其深入提問,雖然問題可能多得十分復雜或凌亂,但它對即將做的系統(tǒng)設計絕對有幫助,最好把每個問題都有一個清楚的了解,千萬不要急于設計系統(tǒng)。通過這些提問和假設,就可清楚地分析我們所作的軟件應該實現(xiàn)哪些內(nèi)容,哪些內(nèi)容實現(xiàn)有難度,實現(xiàn)這些內(nèi)容的大體方法,通用編輯器能作什么。通過上列系列提問和解答,我們可以認為,通用編輯器僅僅是一個以行為基本編輯單位的編輯器摸板。編輯器不僅自己有編輯操作,同時允許外部提供特殊數(shù)據(jù)對象的編輯操作,最終實現(xiàn)文本編輯、圖形編輯、表格編輯、公式編輯一體化。數(shù)據(jù)外部實現(xiàn),將允許后期確定內(nèi)容屬性。
上述方法基本上確保了軟件有好的可靠性、擴展能力、性能、重用性和系統(tǒng)化。想高效率生產(chǎn)系列軟件,確實應該考慮的更多。
2.直接切入目標問題
直接提出軟件要完成的系列任務,通過考慮任務的實現(xiàn),羅列問題,在問題的解答過程中反思任務的需求。這樣的方法可以快速設計出軟件開發(fā)方案。
仍然以通用編輯器為例:
1)編輯對象有:文本、圖形、圖象、表格等。
2)操作有:焦點移動、增加、刪除、存取盤、選擇塊、粘貼拷貝、縮進、展開收縮、書簽、中斷設置、單步執(zhí)行標記等。操作有分文本、圖形圖象、表格等的操作編輯。
3)顯示:文本的不同字體風格顯示、圖形的顯示、圖象的顯示、表格等的顯示。
4)狀態(tài)設置:改寫插入、段落格式設置、標題控制、編輯器專業(yè)化的設置等
5)考慮各項功能的實現(xiàn)方案,發(fā)現(xiàn)問題。
6)如果有沒有考慮到的,增加進去。
7)經(jīng)過許多的方案設計,綜合考慮和
項目經(jīng)理勝任力免費測評PMQ上線啦!快來測測你排多少名吧~
http://m.opto-elec.com.cn/pmqhd/index.html