《軟件工程導論》實驗報告_第1頁
《軟件工程導論》實驗報告_第2頁
《軟件工程導論》實驗報告_第3頁
《軟件工程導論》實驗報告_第4頁
《軟件工程導論》實驗報告_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2011-2012(2)軟件工程導論實驗報告 學院: 計算機學院 班級: 軟件工程114 姓名: 黃芳愷 學號:119074258 目錄 實驗1:項目計劃、分析和設計 實驗2;編碼 實驗3:代碼復查、編譯 實驗4:項目測試總結 軟件工程導論 實驗一:項目計劃、分析和設計 實驗日期 2012 年 4 月 20 日 實驗目的 初步了解結構化分析、設計方法的原理、步驟以及各階段的文檔,練習撰寫簡要的需求文檔、設計文檔。 實驗內容 貪吃蛇程序:貪吃蛇游戲是一個深受人們喜愛的游戲,一條蛇在密閉的圍墻內,在圍墻內隨機出現(xiàn)一個食物,通過按鍵盤上的四個光標鍵控制蛇向上下左右四個方向移動,蛇頭撞到食物則表示食物

2、被蛇吃掉,這時蛇的身體長一節(jié),同時計1分,接著又出現(xiàn)食物,等待被蛇吃掉,如果蛇在移動過程中,撞到墻壁或身體交叉蛇頭撞到自己的身體,游戲結束。根據編寫貪吃蛇的游戲規(guī)則,我們利用c語言來進行編輯具體步驟,從而使游戲能夠運行,根據編寫貪吃蛇程序,掌握軟件工程思想及要領,進一步鞏固編程思想和掌握畫圖函數底層,依據項目可行性研究的結果,進行需求分析和設計,編寫簡要的需求規(guī)格說明書,繪制程序流程圖。 實驗原理和步驟 當前的建模方法主要有傳統(tǒng)的結構化分析、設計方法(SA/D)和面向對象分析、設計方法(OOA/D)兩種。 分析階段: 結構化分析(SA)是一種建模技術 ,它通過一定方法幫助開發(fā)人員定義系統(tǒng)需要什

3、么功能,系統(tǒng)需要存儲和使用哪些數據,以及為完成這些功能,系統(tǒng)需要什么樣的輸入和輸出以及如何把這些功能結合在一起來完成任務。設計階段:分總體設計和詳細設計兩階段??傮w設計階段的任務主要是確定系統(tǒng)由哪些模塊組成,以及這些模塊之間的相互關系;詳細設計階段的任務主要是設計每個模塊的處理過程。常用的結構化設計(SD)方法有面向數據流分析(DFA)的設計方法和面向數據的設計方法。DFA設計技術實施的通用步驟:(1)復查并精化DFD;(2)確定DFD類型;(3)把DFD映射到系統(tǒng)模塊結構,設計出模塊結構的上層;(4)基于DFD逐步分解高層模塊,設計出下層模塊初步結構;(5)根據模塊獨立性原理,精化模塊結構,

4、得到更為合理的軟件結構;(6)模塊接口描述;(7)修改和補充數據詞典;(8)制定測試計劃。詳細設計階段的任務主要是確定每個模塊的處理過程,包括(1)確定每個模塊的算法。(2)確定每一個模塊的數據組織。(3)為每個模塊設計一組測試用例。(4)編寫詳細設計說明書。詳細設計階段采用的方法是結構化程序設計(SP),與SA,SD方法銜接。目標是給出可以直接用以編碼的程序邏輯結構,強調清晰第一。設計思路:這個程序的關鍵點是表示蛇的圖形以及蛇的移動。用一個小矩形塊表示蛇的一節(jié)身體,身體每長一節(jié),增加一個矩形塊,蛇頭用兩節(jié)表示。移動時必須從蛇頭開始,所以蛇不能向相反方向移動,也就是蛇尾不能改作蛇頭。如果不按任

5、何鍵,蛇自行在當前方向上前移,當游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動,一步移動一節(jié)身體,所以當按了有效的方向鍵后,先確定蛇頭的位置,然后蛇身體隨著蛇頭移動,圖形的實現(xiàn)是從蛇頭的新位置開始畫出蛇,這時,由于沒有清屏的原因,原來蛇的位置和新蛇的位置差一個單位,所以看起來蛇會多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)和消失也是畫矩形塊和覆蓋矩形塊。為了便于理解,定義了兩個結構體:食物和蛇。 需求規(guī)格說明書 主要功能陳述:這是一款適合各年齡階層小游戲,它可以使人們休息時的一種放松方式也可以是孩子們的娛樂游戲;另外對于一些對于有一定的C語言基礎的,可以一邊在玩的時候,感受在其中的

