第一篇:軟件工程讀后感
讀《軟件工程》有感
軟件工程學,是一門研究用工程化方法構建和維護有效的、實用的和高質(zhì)量的軟件的學科,它涉及到程序設計語言、數(shù)據(jù)庫、軟件開發(fā)工具、系統(tǒng)平臺、標準、設計模式等方面。下面是軟件工程的現(xiàn)狀:
在現(xiàn)代社會中,軟件應用于多個方面。典型的軟件比如有電子郵件,嵌入式系統(tǒng),人機界面,辦公套件,操作系統(tǒng),編譯器,數(shù)據(jù)庫,游戲等。同時,各個行業(yè)幾乎都有計算機軟件的應用,比如工業(yè),農(nóng)業(yè),銀行,航空,政府部門等。這些應用促進了經(jīng)濟和社會的發(fā)展,提高人們的工作效率,同時提升了生活質(zhì)量。
軟件工程師是對應用軟件創(chuàng)造軟件的人們的統(tǒng)稱,軟件工程師按照所處的領域不同可以分為系統(tǒng)分析員,軟件設計師,系統(tǒng)架構師,程序員,測試員等等。人們也常常用程序員來泛指各種軟件工程師。
軟件的開發(fā)到底是一門科學還是一門工程,這是一個被爭論了很久的問題。實際上,軟件開發(fā)兼有兩者的特點。但是這并不意味著它們可以被互相混淆。
很多人認為軟件工程基于計算機科學和信息科學就如傳統(tǒng)意義上的工程學之于物理和化學一樣。
在美國,大約40%的軟件工程師具有計算機科學的學位。在世界其他地方,這個比例也差不多。他們并不一定會每天使用計算機科學方面的知識,但是他們每天都會使用軟件工程方面的知識。
軟件工程是在遇到軟件危機的時候提出來的,其定義是將系統(tǒng)化的、嚴格約束的、可量化的方法應用到軟件的開發(fā)、運行和維護,即將工程化應用軟件。軟件工程研究目標是提高軟件的質(zhì)量和開發(fā)效率。目前比較受關注的5種相對并列的軟件質(zhì)量屬性分別為:正確性、健壯性、安全性、高效性、易維護性。近年來,隨著計算機網(wǎng)絡逐步成為主要的軟件運行環(huán)境,人們在質(zhì)量的基礎上更多的關注可信性。在開發(fā)效率這方面,開發(fā)人員的素質(zhì)對項目的成敗很重要,若要對實際的開發(fā)過程進行量化的話,則比較困難。不同于傳統(tǒng)的一些工程項目,軟件工程中的部署環(huán)節(jié)所占的比重較小。在拿到一個軟件項目之后,需要對該項目進行總體分析后,選擇合適的開發(fā)過程模型、開發(fā)方法、質(zhì)量度量方法和具體的開發(fā)環(huán)境。主要的開發(fā)模型包括:瀑布模型、迭代模型、螺旋模型以及第四代模型等。開發(fā)方法有:結構化方法、面向數(shù)據(jù)結構方法、面向?qū)ο蠓椒ê蜆嫾椒ā?/p>
作為一門學科,軟件工程至今仍然處于快速的成長時期,以下四方面是推動軟件向前發(fā)展的主要力量:
1、更符合人類思維模式的軟件模型。
2、支持高效高質(zhì)量的軟件開發(fā)。
3、支持高效能、高可靠、易管理的軟件運行。
4、更全面、有指導意義的質(zhì)量評價。
軟件到底還是人類智力的產(chǎn)物,不是一種客觀存在,且至今軟件形態(tài)仍處在不斷演化的過程中,其上述的特點使得軟件的研究面臨著許多和傳統(tǒng)學科不同的挑戰(zhàn),包括技術上的挑戰(zhàn)、研究方法上的挑戰(zhàn)和學科基礎的挑戰(zhàn)。互聯(lián)網(wǎng)和通信設備的發(fā)展,淡化了地獄對軟件開發(fā)的影響,使得全球化的軟件開發(fā)成為了可能。全球化的軟件開發(fā),有效的利用了各地區(qū)的資源,將軟件項目分解并把任務分配給各地區(qū)完成,進而提高了軟件開發(fā)的效率,降低了軟件項目的開發(fā)成本。但其存在的問題是存在著跨地域之間的協(xié)調(diào)障礙。具體表現(xiàn)在:有效溝通少、成員狀態(tài)不透明、開發(fā)過程工具等不兼容。目前,全球化的軟件開發(fā)日益成為軟件領
域關注的焦點之一。在網(wǎng)絡的協(xié)同式開發(fā)方面,國內(nèi)有學者踢出了“群體軟件工程”的概念:云計算和網(wǎng)聯(lián)網(wǎng)的發(fā)展衍生了超量的信息系統(tǒng)。群體軟件工程的開發(fā)原則:使用者即設計者,使用者即開發(fā)者,使用者即維護者。自從云計算出現(xiàn)后,大量的軟件將運行在集中的服務器上,這樣就給軟件工程帶來了新的發(fā)展機遇。在云計算的模式下,可以獲取到軟件運行狀況的信息,可以獲取到用戶的行為,獲取開發(fā)人員的行為。隨著運行平臺和使用模式的發(fā)展,新形態(tài)的軟件也在不斷出現(xiàn)。對不同類型的軟件,既要探求其共性的方法,又要分別研究各自特點,尋找到適合具體類型軟件的方法,總的來說,目前軟件工程領域的發(fā)展有限,需要進一步的去探索。
第二篇:軟件工程進展的讀后感
數(shù)據(jù)庫新技術
學院名稱:信息科學與工程學院
專業(yè):
班級:
學號:
姓名:
軟件工程信研1212106409沈田予
軟件工程進展的讀后感
軟件工程是在遇到軟件危機的時候提出來的,其定義是將系統(tǒng)化的、嚴格約束的、可量化的方法應用到軟件的開發(fā)、運行和維護,即將工程化應用軟件。軟件工程研究目標是提高軟件的質(zhì)量和開發(fā)效率。目前比較受關注的5種相對并列的軟件質(zhì)量屬性分別為:正確性、健壯性、安全性、高效性、易維護性。近年來,隨著計算機網(wǎng)絡逐步成為主要的軟件運行環(huán)境,人們在質(zhì)量的基礎上更多的關注可信性。在開發(fā)效率這方面,開發(fā)人員的素質(zhì)對項目的成敗很重要,若要對實際的開發(fā)過程進行量化的話,則比較困難。不同于傳統(tǒng)的一些工程項目,軟件工程中的部署環(huán)節(jié)所占的比重較小。在拿到一個軟件項目之后,需要對該項目進行總體分析后,選擇合適的開發(fā)過程模型、開發(fā)方法、質(zhì)量度量方法和具體的開發(fā)環(huán)境。主要的開發(fā)模型包括:瀑布模型、迭代模型、螺旋模型以及第四代模型等。開發(fā)方法有:結構化方法、面向數(shù)據(jù)結構方法、面向?qū)ο蠓椒ê蜆嫾椒ā嫾潜葘ο蟾蟮能浖嶓w。軟件度量的作用則是依靠對軟件的分析,發(fā)現(xiàn)其中的缺陷,予以消除。一般有靜態(tài)分析和動態(tài)分析,之間的區(qū)別為是否運行軟件。軟件工程的進步離不開計算機輔助工具和相應的環(huán)境。最近人們對基本的開發(fā)方法的關注度有所下降,更多的關注特定的軟件開發(fā)方法。例如敏捷方法、模型驅(qū)動方法、面向服務的方法。敏捷方法顧名思義就是在幾周或者幾個月的時間內(nèi)完成相對較小的功能。模型驅(qū)動則是在給定的平臺上轉(zhuǎn)換模型,盡可能的生成更多的代碼。服務的方法強調(diào)的是軟件實體的外在表現(xiàn),現(xiàn)在這種方法還沒完全成型。對應軟件庫的復用,需要的則是具體的API的使用規(guī)則。軟件質(zhì)量保障的主要方法包括靜態(tài)缺陷查找、測試、修復、檢測等。在動態(tài)測試方面,有兩個較大影響力的基本動態(tài)符號執(zhí)行的工具:針對基于.NET程序的通用測試工具Pex,以及針對二進制碼形式的程序安全測試工具SAGE。20世紀90年代后,提出的一系列自動和半自動恢復軟件特征和軟件實現(xiàn)代碼間的追蹤關系的技術,降低了軟件維護的負擔,主要包含兩種技術路線:①以可視化的方式展示實現(xiàn)代碼中的多種依賴關系,讓維護人員通過瀏覽這些依賴關系確定追蹤關系。②通過實際執(zhí)行和信息檢索等技術獲取軟件特征和軟件實現(xiàn)代碼間的初步聯(lián)系,進一步通過程序分析確定追蹤關系。基于數(shù)據(jù)的軟件工程旨在通過對過往軟件開發(fā)過程各個階段數(shù)據(jù)的分析和抽象,獲得并積累軟件開發(fā)知識和規(guī)律,為今后的軟件開發(fā)提供及時有效的信息和輔助開發(fā)人員進行決策判斷。大型軟件公司在這方面有大量的私有數(shù)據(jù),這些過往的數(shù)據(jù)對指導公司的決策具有重要意義,這也是產(chǎn)生基于數(shù)據(jù)軟件工程的重要動力之一,另一方面,開源世界里存在大量的公共歷史數(shù)據(jù),也為基于數(shù)據(jù)的軟件工程提供了數(shù)據(jù)基礎,進一步的促進了基于數(shù)據(jù)的軟件工程的發(fā)展。軟件工程在中國的發(fā)展,比如南京大學徐家福在80年代到90年代的研究成果有:對需要分析的自動化支持、對系統(tǒng)分析與編程的自動化支持、對元層程序轉(zhuǎn)換的自動化支持。1980年開始,中科院的唐稚松領導的團隊提出的全球第一個可執(zhí)行的時序邏輯語言XYZ/E,可以直接書寫其中自動機的狀態(tài)轉(zhuǎn)換過程。還有北京大學的楊芙清等致力開發(fā)大規(guī)模的軟件工程環(huán)境,為中國軟件企業(yè)提供了系列“青鳥”方法與產(chǎn)品。近幾年來,國內(nèi)對缺陷檢測的研究頗為熱門,這類工作的目標是自動分析出軟件中存在的缺陷,以提高軟件質(zhì)量、降低軟件維護的成本。北京大學的梅宏等重點研究了基于缺陷模式的缺陷檢測。缺陷模式指明了缺陷代碼片段的特征,缺陷檢測工具通過將受檢程序和缺陷模式進行匹配來發(fā)現(xiàn)程序中的缺陷。他們研究了如何自動地獲取這些缺陷模式,并進一步研究了如何對缺陷檢測工具報告出來的缺陷列表進行排序,以提高程序員排查缺陷的效率。隨著軟件周期的推移,軟件會在不同層次上進行演化,在軟件演化過程中,程序會隨著其所使用的框架而發(fā)生演化。這一方面,北京大學的梅宏等提出了通過分析軟件演化歷史以抽取當框架發(fā)生演化時程序自動調(diào)
整的規(guī)則。軟件的在線演化要求軟件在運行過程中進行演化,演化的動作不能影響軟件的運行。南京大學的呂健等踢出了一個分布式算法,保證了分布式系統(tǒng)演化過程中版本的一致性。代碼的合成也是研究的熱門,代碼的自動合成可以減少程序員編程的工作量。上海交大的趙建軍等踢出了一個方法,這個方法可為使用API編程的程序員自動的推薦出API使用的參數(shù)。相比較以上的研究方法,在軟件開發(fā)過程中,起主導作用的還是程序員。南京大學的榮國平等人在對軟件教育的問題上進行了研究,提出兩個學生為單位進行學習和完成作業(yè)時達到的學習效果要優(yōu)于單個學生獨自學習的效果。作為一門學科,軟件工程至今仍然處于快速的成長時期,以下四方面是推動軟件向前發(fā)展的主要力量:
1、更符合人類思維模式的軟件模型。
2、支持高效高質(zhì)量的軟件開發(fā)。
3、支持高效能、高可靠、易管理的軟件運行。
4、更全面、有指導意義的質(zhì)量評價。軟件到底還是人類智力的產(chǎn)物,不是一種客觀存在,且至今軟件形態(tài)仍處在不斷演化的過程中,其上述的特點使得軟件的研究面臨著許多和傳統(tǒng)學科不同的挑戰(zhàn),包括技術上的挑戰(zhàn)、研究方法上的挑戰(zhàn)和學科基礎的挑戰(zhàn)。互聯(lián)網(wǎng)和通信設備的發(fā)展,淡化了地獄對軟件開發(fā)的影響,使得全球化的軟件開發(fā)成為了可能。全球化的軟件開發(fā),有效的利用了各地區(qū)的資源,將軟件項目分解并把任務分配給各地區(qū)完成,進而提高了軟件開發(fā)的效率,降低了軟件項目的開發(fā)成本。但其存在的問題是存在著跨地域之間的協(xié)調(diào)障礙。具體表現(xiàn)在:有效溝通少、成員狀態(tài)不透明、開發(fā)過程工具等不兼容。目前,全球化的軟件開發(fā)日益成為軟件領域關注的焦點之一。在網(wǎng)絡的協(xié)同式開發(fā)方面,國內(nèi)有學者踢出了“群體軟件工程”的概念:云計算和網(wǎng)聯(lián)網(wǎng)的發(fā)展衍生了超量的信息系統(tǒng)。群體軟件工程的開發(fā)原則:使用者即設計者,使用者即開發(fā)者,使用者即維護者。自從云計算出現(xiàn)后,大量的軟件將運行在集中的服務器上,這樣就給軟件工程帶來了新的發(fā)展機遇。在云計算的模式下,可以獲取到軟件運行狀況的信息,可以獲取到用戶的行為,獲取開發(fā)人員的行為。隨著運行平臺和使用模式的發(fā)展,新形態(tài)的軟件也在不斷出現(xiàn)。對不同類型的軟件,既要探求其共性的方法,又要分別研究各自特點,尋找到適合具體類型軟件的方法,總的來說,目前軟件工程領域的發(fā)展有限,需要進一步的去探索。
第三篇:軟件工程
2.2軟件開發(fā)的基本策略
人們都有自己的世界觀和方法論,能自然而然地運用于生活和工作中。同樣,程序員腦子里的軟件工程觀念會無形地支配其怎么去做事情。軟件工程三十年的發(fā)展,已經(jīng)積累了相當多的方法,但這些方法不是嚴密的理論。實踐人員不應該教條地套用方法,更重要的是學會“選擇合適的方法”和“產(chǎn)生新方法”。有謀略才會有好的戰(zhàn)術。幾千年前,我們的祖先就在打鬧之際寫下了很多心得體會,被現(xiàn)代人很好地運用于工業(yè)和商業(yè)。本節(jié)講述軟件開發(fā)中的三種基本策略:“復用”、“分而治之”、“優(yōu)化——折衷”。
2.2.1復用
復用就是指“利用現(xiàn)成的東西”,文人稱之為“拿來主義”。被復用的對象可以是有形的物體,也可以是無形的成果。復用不是人類懶惰的表現(xiàn)而是智慧的表現(xiàn)。因為人類總是在繼承了前人的成果,不斷加以利用、改進或創(chuàng)新后才會進步。所以當我們歡度國慶時,要搞清楚祖國遠不止50歲,我們今天享用到的財富還有上下五千年人民的貢獻。進步只是應該的,不進步則就可恥了。
復用的內(nèi)涵包括了提高質(zhì)量與生產(chǎn)率兩者。由經(jīng)驗可知,在一個新系統(tǒng)中,大部分的內(nèi)容是成熟的,只有小部分內(nèi)容是創(chuàng)新的。一般地可以相信成熟的東西總是比較可靠的(即具有高質(zhì)量),而大量成熟的工作可以通過復用來快速實現(xiàn)(即具有高生產(chǎn)率)。勤勞并且聰明的人們應該把大部分的時間用在小比例的創(chuàng)新工作上,而把小部分的時間用在大比例的成熟工作中,這樣才能把工作做得又快又好。
把復用的思想用于軟件開發(fā),稱為軟件復用。據(jù)統(tǒng)計,世上已有1000億多行程序,無數(shù)功能被重寫了成千上萬次,真是浪費哪。面向?qū)ο螅∣bject Oriented)學者的口頭禪就是“請不要再發(fā)明相同的車輪子了”。
將具有一定集成度并可以重復使用的軟件組成單元稱為軟構件(Software Component)。軟件復用可以表述為:構造新的軟件系統(tǒng)可以不必每次從零做起,直接使用已有的軟構件,即可組裝(或加以合理修改)成新的系統(tǒng)。復用方法合理化并簡化了軟件開發(fā)過程,減少了總的開發(fā)工作量與維護代價,既降低了軟件的成本又提高了生產(chǎn)率。另一方面,由于軟構件是經(jīng)過反復使用驗證的,自身具有較高的質(zhì)量。因此由軟構件組成的新系統(tǒng)也具有較高的質(zhì)量。利用軟構件生產(chǎn)應用軟件的過程如圖1.5所示。
軟件復用不僅要使自己拿來方便,還要讓別人拿去方便,是“拿來拿去主義”。面向?qū)ο蠓椒ǎ琈icrosoft公司的COM規(guī)范 [Rogerson 1999],都能很好地用于實現(xiàn)大規(guī)模的軟件復用。
2.2.2分而治之
分而治之是指把一個復雜的問題分解成若干個簡單的問題,然后逐個解決。這種樸素的思想來源于人們生活與工作的經(jīng)驗,完全適合于技術領域。軟件人員在執(zhí)行分而治之的時候,應該著重考慮:復雜問題分解后,每個問題能否用程序?qū)崿F(xiàn)?所有程序最終能否集成為一個軟件系統(tǒng)并有效解決原始的復雜問題?
圖1.6表示了軟件領域的分而治之策略。諸如軟件的體系結構設計、模塊化設計都是分而治之的具體表現(xiàn)。軟件的分而治之不可以“硬分硬治”。不像為了吃一個西瓜或是一只雞,揮刀斬成n塊,再把每塊塞進嘴里粉碎攪拌,然后交由胃腸來消化吸收,象征復雜問題的西瓜或是雞也就此消失了。
2.2.3優(yōu)化——折衷
軟件的優(yōu)化是指優(yōu)化軟件的各個質(zhì)量因素,如提高運行速度,提高對內(nèi)存資源的利用率,使用戶界面更加友好,使三維圖形的真實感更強等等。想做好優(yōu)化工作,首先要讓開發(fā)人員都有正確的認識:優(yōu)化工作不是可有可無的事情,而是必須要做的事情。當優(yōu)化工作成為一種責任時,程序員才會不斷改進軟件中的算法,數(shù)據(jù)結構和程序組織,從而提高軟件質(zhì)量。
著名的3D游戲軟件Quake,能夠在PC機上實時地繪制高度真實感的復雜場景。Quake的開發(fā)者能把很多成熟的圖形技術發(fā)揮到極致,例如把Bresenham畫線、多邊形裁剪、樹遍歷等算法的速度提高近一個數(shù)量級。我第一次看到Quake時不僅感到震動,而且深受打擊。這個PC游戲軟件的技術水平已經(jīng)遠勝于我所見識到的國內(nèi)領先的圖形學相關科研成果。這對我們?nèi)找媸⑿械狞c到完止的研發(fā)工作真是莫大的諷刺。所以當我們開發(fā)的軟件表現(xiàn)出很多不可救藥的病癥時,不要怨機器差。真的是我們自己沒有把工作做好,寫不好字卻嫌筆鈍。
就假設我們經(jīng)過思想教育后,精神抖擻,隨時準備為優(yōu)化工作干上六天七夜。但愿意做并不意味著就能把事情做好。優(yōu)化工作的復雜之處是很多目標存在千絲萬縷的關系,可謂數(shù)不清理還亂。當不能夠使所有的目標都得到優(yōu)化時,就需要“折衷”策略。
軟件中的折衷策略是指通過協(xié)調(diào)各個質(zhì)量因素,實現(xiàn)整體質(zhì)量的最優(yōu)。就象黨支部副書記扮演和事佬的角色:“…為了使整個組織具有最好的戰(zhàn)斗力,我們要重用幾個人,照顧一些人,在萬不得已的情況下委屈一批人”。
軟件折衷的重要原則是不能使某一方損失關鍵的職能,更不可以象“舍魚而取熊掌”那樣拋棄一方。例如3D動畫軟件的瓶頸通常是速度,但如果為了提高速度而在程序中取消光照明計算,那么場景就會喪失真實感,3D動畫也就不再有意義了(如果人類全是色盲,計算機圖形學將變得異常簡單)。
人都有惰性,如果允許濫用折衷的話,那么一當碰到困難,人們就會用拆東墻補西墻的方式去折衷,不再下苦功去做有意義的優(yōu)化。所以我們有必要為折衷制定嚴正的立場:在保證其它因素不差的前提下,使某些因素變得更好。
下面讓我們用“優(yōu)化——折衷”的策略解決“魚和熊掌不可得兼”的難題。
問題提出:假設魚每千克10元,熊掌每千克一萬元。有個倔脾氣的人只有20元錢,非得要吃上一公斤美妙的“熊掌燒魚”,怎么辦?
解決方案:化9元9角9分錢買999克魚肉,化10元錢買1克熊掌肉,可做一道“熊掌戲魚”菜。剩下的那一分錢還可建立獎勵基金。
2.3一些不正確的觀念
本節(jié)例舉并分析一些不正確的軟件工程觀念,可幫助初學者少犯相似的錯誤。
觀念之一:我們擁有一套講述如何開發(fā)軟件的書籍,書中充滿了標準與示例,可以幫助我們解決軟件開發(fā)中遇到的任何問題。
客觀情況:好的參考書無疑能指導我們的工作。充分利用書籍中的方法、技術和技巧,可以有效地解決軟件開發(fā)中大量常見的問題。但實踐者并不能因此依賴于書籍,這是因為:(1)現(xiàn)實的工作中,由于條件千差萬別,即使是相當成熟的軟件工程規(guī)范,常常也無法套用。(2)軟件技術日新月異,沒有哪一種軟件標準能長盛不衰。祖?zhèn)髅胤皆谀承╊I域很吃香,而在軟件領域則意味著落后。
觀念之二:我們擁有最好的開發(fā)工具、最好的計算機,一定能做出優(yōu)秀的軟件。
客觀情況:良好的開發(fā)環(huán)境只是產(chǎn)出成果的必要條件,而不是充分條件。如果擁有好環(huán)境的是一群庸人,難保他們不干出南轅北轍的事情。
觀念之三:如果我們落后于計劃,可以增加更多的程序員來解決。
客觀情況:軟件開發(fā)不同于傳統(tǒng)的農(nóng)業(yè)生產(chǎn),人多不見得力量大。如果給落后于計劃的項目增添新手,可能會更加延誤項目。因為:(1)新手會產(chǎn)生很多新的錯誤,使項目混亂。(2)老手向新手解釋工作以及交流思想都要花費時間,使實際開發(fā)時間更少。所以科學的項目計劃很重要,不在乎計劃能提前多少,重在恰如其分。如果用“大躍進”的方式奔向共產(chǎn)主義,只會產(chǎn)生倒退的后果。
觀念之四:既然需求分析很困難,不管三七二十一先把軟件做了再說,反正軟件是靈活的,隨時可以修改。
客觀情況:對需求把握得越準確,軟件的修修補補就越少。有些需求在一開始時很難確定,在開發(fā)過程中要不斷地加以改正。軟件修改越早代價越少,修改越晚代價越大,就跟治病一樣道理。
2.4一些有爭議的觀念
本節(jié)探討一些有爭議的觀念,目的不在于得出“正確”或“錯誤”的評斷,而在于爭議會激發(fā)更多理性的思考。
爭議之一:如果軟件運行較慢,是換一臺更快的計算機,還是設計一種更快的算法?
作者觀點:如果開發(fā)軟件的目的是為了學習或是研究,那么應該設計一種更快的算法。如果該軟件已經(jīng)用于商業(yè),則需謹慎考慮:若換一臺更快的計算機能解決問題,則是最快的解決方案。改進算法雖然可以從根本上提高軟件的運行速度,但可能引入錯誤以及延誤進程。技術狂毫無疑問會選擇后者,因為他們覺得放棄任何可以優(yōu)化的機會就等于犯罪。
類似的爭議還有:是買現(xiàn)成的程序,還是徹底自己開發(fā)?技術人員和商業(yè)人士常常會有不同的選擇。
爭議之二:有最好的軟件工程方法,最好的編程語言嗎?
作者觀點:在軟件領域永遠沒有最好的,只有更好的。能解決問題的都是好方法或是好語言。程序員在最初學習Basic、Fortran、Pascal、C、C++等語言時會感覺一個比一個好,不免有喜新厭舊之舉。而如今 的Visual Basic、Delphi、Visual C++、Java等語言各有所長,真的難分優(yōu)劣。開發(fā)人員應該根據(jù)客觀條件,選擇自己熟悉的方法和語言,才能保證合格的質(zhì)量與生產(chǎn)率。
程序設計是自由與快樂的事情,不要發(fā)誓忠于某某主義而自尋煩惱。
爭議之三:編程時是否應該多使用技巧?
作者觀點:就軟件開發(fā)而言,技巧的優(yōu)點在于能另辟蹊徑地解決一些問題,缺點是技巧并不為人熟知。若在程序中用太多的技巧,可能會留下隱患,別人也難以理解程序。鑒于一個局部的優(yōu)點對整個系統(tǒng)而言是微不足道的,而一個錯誤則可能是致命的。作者建議用自然的方式編程,少用技巧。
《狼三則》的故事告訴我們“失敗的技巧通常是技倆”。當我們在編程時無法判斷是用了技巧還是用了技倆,那就少用。《賣油翁》的故事又告訴我們“熟能生巧”,表明技巧是自然而然產(chǎn)生的,而不是賣弄出來的。賣油翁的絕技是可到中央電視臺表演的,而他老人家卻謙虛地說:“沒啥沒啥,用熟了而已”。
爭議之四:軟件中的錯誤是否可按嚴重程度分等級?
作者觀點:在定量分析時,可以將錯誤分等級,以便于管理。微軟的一些開發(fā)小組將錯誤分成四個等級 [Cusumano 1996],如表1.1所示。
一級嚴重:錯誤導致軟件崩潰。
二級嚴重:錯誤導致一個特性不能運行并且沒有替代方案。
三級嚴重:錯誤導致一個特性不能運行但有替代方案。
四級嚴重:錯誤是表面化的或是微小的。
表1.1 錯誤的四個等級
上述分類是非常技術性的,并不是普適的。假設某個財務軟件有兩個錯誤:錯誤A使該軟件死掉,錯誤B導致工資計算錯誤。按表1.1分類,錯誤A屬一級嚴重,錯誤B屬二級嚴重。但事實上B要比A嚴重。工資算多了或者算少了,將會使老板或員工遭受經(jīng)濟損失。而錯誤A只使操作員感到厭煩,并沒有造成經(jīng)濟損失。另一個示例是操作手冊寫錯,按表1.1分類則屬四級嚴重,但這種錯誤可能導致機毀人亡。
開發(fā)人員應該意識到:所有的錯誤都是嚴重的,不存在微不足道的錯誤。這樣才能少犯錯誤。
2.5小 結
軟件工程學科發(fā)展到今天,已經(jīng)有了很多方法和規(guī)范,學之不盡。本章只在宏觀上討論了軟件工程的一些
思想,更具體的內(nèi)容將在后面的章節(jié)論述。無論是什么好方法,貴在理解與靈活運用,而不可當成靈丹妙藥,不象“吃了腦黃金或腦白金,就能使一億人先聰明起來”。
3程序員與程序經(jīng)理
工作在第一線的軟件開發(fā)人員是程序員和程序經(jīng)理,他們決定著軟件的命運。良好的程序員隊伍和出色的管理是軟件項目成功的必要條件。管理不是管制,不是去卡住人家的脖子,因為程序員不是一群野鴨子。管理的目的是讓大家一起把工作做好,并且讓各人獲得各自的快樂和滿足。當一個組織被出色地領導時,雇員甚至不知道他們已被領導。在項目完成時,他們會自豪地說:“看看我們通過努力取得的成績吧”。所以管理者不能老惦記著自己是一個官,而應時刻意識到自己是責任的主要承擔者。
我們經(jīng)常會聽到有經(jīng)理頭銜的人在高談闊論:“編程我不會,做個項目還不easy?派個人去搞系統(tǒng)分析,回頭再叫幾個程序員把需求譯成程序,不就OK了嗎?”
不懂英語的人準以為easy和OK是貶義詞。要讓軟件項目失敗很容易,只要符合下列條件之一即可:
(1)項目經(jīng)理對軟件一無所知;
(2)技術負責人對編程不感興趣;
(3)真真編寫代碼的程序員是臨時雇用的。
如果上述三個條件同時具備,就請放心失敗好了。
讓我們少幻想自己是比爾·蓋茨,先當好程序員和程序經(jīng)理再說。
3.1了解程序員
早期的程序員干活能從軟件直通硬件,個個生猛無比。又因他們的作息時間、言行舉止與常人不太一樣,久而久之就給人們留下了“神秘”、“孤僻”的印象。如今軟件行業(yè)被炒得熱火朝天,有能耐的程序員即便躲在大山岙的軍工廠里也能被挖出來。而更多原本不是程序員的人操起幾本“速成”、“二十一天通”等書籍也加入了這個行業(yè)。現(xiàn)在國內(nèi)號稱有上百萬程序員,這支大軍魚龍混雜,已搞不清那些是正規(guī)軍,那些是民兵游擊隊了。
第四篇:《軟件工程》
《軟件工程》課程分析
本課程是軟件技術專業(yè)學生必修的一門專業(yè)必修課。根據(jù)培養(yǎng)軟件開發(fā)人員的需要,本課程的任務是使學生通過本課程的學習,了解軟件項目開發(fā)和維護的一般過程,掌握軟件開發(fā)的傳統(tǒng)方法和最新方法。能在軟件工程的理論指導下,開發(fā)一個小型管理系統(tǒng),為今后從事軟件工程實踐打下良好的基礎。
一、課程分析
(一)教學計劃的制定和教學內(nèi)容的選取
根據(jù)培養(yǎng)應用技能型人才的總目標,制訂本專業(yè)教學計劃,課程的教材配套,教學、實驗、實訓、課程設計大綱和指導書等教學文件齊全,近幾年來引入了現(xiàn)代教學技術手段,已初步建設、形成了具有特色的全套課堂教學和實驗教學課件。
根據(jù)該課程的基本教學要求和特點,結合學時的安排,從教材的整體內(nèi)容出發(fā),有側重地進行取舍,篩選出學生必須掌握的基本教學內(nèi)容,較好地解決了教學中質(zhì)量與數(shù)量的矛盾。
(二)教學方法分析
由于該課程是用于指導軟件開發(fā)的,和實踐聯(lián)系非常緊密。所以采用了理論聯(lián)系實際的方法進行授課。一方面,讓學生模擬軟件公司的項目小組進行軟件開發(fā);一方面,對學生進行適時的理論指導。既調(diào)動了學生的積極性,又讓學生了解了該課程的理論內(nèi)容,收到了一舉兩得的效果。具體教學過程如下:
第一步:模擬軟件公司的開發(fā)項目小組,分組,分設角色(項目經(jīng)理、用戶、需求人員、設計人員、程序員、測試人員、軟件安裝培訓維護人員),確定開發(fā)題。讓每個小組的學生聚在一起,在項目經(jīng)理的組織下通過調(diào)研、討論來制定自己小組的開發(fā)題目,大家感覺就象在軟件公司實習一樣,非常新鮮,感興趣。每個學生都積極主動的去完成自己應承擔的那部分工作。
第二步:模擬軟件項目開發(fā)全過程的各個階段,進行相關的理論授課和實際開發(fā)。即對軟件開發(fā)的每一階段,首先按照教材內(nèi)容進行理論授課,然后讓學生參照授課內(nèi)容進行實際的軟件開發(fā)實踐。
在此階段結束后,每班召開一個模擬方案論證會,由各開發(fā)小組選出代表上臺講解本組的開發(fā)方案,其他同學模擬用戶對開發(fā)方案提出意見。由于大家對模擬方案論證會非常感興趣,發(fā)言積極踴躍,論證會結束后,每個小組的設計方案都得到了很好的補充和完善。
第三步:學期末各小組提交各自完成的軟件系統(tǒng)及開發(fā)文檔,并進行總結演示,由任課教師進行講評。
抽象理論課的教學應理論聯(lián)系實際,讓學生在實際應用中掌握抽象的理論,在興趣中學習,達到我們高職的雙向型培養(yǎng)目標。
二、存在的問題與希望
在上述的教學中,雖然實現(xiàn)了理論聯(lián)系實際,但也存在著一些問題,比如每個項目小組中總有個別同學存在依賴心理,不參與項目開發(fā),最后抄襲別的同學的項目成果,自己得不到實際的鍛煉,影響了大三的畢業(yè)設計和日后的軟件開發(fā)。另外,如果該課程只上課,沒有實訓的話,實驗課時太少,學生很難全面完成一個系統(tǒng)的開發(fā)。
第五篇:軟件工程
1.軟件工程:是指導計算機軟件開發(fā)和維護的工程學科
2.軟件危機:是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題
3.軟件過程:是為了開發(fā)出高質(zhì)量的軟件產(chǎn)品所需完成的一系列任務的框架,它規(guī)定了完成各項任務的工作步驟
4.軟件生命周期:是指從軟件定義、開發(fā)、使用、信息”。此外,系統(tǒng)還應該具有“定時取樣生理信號”、“更新日志”和“產(chǎn)生病情報告”的功能。為了分析病人生理信號是否超出了醫(yī)生規(guī)定的安全范圍,應該存儲“患者安全范圍”信息。此外,定時記錄病人生理信號所形成的“患者日志”,顯然也是一個數(shù)據(jù)存 儲。
23.軟件危機有那些典型表現(xiàn)?
(1)央一個索引號)。
針對若干個不同的NAME重復執(zhí)行上述命令序列。
?測試系統(tǒng)非正常操作的測試數(shù)據(jù) ①用過長的關鍵字作為命令b的參數(shù):例如,b(reliability software and hardware combined)
預期的輸出:系統(tǒng)截短過長的關鍵字,例如,上列命令中的關鍵字可能性被截預期的輸出:X=1,Y=20,Z=3 ④ 3個判定表達式依次為假、真、真 輸入:A=1,B=40,C=60 預期的輸出:X=1,Y=20,Z=30 ⑤ 3個判定表達式依次為真、假、假 輸入:A=20,B=1,C=1 預期的輸出:X=10,Y=2,Z=3 ⑥ 3個判定表達式依次為真、假、真 輸入:A=20,B=1,C=60 對軟件開發(fā)成本和進度的估計常常很不準確。維護到淘汰的全過程
5.軟件工程環(huán)境:方法與工具的結合,加上配套的軟、硬件支持稱為軟件工程環(huán)境
6.模塊:是數(shù)據(jù)說明、可執(zhí)行語句等程序?qū)ο蟮募?.模塊化:是按規(guī)定的原則將一個大型軟件分為一個個較小的、相對獨立但又相關的模塊
8.耦合:是對一個軟件結構內(nèi)不同模塊之間互連程度的度量
9.內(nèi)聚:標志著一個模塊內(nèi)各個元素彼此結合的緊密程度
10.結構程序設計:如果一個程序的代碼塊只有一個入口和一個出口,則稱這個程序是結構化的11.實現(xiàn):通常指編碼和測試
12.軟件可靠性:是指程序在給定的時間間隔內(nèi),按照規(guī)格說明書的規(guī)定成功地運行地概率
13.集成測試:是測試和組裝軟件的系統(tǒng)化技術 14.軟件維護:是指軟件已經(jīng)交付使用之后,為了改正錯誤或滿足新的需要而修改軟件的過程
15.對象:在應用領域中有意義的、與所解決的問題有關系的任何事物
16.對象模型:表示靜態(tài)的、結構化的系統(tǒng)的“數(shù)據(jù)”性質(zhì)
17.功能模型:表示變化的系統(tǒng)的“功能”性質(zhì) 18.面向?qū)ο蠓治觯壕褪浅槿『驼碛脩粜枨蟛⒔栴}域精確模型的過程
19.重用:是指同一事物不作修改或者稍加改動就多次重復使用
20.可行性分析包括:技術可行性、經(jīng)濟可行性、操作可行性
21.北京某高校可用的電話號碼有以下幾類:校內(nèi)電話號碼由 4 位數(shù)字組成??定義上述電話號碼
電話號碼=[校內(nèi)電話號碼|校外電話號碼]
校內(nèi)電話號碼=非零數(shù)字+ 3 位數(shù)字 //后面繼續(xù)定義 校外電話號碼=[本市號碼|外地號碼] 本市號碼=數(shù)字零+8 位數(shù)字
外地號碼=數(shù)字零+3 位數(shù)字+8 位數(shù)字 非零數(shù)字=[1|2|3|4|5|6|7|8|9] 數(shù)字零=0位數(shù)字=3{數(shù)字}3//3 至 3 個數(shù)字 8 位數(shù)字=非零數(shù)字+7 位數(shù)字 7 位數(shù)字=7{數(shù)字}7 數(shù)字=[0|1|2|3|4|5|6|7|8|9]
22.目前住院的病人主要由護士護理,這樣做不僅需要大量護士??寫出問題定義,分析可行性 從問題陳述可知,本系統(tǒng)數(shù)據(jù)源點是“病人”和“護士”,他們分別提供生理信號和要求病情報告的信息。進一步分析問題陳述,從系統(tǒng)應該“定時記錄病人情況以形成患者日志”這項要求可以想到,還應該有一個提供日期和時間信息的“時鐘”作為數(shù)據(jù)源點。從問題陳述容易看出,本系統(tǒng)的數(shù)據(jù)終點是接收警告信息和病情報告的護士。系統(tǒng)對病人生理信號的處理功能主要是“接收信號”、“分析信號”和“產(chǎn)生警告
(2)用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常
發(fā)生。
(3)軟件產(chǎn)品的質(zhì)量往往靠不住。(4)軟件常常是不可維護的。(5)軟件通常沒有適當?shù)奈臋n資料。(6)軟件成本在計算機系統(tǒng)總成本中所占的比例
逐年上升。(7)軟件開發(fā)生產(chǎn)率提高的速度,遠遠跟不上計算
機應用迅速普及深入的趨勢
25.銀行計算機存儲系統(tǒng)的工作過程大致如下:??請用數(shù)據(jù)流圖描繪本系統(tǒng)的功能,并用實體—聯(lián)系圖描繪系統(tǒng)中的數(shù)據(jù)對象 26.復印機的工作過程大致如下:未接到復印命令時處于閑置狀態(tài)??請用狀態(tài)轉(zhuǎn)換圖描繪復印機的行為
27.用面向數(shù)據(jù)流的方法設計下列系統(tǒng)的軟件結構
(1)機票預定系統(tǒng)(2)患者監(jiān)護系統(tǒng) 28.耦合包括數(shù)據(jù)耦合、控制耦合、公共環(huán)境耦合、內(nèi)容耦合29.內(nèi)聚包括功能內(nèi)聚、順序內(nèi)聚、通信內(nèi)聚、過程內(nèi)聚、時間內(nèi)聚、邏輯內(nèi)聚、偶然內(nèi)聚
30.美國某大學有200名教師,校方與教師工會剛剛簽訂一項協(xié)議。按照協(xié)議??
31.畫出下列偽代碼的流程圖,計算它的環(huán)形復雜度
?
32.某圖書館有一個使用CET
終端的信息檢索系統(tǒng),該系統(tǒng)有下列4個基本檢索命令:
(1)設計測試數(shù)據(jù)以全面系統(tǒng)的正常操作
(2)設計測試數(shù)據(jù)以測試系統(tǒng)的非正常操作
解:?測試系統(tǒng)正常操作的測試數(shù)據(jù) ①順序執(zhí)行下列3個命令:b(KEYWORD)s(L)d(N)
其中KEYWORD是正確的關鍵字;L是執(zhí)行命令b后在屏幕上顯示的約20個行號中的一個(至少應該使L分別為第一個、最后一個和中央一個行號);N是執(zhí)行命令s后列出的索引號中的一個(至少應該使N分別為第一個、最后一個和中央一個索引號)。
針對若干個不同的KEYWORD重復執(zhí)行上述命令序列。
②順序執(zhí)行下列2個命令:f(NAME)d(N)
其中,NAME是已知的作者姓名;N是執(zhí)行命令f后列出的索引號中的一個(至少應該使N分別為第一個、最后一個和中
短為reliability software
②用不正確的關鍵字作為命令b的參數(shù):例如,b(AARDVARK)
預期的輸出:顯示出最接近的匹配結果,例如,執(zhí)行上列命令后可能顯示 1.AARON,JULES(book)③用比執(zhí)行命令b后列出的最大行號大1的數(shù)作為命令s的參數(shù)
預期的輸出:“命令s的參數(shù)不在行號列表中”
④用數(shù)字和標點符號作為命令b和命令f的參數(shù)
預期的輸出:“參數(shù)類型錯”
⑤用字母字符作為命令s和命令d的參數(shù) 預期的輸出:“參數(shù)類型錯”
⑥用0和負數(shù)作為命令s和命令d的參數(shù) 預期的輸出:“參數(shù)數(shù)值錯” ⑦命令順序錯:例如,沒執(zhí)行命令b就執(zhí)行命令s,或沒執(zhí)行命令s就執(zhí)行命令d 預期的輸出:“命令順序錯”
⑧命令語法錯:例如,遺漏命令名b、s、d或f;或命令參數(shù)沒用圓括號括起來 預期的輸出:“命令語法錯” ⑨命令參數(shù)空:例如,b()、s()、d或f()
預期的輸出:系統(tǒng)提供默認參數(shù)或給出出錯信息
⑩使用拼錯了的作者姓名作為f的參數(shù) 預期的輸出:“找不到這們作者的著作”
33.(2)答:經(jīng)驗表明,在類似的程序中,單位長度
里的錯誤數(shù)ET/IT近似為常數(shù)。美國的一些統(tǒng)計數(shù)字告訴我們,通常
0.5X10-2≤ ET/IT ≤2X10-2
也就是說,在測試之前每1000條指令中大約有5~20個錯誤。
假設在該程序的每1000條指令中有10個錯誤,則估計在對它進行測試期間將發(fā)現(xiàn)的錯誤數(shù)為
5000X10/1000=50(個)(3)① 使3個判定表達式之值全為假 輸入:A=1,B=1,C=1 預期的輸出:X=1,Y=2,Z=3 ② 使3個判定表達式之值全為真 輸入:A=20,B=40,C=60 預期的輸出:X=10,Y=20,Z=30 ① 3個判定表達式之值全為假 輸入:A=1,B=1,C=1 預期的輸出:X=1,Y=2,Z=3 ② 3個判定表達式依次為假、假、真 輸入:A=1,B=1,C=60 預期的輸出:X=1,Y=2,Z=30 ③ 3個判定表達式依次為假、真、假 輸入:A=1,B=40,C=1
預期的輸出:X=10,Y=2,Z=30 ⑦ 3個判定表達式依次為真、真、假 輸入:A=20,B=40,C=1 預期的輸出:X=10,Y=20,Z=3 ⑧ 3個判定表達式全為真 輸入:A=20,B=40,C=60 預期的輸出:X=10,Y=20,Z=30 34.軟件的可維護性與哪些因素有關:軟件的可理解性、可測試性、可修改性、文檔描述符合要求、用戶文檔簡潔明確、系統(tǒng)文檔完整并且標準
35.面向?qū)ο蠓椒ㄊ且环N運用對象、類、繼承、封裝、聚合、消息、多態(tài)等概念來構造系統(tǒng)的軟件開發(fā)方法。
面向?qū)ο蠓椒ǖ膬?yōu)點是:符合人們習慣的思維方式、穩(wěn)定性好、可重用性好、可維護性好、容易開發(fā)大型的軟件產(chǎn)品