《软件工程》individual project开发小记(一)
今天周四沒有想去上的課,早八點到中午11點半,下午吃完飯后稍微完善了一下,目前代碼可以在dev c++和vs2012上正常運行,性能分析我看資料上一大坨,考慮到目前狀態不太好,腦袋轉不動了,決定先放一放去看看鄒老師以前的軟工博客以及學長學姐們的經驗,現在這里稍微總結一下.
1)????? Before you implement this project, Record your estimate about the time you WILL spend in each component of your program.
做這個項目之前,因為之前從沒有系統的進行過從需求分析到編碼到性能分析的開發過程,所以對各項工作所預計的時間估計不足
需求分析
這項工作主要用來分析整個項目到底要做什么,每項工作的大致實現方式,預計是用半個小時左右的時間
編寫代碼
預計用3個小時左右的時間
性能分析
預計用1個小時左右的時間
2)????? After you had implemented this project, record the ACTUAL time you spent in each component of your program.
目前為止,需求分析和編碼工作已經基本完成,然后所用的時間已經遠遠超出想象
現在是周五下午3:40分,我昨天晚上將代碼完善了一下,采用了hash表的方法來存儲word,對于每一個word利用大素數求一個hash值,對于hash值相同的word我用一個鏈表來存,為了實現word按照頻度排序,最后將鏈表中的word都提取出來放入一個數組中進行關鍵字排序就好.這樣時間復雜度接近O(1);我從花園上下了一個133M左右的英文txt小說合集作為測試樣本,發現程序總是崩掉,后來終于發現是我的大素數不夠大,存儲空間太小,我將大素數改為50W以內的最大素數后順利解決了這個問題
需求分析
前期的需求分析明顯不足,導致許多工作在編碼過程中需要補充,加上在整個編碼過程中零零散散的一些時間,這項工作實際大概運行了90分鐘左右
編寫代碼
編碼中遇到的一個最大的問題是從dev c++上移植到vs2012,由于vs2012的代碼安全性檢查較為嚴格,而本次項目要求不出現warning,因此在許多地方都需要改用最新建議使用的函數,這里就花費了大量的時間查找函數說明;由于對vs2012的不夠熟悉也花費了一些時間;還有一點就是對于word的存儲,由于每當讀入一個新的word時需要判重,我最初考慮是用map來實現,但代碼編寫過程中發現不會使用map對string和int兩個關鍵字進行雙關鍵字排序...這里犧牲了代碼的效率最后改用了sort編寫cmp函數,這個地方留到性能分析的時候考慮用更快的方法來實現.整個編碼過程實際用時在270分鐘左右.
?
以上是昨天總結的
昨晚我又對addword函數進行了重寫,采用hash的方法,大概用了兩個小時的時間;今天上課的時候在思考出錯的原因,下午調試了一個小時左右
性能分析
預計用1個小時左右的時間
3)????? Describe how much time you spent on improving the performance of your program, and show a performance analysis graph (generated by VS2012 perf analysis tool), if possible, please show the most costly function in your program.
開始時我用遍歷數組的方法判重,這樣每次讀入一個單詞都需要O(n)的時間去查找顯然不行,昨天晚上我想到了用hash的方法,編碼+今天的調試大概用了5個小時的時間.
以下是我的performance analysis graph:
最占時間的應該就是Input函數了,它負責從目錄中識別目的文件并讀取,不過說實話這個性能分析自己還不太會用。。。好多dll文件怎么冒出來的還不太明白是什么東西..
?
今天是9月15日,我搜索了一下“無法查找或打開 PDB 文件”的解決方法之后得到如下性能分析圖,感覺比以前慢了好多。。。難道是因為加載那些什么.dll文件么...不太懂.
深入分析函數性能
讀文件夾還算不太占時間
最耗時的是讀字符和將word加入的判重工作
就是這樣。。
?
6:14分左右的時候。。。又跑了一遍。。。速度更快了。。分析原因是這樣。。樣本文件沒有變,但由于之前的樣本是放在深層的文件夾中,遞歸花了一些時間(這么有影響么。。)。。這次只有12S左右,nice .
4)????? Share your 10 test cases, and how did you make sure your program can produce the correct result. (programs with incorrect result will get 0 points,? regardless of speed)
測試用例我自己設計了五組,test1用來測試各種文件類型,test2用來測試空文件夾,test3用來測試空文件,test4用來測試100M+的文件夾,test5模擬實際的文件夾結構+100M+文件夾,其他五組測試用例我決定使用其他同學的用例,通過與其他同學的代碼結果對拍,我認為我的代碼能夠正確且比較高效的完成項目需求.
5)????? Describe what you had learned in this exercise.
1.學到的第一點就是遞歸遍歷指定目錄下的所有文件.以前只會單純的用文件指針或者輸入輸出重定向來訪問單個文件,而在這個項目中學到了在windows和unix下利用一些api來實現遞歸遍歷指定目錄下的所有文件.
2.學到了一些由于指針安全性而引發的vs2012的安全性檢查,并了解了諸如strcpy,fopen等函數的替代函數
3.vs2012中一些問題的解決方法,例如:http://blog.csdn.net/chw1989/article/details/7482205
4.字符串哈希,尤其是學會了鏈地址法.
5.初步了解了vs2012進行preformance analysis.
?
?
PS:需求改了要提前說啊。。。今天剛剛看到需求又改了。。。
轉載于:https://www.cnblogs.com/oldoldb/p/3316865.html
總結
以上是生活随笔為你收集整理的《软件工程》individual project开发小记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业教育经历怎么写,个人简历教育经
- 下一篇: 简单的数据查询