6、編程思想并且自己進行嘗試。IPO圖: 輸入 處理 輸出分數狀況界面相應游戲中執(zhí)行相應的操作游戲玩法操作游戲系統(tǒng)操作是否進入游戲輸入密碼1判斷密碼正確2判斷操作正確性3進行操作執(zhí)行判斷4分數統(tǒng)計5游戲界面構建6游戲刷屏數據字典:先進行蛇與食物的定義,再制定游戲中蛇的光標處理方法,初始化蛇的位置坐標,接著創(chuàng)建整個游戲的活動界面從而確定游戲的整體的框架。初始化游戲的計分系統(tǒng),設置初始化分數,再增加分數統(tǒng)計系統(tǒng)確立分數處理的方法。接著編寫游戲的規(guī)則,蛇的走動方法與吃到食物增長的處理以及游戲中碰壁或碰到自身的處理,最后進行對游戲失敗的處理以及游戲的清屏處理。 詳細設計說明書 模塊的文字描述:main()

7、主函數:這是程序的大體流程,首先定義使用到的常數、全局變量及函數原型說明,然后初始化圖形系統(tǒng),調用函數畫出開始畫面,調用函數,即玩游戲的具體過程與分數的增加,游戲結束后調用關閉圖形系統(tǒng)清理屏幕,結束程序畫界面函數: 設計游戲的活動界面,就是一個密封的圍墻加上一個數據處理界面,利用printf來構建游戲的大體框架與各個部分的具體內容游戲具體過程函數: 這一部分是游戲的重要組成,調用這個函數是游戲的主要部分,重點是一次次反復表示蛇與食物的新位置并進行對前一次的反復清屏。采用的方法是每次移動的時候從最后一節(jié)開始到倒數第二節(jié),將前一節(jié)的坐標賦值給后一節(jié)的坐標,移動后只要把最后一節(jié)用背景色去除即可。蛇的

8、方向通過w a s d鍵進行控制數組的加減。如果沒有食物,隨機出現(xiàn)食物;如果有食物,則顯示食物,蛇移動身體,根據蛇的方向改變坐標值,并判斷蛇是否撞到了墻或自己吃了自己,如果出現(xiàn)這兩種情況之一,則蛇死,調用游戲結束函數結束本次游戲或重新開始。如果蛇吃到了食物,蛇身體長一節(jié),數組元素增加一個,身體節(jié)數、分數都進行相應的改變。如果有按鍵,則識別鍵值。如果按鍵為Esc鍵則結束游戲,程序運行結束;如果所按鍵為方向鍵,則根據該鍵改變代表蛇方向的變量的值,要考慮相反方向鍵無效。游戲結束函數:游戲結束,顯示游戲結束信息。游 戲 控 制 模 塊HIPO圖:輸入密碼開始游戲暫停游戲繼續(xù)游戲退出游戲程序開始初始化輸

9、入密碼判斷開始游戲判斷是否出現(xiàn)死亡否進行玩家決定是否繼續(xù)游戲退出游戲(調用結束程序)否是是貪吃蛇流程圖詳細設計說明書:注意事項1程序流程圖應符合結構化思想:單入口、單出口。 實驗總結 通過本次試驗讓我加深了對程序設計的理解,對程序結構化設計有了進一步的認識,同時也是對自己編程思想的優(yōu)化和編程能力的提高,認識到了如何將程序設計工程化,同時也發(fā)現(xiàn)了自己諸多問題,對軟件工程思想沒有很好的理解,以及IPO圖和HIPO圖的繪制與編寫出現(xiàn)了問題,我覺得在畫圖之前首先要確定具體框架,然后根據框架進行補充。此次試驗讓我發(fā)現(xiàn)了很多問題,我認識到編寫任何程序無論難或易都要進行實驗前的準備,對實驗的步驟有個具體了解

