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