1、請回望第一次做業,你對於高級軟件工程課程的想象
1.對比開篇博客你對課程目標和期待,「但願經過實踐鍛鍊,加強計算機專業的能力和就業競爭力」,對比目前的所學所練所得,在哪些方面達到了你的期待和目標,哪些方面還存在哪些不足,爲何?
- 經過一個學期對軟件工程的學習和實踐,個人代碼編寫能力,Bug定位能力,環境搭建能力,軟件測試能力,書面表達能力,團隊組織能力等都獲得了鍛鍊和提升。此外還有很重要的一點是讓我在課堂上和實踐中更加深入地感覺到了軟件工程這個專業的博大精深以及實踐的精髓所在。這些都是我在開篇時所期待的,現在反觀並思考,這些方面確實達到了個人期待和目標。
- 在代碼編寫方面,因爲本科並不是科班出身,我所經歷的編程訓練過少,所以該方面能力較弱。很感謝此次軟件工程實訓和平時的設計模式做業,給了我很好的鍛鍊機會。在遇到困難時,有同窗的幫助,有老師的指點,你們不只幫助我解決問題還慷慨地分享了曾經類似的經歷以及總結出的經驗,讓我不只排除了難題並且學到了更多的技巧和知識。面向對象設計原則規範了個人編程過程,設計模式讓我學到了諸多精妙的設計思路,軟件工程實踐訓練讓我將這些所學應用到實實在在的開發工做中,一方面加深了對面向對象設計原則和設計模式的認識和理解,另外一方面提升了個人代碼質量而且提高了代碼的邏輯合理性。
- 在Bug定位方面,個人能力也獲得了很大的提升。一方面歸功於實踐量的增多,累積經驗也愈來愈豐富,不少常見的bug(有些出於環境問題,有些出於代碼編寫疏忽)都可以很快地找到並修復。另外一方面藉着開發實踐的機會,我在博客園上搜了很多關於bug查找地帖子,學習技術達人的bug定位技巧,而且運用在開發過程當中,爭取儘快地掌握其中技巧和精華。
- 以前一直以爲搭建開發環境就是裝軟件,看看安裝教程就能搞定。而隨着使用工具的增多,慢慢意識到這實際上是一門很深的學問,可否順利安裝好一款開發軟件,有時候是對開發者的能力和知識基礎的考量。此次軟件工程實踐應用的主要開發工具是MyEclipse和MySQL,前者的搭建很順利,而在搭建後者時遇到了較多的問題好比:MySQL安裝完畢後沒法正常啓動,查看日誌發現缺乏data目錄,解壓文件夾中缺乏my-default.ini配置文件,以及在window7操做系統下打開tomcat的可執行文件時提示Unable to open等。好在有隊友的幫助和本身的鑽研精神,最終經過不斷嘗試解決了這一難題。雖然問題解決了,可是該過程也反映了搭建環境能力不足,這與知識積澱和開發經驗直接相關,說明在日後的學習過程當中要注意完善和提升。
- 軟件測試方面,軟件測試的目的是爲了發現軟件設計和實現過程當中疏忽所形成的錯誤,本次實踐的軟件測試是我作的第一個軟件測試。起初的測試僅僅是人工隨機測試,這種測試方式不只測試進度慢,並且測試效果也很差,而後咱們才意識到應該系統地瞭解一下軟件測試方面的方法、工具和專業流程。軟件測試中有測試策略,有系統測試,還有調試技巧,其中系統測試又包括:恢復測試、安全測試、壓力測試、性能測試和部署測試。咱們最終選用的測試工具是robotframework,這是一款python編寫的功能自動化測試框架,具有良好的可擴展性,支持關鍵字驅動,能夠同時測試多種類型的客戶端或者接口,能夠進行分佈式測試執行。robotframework工具幫助咱們發掘出許多bug,咱們在此基礎上修繕系統,測試效率明顯提升,系統性能大大提升。
- 不足之處:項目中還有好幾個創新點沒有可以實現,以及部分可優化的地方沒有來得及在提交項目以前完成改善工做。出現這個狀況的緣由一方面是開發效率不夠高,尤爲是在前期階段,因爲開發經驗不足走了不少冤枉路;另外一方面,由於團隊是剛剛組建的,你們之間的默契程度不夠高,在開發過程當中慢慢磨合後,纔有了愈來愈好的配合效果。因此,在從此的工做學習中應當注重動手實踐,多多經歷以積累經驗,而且在正式開發前預估可能遇到的問題,合理且彈性地安排時間。
2.總結這門課程的實踐總結和帶來的提高,包括如下內容:
(1)統計一下,你在這門高級軟件工程實踐中,完成了多少行的代碼
代碼量來自兩個方面,一是軟件工程實訓,二是平時的設計模式做業,其中前者是主體部分,累計約1.2萬行。css
(2)高級軟工實踐的各次做業分別花了多少時間?(作一個列表)
軟件工程第一次做業-準備 |
6h |
項目Alpha衝刺Day8 |
9h |
軟件工程第一次做業 |
2h |
項目Alpha衝刺Day9 |
13h |
軟件工程第二次做業 |
3h |
項目Alpha衝刺Day10 |
11h |
設計模式第一次做業 |
5h |
項目Alpha衝刺Day11 |
13h |
設計模式第二次做業 |
7h |
項目Alpha衝刺Day12 |
9h |
設計模式第三次做業 |
9h |
項目Alpha衝刺測試隨筆 |
3h |
團隊展現 |
3h |
項目Alpha衝刺總結隨筆 |
5h |
選題報告 |
4h |
項目Alpha衝刺集合隨筆 |
0.5h |
選題報告ppt |
8h |
項目Alpha衝刺過後諸葛亮 |
3h |
選題報告評審表 |
1h |
項目Beta衝刺預備 |
3h |
選題博客隨筆 |
1.5h |
Beta衝刺第一天 |
12h |
需求分析博客隨筆 |
5h |
Beta衝刺次日 |
10h |
需求分析PPT和評審表 |
8h |
Beta衝刺第三天 |
9h |
需求分析報告 |
8h |
Beta衝刺第四天 |
12h |
項目Alpha衝刺Day1 |
10h |
Beta衝刺第五天 |
13h |
項目Alpha衝刺Day2 |
12h |
Beta衝刺第六天 |
10h |
項目Alpha衝刺Day3 |
11h |
Beta衝刺第七天 |
11h |
項目Alpha衝刺Day4 |
11h |
Beta衝刺總結 |
5h |
項目Alpha衝刺Day5 |
12h |
用戶調查報告 |
6h |
項目Alpha衝刺Day6 |
9h |
Beta衝刺集合 |
0.5h |
項目Alpha衝刺Day7 |
12h |
項目驗收PPT |
12h |
我的實踐總結 |
10h |
|
|
(3)哪一次做業讓你印象最深入?爲何?
讓我印象最深入的是alpha衝刺的中期階段。因爲在alpha前期遇到了不少沒有預見的問題,多花費了不少時間在解決這些問題上,致使接下來的後幾天(也就是alpha衝刺的中期階段)一度處於趕進度的狀態,因爲院樓大門晚上10點半關閉,因此那段日子(將近一個禮拜)你們都是翻窗戶離開院樓的,回到宿舍通常是0點多。爲了避免影響總體的進程,故有一些天的當天任務沒有完成,回到宿舍後要繼續加班。那段時間確實是很艱難的一段時光,能睡夠六個小時已是很奢侈、很享受的事了。如今能夠帶着微笑回想這段時光,給這段歲月貼的標籤也從艱難換成了奮鬥。之因此可以如此,是由於堅持,是由於本身的不拋棄不放棄和你們的互相鼓勵。也好在那個階段的奮鬥,很快地遇上了進度,給alpha的後期減輕了很多工做負擔,也加強了咱們每一個人的信心,讓咱們更加相信這個團隊的潛力,相信這份潛力在敏捷開發思想的指導下可以爆發出很大的能量。html
(4)累計花了多少個小時在高級軟工實踐上?平均每週花多少個小時?
軟件工程實踐方面所花時間約230小時,衝刺持續3周,平均每週約77小時。前端
(5)學習和使用的新軟件
- 開發軟件:MyEclipse 2014
- 數據庫軟件:Mysql
- MyEclipse企業級工做平臺是對EclipseIDE的擴展,利用它能夠在數據庫和JavaEE的開發、發佈以及應用程序服務器的整合方面極大的提升工做效率。它是功能豐富的JavaEE集成開發環境,包括了完備的編碼、調試、測試和發佈功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。MyEclipse 是一個十分優秀的用於開發Java, J2EE的Eclipse 插件集合,MyEclipse的功能很是強大,支持也十分普遍,尤爲是對各類開源產品的支持性能好。MyEclipse能夠支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC數據庫連接工具等多項功能。
- MySQL是一個關係型數據庫管理系統,是最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件。MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。
(6)學習和使用的新工具
學會使用RobotFrameWork測試工具對系統進行測試。Robot Framework是一款python編寫的功能自動化測試框架。具有良好的可擴展性,支持關鍵字驅動,能夠同時測試多種類型的客戶端或者接口,能夠進行分佈式測試執行。主要用於輪次不少的驗收測試和驗收測試驅動開發。python
(7)學習和掌握的新語言、新平臺
對Java語言的掌握更加到位,同時也學到了html、css、js、jQuery的基礎語法,可以實現一些普通的功能。學習了github平臺的使用方法,在組內實現協同開發,提升了開發效率。GitHub是開源代碼庫以及版本控制系統,做爲一個分佈式的版本控制系統,在Git中並不存在主庫這樣的概念,每一份複製出的庫均可以獨立使用,任何兩個庫之間的不一致之處均可以進行合併。git
(8)學習和掌握的新方法
- 掌握了多種設計模式的使用方法,主要是策略模式、適配器模式、工廠方法模式、模板模式等。
- 學習了mybatis框架的使用方法。MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。
(9)其餘方面的提高
主要是讓我更加清楚地意識到如何成爲一名合格的開發者。經過此次實踐,在和其餘組員的合做中我更加深入地感覺到一名合格的開發者應該具備我的責任感,這對整個團隊而言相當重要,每一個人應當盡力實現對同伴、隊伍的承諾。一名合格的開發者應該具備奉獻意識。要樂於與組員分享經驗和心得,幫助他們解決困難,提升總體的水平和效率。一名合格的開發者應當具備敏銳的意識,可以注意到項目的進展趨勢和瓶頸所在,根據環境的變化和組員的工做狀況靈活地調整本身的行爲。一名合格的開發者應當可以承受必定的壓力,需求的增長、環境的苛刻、同伴的失誤、截止日期的迫近都是項目開發中常有的壓力來源,在這種壓力環境下一名合格的開發者應當儘量合理、妥善地處理好這些狀況。最後,一名合格的開發者應當有良好的洞察能力,留心細節,這有利於在關鍵時刻作出準確判斷和重要決策。程序員
2、寫下屬於本身的人月神話——我的或結對或團隊項目實踐中的經驗總結+實例/例證結合的分析
- 軟件需求分析的一個重要部分是問題分解,在肯定軟件範圍的活動中,沒必要想着把問題拆分徹底,只要分解部分主要方面便可,如必須交付的功能和內容(消息)及使用的過程。面對複雜的問題,咱們經常使用的策略是分而治之,即把一個複雜的問題劃分爲若干個更容易處理的小問題。在對問題進行預估以前,應儘量對軟件範圍中所描述的軟件功能進行評估和細化,以提供更多的細節。由於成本和進度估算都是立足於功能,因此對功能進行某種程度的分解是十分必要的。
- 軟件具備不肯定性和互操做性,這些特性會給開發帶來不少問題。爲了有效地處理這些問題,必須創建切實可行的方法來協調小組成員之間的關係。爲了知足這一要求,必須創建團隊成員之間的溝通機制。溝通交流能夠分爲正式的交流和非正式的交流。正式的交流包括報告、會議等,非正式交流包括平常的討論和協商。前者須要制度規範,嚴格按照必定標準執行,後者則相對靈活,根據我的或團隊習慣採起合適的方式進行,能夠提升效率爲目標進行方式選擇。
- 團隊負責人是團隊中的關鍵角色。優秀的負責人應當鼓勵每一位成員,給每一個人合適的平臺供其發揮其最大價值和才華,而且促進組內交流,激勵你們互相學習,取人之長補己之短,提升團隊總體實力。負責人還須要有敏銳的洞察力,可以時時感知到項目的瓶頸所在以便於及時調整開發任務的分配。優秀的負責人必須有能力理解語言和非語言信號,並對發出這些信號的人要求作出反應,應當在高壓環境下保持良好的控制能力和應變能力。
- 軟件工程實踐給予咱們理論聯繫實際的鍛鍊機會。從理解問題(溝通和分析)、策劃解決方案(建模和軟件設計)到實施計劃(代碼生成)及檢查結果的正確性(測試和質量保證),這個完整地過程提升了咱們每一個人的綜合能力,包括信息檢索能力,代碼編寫能力,文案撰寫能力,知識梳理能力和溝通交流能力等。敏捷開發使咱們深入認識到團隊的力量遠遠大於簡單的累加求和。咱們不該該低估本身的潛力,只是大多數時候咱們缺乏的是咬緊牙關的堅持和背水一戰的決心。此次軟件工程的實踐雖然已臨近尾聲,但這段經歷帶給咱們的鍛鍊和啓示會伴隨咱們日後的學習,咱們會將軟件工程實踐的精髓和敏捷開發的經驗融入生活和工做,創造更多的價值。
3、對下一屆實踐的建議,或者對於開學初的你,對於大一的你,對於開學初的我,你有什麼想建議和告知的呢?
經過這個學期學習軟件工程的體驗,我想給後來者如下幾點建議:github
4、分析一下本身所處的團隊。軟件工程實踐是大學裏少有的認真的團隊協做經驗。《構建之法》上說團隊的發展有幾個階段,你的團隊都經歷過麼,最後到達了「創造」階段了麼?(參考《構建執法》第17章 人、績效和職業道德)
- 團隊發展分爲四個階段:萌芽階段、磨合階段、規範階段、創造階段。
- 我認爲咱們團隊經歷了前三個階段,目前處於規範階段,尚未到達最後的創造階段。從建隊到如今不超過四個月,能順利度過磨合階段進入規範階段要歸功於團隊裏每一個成員的責任心和團隊意識。目前咱們團隊僅僅作過軟件工程實踐一個項目,訓練量尚不足以支撐這個團隊進階至創造階段。
- 記得在建隊不久剛開展項目時,擺在面前的第一個問題就是選題,看似簡單的定題過程在實際開展時涌現出了不少須要考慮的因素,並且也沒有好的思路,對團隊所能接受的項目工做量和難度也是心中沒底,也是所以走了很多彎路。幸好有了老師的點評和提醒,讓咱們明白作項目應該作實用的產品,故應從用戶需求的角度出發,考察市場須要什麼,據此來肯定題目。根據這個思路,咱們注意到平常工做學習的主要場所實驗室實際上是一個事務繁多的地方,而不一樣的事情的處理每每須要藉助不一樣的工具和平臺去實現,目前尚無合適的管理系統對實驗室的學生和事務進行管理,咱們分析以後認爲這是一個能夠值得立項的需求基礎,故擬定方案開展項目。
- 在計劃安排以後進入動手實踐階段,層出不窮的問題一度打亂了咱們的進度,加上其餘方面事情的干擾,團隊在那段時間裏處於浮躁的狀態,並且天天站立式會議上討論時也時常出現意見不一的情形,激烈地爭論以後每每使氣氛凝重。好在你們可以理性地分析問題,有責任心和團隊意識,儘量從團隊利益角度和用戶需求角度出發優選合理的解決方案,最終達成一致。也正是經歷過這些考驗地洗禮,你們之間愈來愈有默契,由於每一個問題都是認真對待,有了這些的鋪墊後續的工做進行得順利不少。這大概是對咱們磨合階段的歸納。
- 雖然你們之間合做得效率愈來愈高,遇到的困難被也一個個攻克,可是規範化還是一個問題。好比軟件測試和編程規範,這方面在前期都沒有加以重視。此外,對於敏捷開發提出的12條原則咱們也沒有徹底遵循。故在度過磨合期以後,咱們在站立式會議上着重討論了規範化的相關問題,強調了規範的重要性,制定了要求及懲處措施以督促每一位成員嚴格規範本身的工做。在你們的共同努力下,咱們團隊進入了規範階段。
5、怎樣證實你學會了軟件工程?
(1)研發出符合用戶需求的軟件
(必須公開發布,有實際的用戶,必定的用戶量和持續使用量 (3 天后能保持10 - 100個用戶);而不是: 作沒有用戶使用的軟件)數據庫
- 咱們在項目開發的收尾時期將相關代碼在GitHub平臺上開源;
- 在需求報告中提出的全部功能所有實現,而且經過測試,保證質量;
- 項目測試並debug後的次日咱們就將該系統投入到團隊實驗室試用,涉及用戶數量50+。
(2)經過一系列工具,流程,團隊合做,可以在預計的時間內發佈 「足夠好」 的軟件
(有項目規劃/需求/設計/實現/發佈/維護,有定時的進度發佈 ; 而不是: 經過臨時熬夜,胡亂拼湊,大牛一人代勞,延遲交付等方式糊弄)
從選題報告到用戶需求分析,及後續的項目設計、人員分工,alpha衝刺和beta衝刺的編程實現,項目測試,還有最後的用戶使用反饋,咱們都認真對待,燃盡圖從滿到零,在計劃時間內完成任務。
- 咱們有明確的項目規劃和人員分工,如有調整會在當天的隨筆中記錄;
- 咱們的需求分析通過調研和分析,根據實際需求撰寫需求分析報告做爲後續工做的指南;
- 通過兩個階段的開發,咱們實現了全部在需求分析中提到的功能;
- 根據用戶的使用反饋,咱們對系統中的前端界面佈局後後臺設計進行完善,實現維護;
- 在每一個階段開始前發佈預備隨筆,在開發階段的每一天發佈當日隨筆做爲進度記錄;
- 團隊分工明確,人人各司其職又相互合做、幫助,不存在一人代勞的現象;
- 項目如期交付,沒有推遲延期。
(3)而且經過數據展示軟件是能夠維護和繼續發展的。
(而不是:找不到源代碼,代碼無文檔,代碼不能編譯,沒有task/bug 等項目的發展資料)
團隊的全部行動都在博客園上有所記錄,主要包括如下幾個方面。
6、個性發揮,包括圖文、照片和創意等
完成項目以後,一篇一篇地點開每次隨筆和做業,回首一路走來的付出與收穫,重溫老師當時分享的文章,感觸良多。
增強實踐與執行力。不要欠生活,不要欠工做。出來混,老是要還的,你不會的知識,你懶於想通的東西,老是會在一個必要的時候提醒你、懲罰你。將沒有搞懂的、但願作到的東西,寫在紙上、貼在面前,認真實踐,當你作到的愈來愈多的時候,你就會愈來愈自信,你的層次會提升的。相信我,人與人之間的差距很大,緣由在於自我控制力有差距。
-- 引用自《在失望中尋找但願》
保持積極向上的心態,事在人爲。