10、并且能夠理清實驗思路才能夠進行實驗。這些發(fā)現(xiàn)讓我能夠及時的進行自我反思從而對自己進行相應的改進??傮w說,這次實驗讓我學到了很多寶貴的經驗與思想,為以后打好基礎。 軟件工程導論 實驗二:編碼 實驗日期 2012 年 4 月 20 日 實驗目的 通過對本次貪吃蛇程序的編寫,了解各種不同的編程方法和不同的編程風格,從而在這次實驗以及以后學習過程中養(yǎng)成屬于自己的良好的編程風格與編程方法技巧。 實驗內容 通過實驗一的基礎,先制定基本框架,然后在這個基礎上詳細的進行編注,整體按照相應的結構化思想編寫代碼,在相應的地方做出對自身的注釋,從而能夠使自己和他人能夠更好的理解。 實驗原理和步驟 編碼的原理包括幾方

11、面,首先編碼風格要強調“清晰易讀”,不能過分個性化或過多的插入個人技巧,要做到自己編的程序對于那些會編程的人都能夠輕易理解并能夠在不足的地方進行修改。編碼過程中要注意變量或函數的名字要賦予相應的意義,做到每個代碼都有自己存在的意義與作用。編碼中的表達式和語句要一目了然,排版風格、循環(huán)語句風格要保持一致,使人在閱讀你的程序是能夠很快理解你要表達的意思與目的。在函數宏的定義,常數的定義,注釋方面要全面。注釋包括序言性注釋、函數模塊注釋和程序語句注釋。 具體步驟 首先制定相應的程序框架,然后根據實驗一種相應的模塊進行相應的填充。當整體程序基本成型后,再通過反復測試,找出其中的不足,進行不斷地完善。然

12、后對程序中相應的模塊與需要理解的地方進行合理的簡潔的注釋,使他人能夠跟快的理解。對每個函數前寫模塊注釋,重要語句寫功能性注釋,變量或函數的名字要有意義,排 版,從而使程序變得美觀易懂。 程序源代碼 #include #include #include #include #include #include int snake_len=1;/蛇的長度int snake_loc502=31,12;/整條蛇的位置,最長為50int snake_head2=31,12;/蛇頭位置,初始值為11,12;int food2;/食物位置char snake_direction=s;int delay=200;

13、 /蛇每delay個時間走一步int eat_flag=0;/1表示吃了食物,0表示未吃int liv_stat=0;/1表示死了,游戲該結束了;0表示還活著void gotoxy(int x, int y)/定位光標,x為行坐標,y為列坐標 COORD pos = x,y; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos); void hidden()/隱藏光標 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CUR

14、SOR_INFO cci; GetConsoleCursorInfo(hOut,&cci); cci.bVisible=0;/賦1為顯示,賦0為隱藏 SetConsoleCursorInfo(hOut,&cci);void init()/初始化 int i; snake_len=1;/蛇的長度 snake_loc00=31;/整條蛇的位置 snake_loc01=12; snake_head0=31;/蛇頭位置,初始值為11,12; snake_head1=12; snake_direction=s; delay=200; eat_flag=0; liv_stat=0; for(i=1;i50

15、;i+) snake_loci0=0;/整條蛇的位置 snake_loci1=0; void create_window()/創(chuàng)建窗口 gotoxy(0,0); printf(*); printf(* * *); printf(* * *); printf(* * 分數:1 *); printf(* * 按鍵說明: *); printf(* * 上:w *); printf(* * 下:s *); printf(* * 左:a *); printf(* * 右:d *); printf(* * 暫停:空格 *); printf(* * 退出:Esc鍵 *); printf(* * *); pr

16、intf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(* * *); printf(*);void update_score()/更新分數 gotoxy(73,3); printf(%2d,snake_len);void create_food()/產生食物的位置 time_t t; srand(time(&t); while(1) food

17、0=rand()%62+1;/生成162之間的隨機數,其中random函數生成077之間的隨機數 food1=rand()%22+1;/生成122之間的隨機數,其中random函數生成017之間的隨機數 if(food0!=snake_head0&food1!=snake_head1)break; gotoxy(food0,food1); printf(*);void direction() char keyhit=0,i; while(kbhit()!=0)keyhit=getch(); if( (keyhit=a) | (keyhit=d) | (keyhit=w) | (keyhit=s

18、) & (abs(snake_direction/16-keyhit/16)=1) )snake_direction=keyhit; else if(keyhit= ) gotoxy(30,24); system(pause); gotoxy(30,24); for(i=0;i19;i+)printf( ); else if(keyhit=27)exit(0);void state()/判定蛇死沒死 if(snake_head062|snake_head122)liv_stat=1;void eat()/判定蛇吃沒吃上,并對根據方向對蛇頭位置進行更新 switch(snake_directio

19、n) case w: snake_head1-;break; case s: snake_head1+;break; case a: snake_head0-;break; case d: snake_head0+;break; if(food0=snake_head0) & (food1=snake_head1) ) eat_flag=1; switch(snake_direction) case w: snake_head1-;break; case s: snake_head1+;break; case a: snake_head0-;break; case d: snake_head0

