trace code tool 以及人月神話

3,341 views
3,122 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,341
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
26
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

trace code tool 以及人月神話

  1. 1. Group Meeting - Some tracing tools Dept. Computer Science and Information Engineering, NTU 20081125 Yi-Siang Huang
  2. 2. Outline <ul><li>Trace code … </li></ul><ul><li>讀書心得 </li></ul>
  3. 3. <ul><li>Trace code … </li></ul><ul><li>讀書心得 </li></ul>
  4. 4. Saying First <ul><li>我們身邊有總是滿坑滿谷的 code … </li></ul><ul><li>為了人類的進步跟世界的和平 苦命工程師通常要「 懂 」那些亂七八糟的 code 到底在幹麼 </li></ul><ul><li>怎樣 trace code 比較有效率呢 ??? </li></ul>
  5. 5. Saying First (cont.) <ul><li>其實有些吐喔可以給我們一隻手 ! </li></ul><ul><li>GUI ?? 非 GUI ????? </li></ul>
  6. 6. Vim + plugin <ul><li>大致有下面幾種 - Ctags, Cscope, taglist, … </li></ul><ul><li>emacs 也有支援 ( 非 vim-only) </li></ul><ul><li>ubuntu 都可以用 apt-get 取得 </li></ul>
  7. 7. Vim + plugin (cont.) <ul><li>先來談談 vim … </li></ul>- ctrl+w n … 分割視窗 - ctrl+w s (:sp) … 開啟同一檔案在新分割視窗 (:e 可開別的檔案 ) - ctrl+w q (:q) … 關閉視窗 - ctrl+w [ ↑|↓] … 切換視窗 - ctrl+w [+|-] … 調整視窗大小 - [[ / ]] … 跳到前 / 後一個函數 - [I / ]I … 放在關鍵字上可跳到同檔案中上 / 下次出現的位置 - gf … 放在 include 的檔案名稱上時即可開啟該檔案 ( :set path+=/usr/include ) ctrl + O 回到原檔案 - [D … 承接上面的 gf, 可展示出 macro 的定義 - :set cursorline … 在 vim 中開啟基準線
  8. 8. Vim + plugin (cont.) <ul><li>Ctags </li></ul><ul><li>幫我們快速找到 變數和函數宣告 的地方 ! </li></ul><ul><li>apt-get ctags 即可安裝 </li></ul><ul><li>產生檔案列表 :find . –name “*.c” –o –name “*.h” > ctags.files 產生 index : ctags –L ctags.files </li></ul><ul><li>使用 : </li></ul><ul><ul><ul><li>Ctrl + ] … 跳到 function body( 可跨檔案 ) </li></ul></ul></ul><ul><ul><ul><li>Ctrl + t … 回到上一次 </li></ul></ul></ul><ul><ul><ul><li>:help tags … 查看說明 </li></ul></ul></ul>
  9. 9. Vim + plugin (cont.) <ul><li>Cscope </li></ul><ul><li>可以看成是 Ctags 的加強版 ! </li></ul><ul><li>下載 cscope_maps.vim 到 ~/.vim/plugin 即安裝完成 </li></ul><ul><li>產生檔案列表 :find . –name “*.c” –o –name “*.h” > ctags.files 產生 index : ctags –bq –i ctags.files </li></ul><ul><li>使用 : </li></ul><ul><ul><ul><li>:cs find … 搜尋 functon ( 還有很多功能 ) </li></ul></ul></ul><ul><ul><ul><li>Ctrl + O … 回到上一次 </li></ul></ul></ul><ul><ul><ul><li>:help cscope … 查看說明 </li></ul></ul></ul>
  10. 10. Vim + plugin (cont.) <ul><li>taglist </li></ul><ul><li>讓 vim 出現新分割視窗協助搜尋 ( 加強 ctags 功能 本質上仍是 ctags) </li></ul><ul><li>apt-get excberant-ctags 並下載 taglist.vim 到 ~/.vim/plugin 即安裝完成 </li></ul><ul><li>產生檔案列表以及產生 index 同 ctags </li></ul><ul><li>會列出該檔案中所有變數以及函數名稱 </li></ul><ul><li>使用 : </li></ul><ul><ul><ul><li>:TlistToggle … 開啟輔助視窗 </li></ul></ul></ul><ul><ul><ul><li>Ctrl + w + [ ←|-> ] … 切換視窗方式 </li></ul></ul></ul>
  11. 11. Vim + plugin (cont.) <ul><li>global </li></ul><ul><li>可和 vim 結合 但比較特別的是可以 產生網頁格式的樹狀結構網頁 ! </li></ul><ul><li>支援多種語言 (php, perl, pyhton, …) </li></ul><ul><li>apt-get global 即安裝完成 </li></ul><ul><li>在要產生程式碼樹的地方下 gtags 即可產生索引檔 接著下 htags –Fnsa 產生程式碼樹 其後會看到 HTML 目錄 </li></ul>
  12. 12. GUI tools <ul><li>大致有下面幾種 - Kscope, Anjuta, Kdevelop, … </li></ul><ul><li>大致上差異不大 ( 都宣稱和 source insight 差不多強 ) </li></ul><ul><li>geany – 一個在程式語法上加強的編輯器 </li></ul>
  13. 14. 人月神話 : 軟體專案管理之道 <ul><li>1975 年初版 </li></ul><ul><li>1995 年發行紀念版 </li></ul>
  14. 15. 我們常常碰到 … <ul><li>容易 delay 而且有抓不完的 bug </li></ul><ul><li>老闆或組長要你畫押進度 但是你不敢 </li></ul><ul><li>不斷不斷的加班 持續很長的一段時間 </li></ul><ul><li>意志消沈 不幸的事情一再發生 </li></ul><ul><li>浪費時間 一堆聰明人淨幹些蠢事 </li></ul><ul><li>想逃但是逃不出來 … </li></ul>
  15. 16. <ul><li>「對航海的人來說 擱淺的船就是燈塔」 </li></ul><ul><li>< 荷蘭諺語 > </li></ul><ul><li>但是 </li></ul><ul><li>「 你所得到的權力並不足以承擔你所扛下的責任 」 < 管理學 > </li></ul>把事情做好 得到更大的權力 承擔更大的責任
  16. 17. 焦油坑 …
  17. 18. 有些糟糕的事情總會發生 … <ul><li>一切都會進行的順利 ! 真的嗎 … </li></ul><ul><li>雖然畫押了 … 但我真的做的到嗎 ? </li></ul><ul><li>人月神話 !!! </li></ul><ul><li>Delay 了 ! 快來人啊啊啊啊啊啊啊啊啊 !!!! </li></ul>
  18. 19. 事實上 … <ul><li>Brooks 定律 </li></ul><ul><li>「 在一個已經 delay 的 project 中增加人手 </li></ul><ul><li>只會讓他更落後 ! 」 </li></ul><ul><li>「人月神話」的迷思 </li></ul><ul><li>花費的時間 </li></ul><ul><li>- 專案有多少連續性限制 </li></ul><ul><li>投注的人力 </li></ul><ul><li>- 可以被切分成多少獨立的子工作 </li></ul>
  19. 20. 優秀的團隊 … ? <ul><li>程式設計師間的生產力差異極大 ! </li></ul><ul><li>經驗多寡 … 影響不如想像中大 </li></ul><ul><li>兩難在於要兼顧 工作效率 跟 概念整體性 </li></ul><ul><li>Harlen Mills 的架構 </li></ul><ul><li>- 如外科手術團隊 </li></ul><ul><li>- 短小精悍 的團隊比較棒 </li></ul>
  20. 21. 所以要專制還是民主 ? <ul><li>保持概念整體性最好的方式就是 </li></ul><ul><li>其出自 少數人 的一致決定 </li></ul><ul><li>架構是「 做什麼 」而實做是「 如何做 」 </li></ul><ul><li>「第二系統」的出現 ! </li></ul>
  21. 22. 巴別塔為何失敗 ? <ul><li>根據記載 巴別塔成功的條件 </li></ul><ul><li>明確目標 有 </li></ul><ul><li>人力 很多 </li></ul><ul><li>材料 足夠 </li></ul><ul><li>時間 沒有限制 </li></ul><ul><li>技術 足夠 </li></ul><ul><li>缺少的是 溝通 和 組織 ! </li></ul>
  22. 23. 要是失敗了該怎辦 ? <ul><li>不需要煩惱是否該先做一個試探性的系統 </li></ul><ul><li>然後將之丟棄 目的只是吸收經驗 </li></ul><ul><li>因為你 一定 會丟掉第一次做出來的東西 </li></ul><ul><li>「 把必然的一次失敗納入正式計畫之中 」 </li></ul><ul><li>放心 ! </li></ul><ul><li>現在在你面前的 spec 一定會改變 ! </li></ul>
  23. 24. 失敗失敗失敗 … <ul><li>修好的 bug 很可能會導致其他 bug 出現 ! </li></ul><ul><li>Pascal : </li></ul><ul><li>「任何事物總是在 最一開始的時候 最完美」 </li></ul>
  24. 25. 大災難啊 … <ul><li>為什麼專案會落後一年 </li></ul><ul><li>因為每次都落後一天 </li></ul><ul><li>程式除了寫給電腦看之外 也是寫給人看的 </li></ul><ul><li>請維持良好的寫作習慣 ! </li></ul>
  25. 26. 有沒有銀彈 !? <ul><li>軟體開發的 本質性 和 附屬性 </li></ul><ul><li>因為本質性 大幅提昇開發速度有難度 </li></ul><ul><li>軟體是人寫的 不是上帝 ! </li></ul>
  26. 27. 人月神話二十年 <ul><li>勿忘初衷 ! </li></ul><ul><li>架構設計師要 綜觀全局 而非細節 </li></ul><ul><li>社會性問題 通常超過技術性問題 </li></ul><ul><li>一些反思 </li></ul><ul><li>- 即使知道這些 開發真能變得更順利 ? </li></ul><ul><li>- 真的沒有銀彈 ?? </li></ul>

×