20、+;break; void show_snake()/更新蛇在屏幕中的位置 gotoxy(snake_head0,snake_head1); printf(*); gotoxy(snake_locsnake_len-10,snake_locsnake_len-11); printf( );void update_maxtrix()/更新存儲蛇位置的數組 int i; if(eat_flag!=1) for(i=snake_len-1;i0;i-) snake_loci0=snake_loci-10; snake_loci1=snake_loci-11; else snake_len+; if(

21、snake_len3 & delay100)delay-=30; for(i=snake_len-1;i1;i-) snake_loci0=snake_loci-20; snake_loci1=snake_loci-21; snake_loc10=food0; snake_loc11=food1; eat_flag=0; create_food(); update_score(); snake_loc00=snake_head0; snake_loc01=snake_head1;void main() int flag; long password=123456; int i=1; long

22、pw; printf(請輸入密碼n); scanf(%ld,&pw); if(password!=pw) while(1) i+; printf(密碼錯誤n請重新輸入:); scanf(%ld,&pw); if(password=pw) printf(密碼正確,歡迎使用n); flag=1; break; if(i=3) printf(請稍后再試n); flag=0; break; else printf(密碼正確,歡迎使用); flag=1; LOOP: system(cls); init(); create_window(); hidden(); create_food(); while(

23、1) int i; Sleep(delay); direction(); eat(); show_snake(); update_maxtrix(); state(); if(liv_stat=1) for(i=1;isnake_len;i+) gotoxy(snake_loci0,snake_loci1); printf( ); gotoxy(food0,food1); printf( ); gotoxy(30,12); printf(Game over!n); gotoxy(25,13); printf(繼續(xù)請按y,退出請按n); while(1) i=getch(); if(i=y)go

24、to LOOP; else if(i=n)break; break; 注意事項1模塊的邏輯描述應該清晰第一、使用標準的、規(guī)范的控制結構、正確可靠 實驗總結 通過對實驗二的學習讓我對程序的編寫有了更深的理解也對編程的謹慎性有了更深層次的體會,即使在小的疏忽或錯誤都會影響整個實驗的進行。但是實驗二也給我?guī)砭薮笫找?,通過本實驗我進一步對編程思想進行了優(yōu)化,在編程過程中也能夠更加注意細節(jié) ,能夠更好的利用程序框圖進行一步一步的前進。對與以后的學習與實踐,我會進一步做到認真仔細,在編程前更好的準備與思考。對于實驗二的整體感受,我覺得我的編程技巧與思路得到提升,自己能夠在編程時注意自己的思考與對代碼合理

25、性的思考。總體說來,實驗二是對我在編寫代碼上的一個巨大提升以及對我在編寫代碼理念上的一次進步; 軟件工程導論 實驗三:代碼復查、編譯 實驗日期 2012 年 4 月 20 日 實驗目的 在實驗代碼編寫運行過程中,總會出現(xiàn)部分或大或下的錯誤,實驗三就是學習如何通過代碼運行過程中的錯誤來進行對自己編寫的代碼程序的快速有效的復查,從而發(fā)現(xiàn)程序中的不足與錯誤。 實驗內容 本實驗是通過對代碼復查腳本的學習來進行對自己編寫的程序的復查,檢查出其中的錯誤和不足,在利用代碼復查檢查表檢查源代碼的同時還要利用相應的表格進行記錄,然后反復多次進行測試修改直到程序趨于完善同時填寫缺陷記錄日志。實驗后利用錯誤統(tǒng)計記錄

26、表來對自身進行思考,發(fā)現(xiàn)自己在那方面的不足,對自己進行反思。 實驗原理和步驟 如果想發(fā)現(xiàn)和改正程序的每一個缺陷,就必須遵照一個精確的規(guī)程。檢查表可以幫助確保遵循這個規(guī)程。檢查表也是一個構思的來源。當按照檢查表去做時,就知道如何進行代碼復查。檢查表包括了個人的經驗。通過不斷地使用和改進個人檢查表,可以更好地發(fā)現(xiàn)在程序中的缺陷。首先整體檢查一遍自己編寫的整個代碼,然后運行看有無錯誤;發(fā)現(xiàn)有不足或錯誤,則進行代碼復查。熟悉復查表中相應的錯誤點,首先在代碼中尋找平時自己易錯點,看是否錯誤,然后按照復查表中規(guī)則一一對應對代碼進行深層次的精確的檢查,不斷檢查思考,記錄錯誤點;檢查完全,確定代碼沒有錯誤后來

27、對本次編寫的代碼進行反思,找出自己的不足與需要改進之處。 填寫代碼復查檢查表C+代碼復查指南和檢查表程序名和程序號#一般性說明: 在完成每個復查步驟之后,將發(fā)現(xiàn)的某個類型的缺陷的個數記錄在右面的欄目中。如果該步驟沒有發(fā)現(xiàn)缺陷,就在右面的欄目中打個表示檢查無誤的交叉符號()。在開始復查下一個程序單元之前,要按照檢查表完成對程序,類,對象或方法的檢查檢查內容函數1函數2函數3累計數累計%完整性驗證設計的所有功能都已經編碼111/13=7.6%Includes驗證Include語句是完全的初始化檢查變量和參數的初始化:l 在程序的開始;l 在每個循環(huán)的開始;l 在函數/過程的入口111/13=7.6

28、%調用檢查函數調用的格式:l 指針;l 參數;l & 的使用222/13=15.2%名字檢查名字的拼寫和使用:l 是否前后一致?l 是否在說明的作用域之內?l 結構和類中變量的引用是否使用了.1/13=7.6%字符串檢查所有的字符串:l 是用指針來標識的;l 是以NULL結尾的111/13=7.6%指針檢查所有的指針:l 是初始化為NULL;l 只有在New(新建)之后才Delete(刪除);l 在New并使用之后要刪除111/13=7.6%輸出格式檢查輸出格式:l 換行是否合適?l 間隔是否合適?222/13=15.2% 對保證檢查 是適當的而且是成對的111/13=7.6%邏輯操作符驗證=

29、 =, =,| 等邏輯操作符的使用是合適的。檢查每個邏輯函數的( )是合適的逐行檢查檢查每一行代碼:l 指令的語法是否正確?l 標點是否正確符號是否正確?2133/13=24%標準保證所有代碼符合編碼標準文件的打開與關閉驗證所有的文件:l 是合適地聲明的;l 是合適地打開的;l 是合適地關閉的111/13=7.6%全面檢查對整個程序進行全面的檢查以發(fā)現(xiàn)系統(tǒng)問題和非期望的問題總計64313100 填寫缺陷記錄日志 缺陷記錄日志學生黃芳愷日期 2012/4/11教員程序號日 期編號類型引入階段排除階段修復時間相關缺陷2012-4-11120編碼編譯1min描述:漏掉了“;”、“,”、空格,大小寫錯

30、誤。2012-4-11210編碼編譯1min描述:程序中的注釋漏了結束“*/”。2012-4-113100編碼編譯2min描述:第一次運行器忘關,第二次無法運行。2012-4-11480編碼編譯1min描述:函數中指針的地址和內容混淆。2012-4-11580編碼編譯30min描述:運行錯誤,無法產生需要的效果。2012-4-11640編碼編譯1min描述:程序中缺少部分變量沒有定義。2012-4-11680編碼編譯10min描述:函數中部分循環(huán)判斷錯誤,不能終止或過早結束; 2012-4-11780編碼編譯5min描述:函數中條件語句錯誤,不能夠按照自己原先意愿運行。; 注意事項 注意對程序進行總體測試,完成程序同時,通過一次次編譯找出其中錯誤,再做出相應的處理。實驗中要邏輯清晰,修改是要保持耐心,填寫表格要規(guī)范。 實驗總結 通過對本次實驗結果的分析,我發(fā)現(xiàn)平時對于我們來說,編程過程中犯大錯誤的機率是比較小的,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論