<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [Trac 經驗談之(1)雜談篇](http://blog.csdn.net/lanphaday/article/details/6609256) [Trac 經驗談之(2)雜談篇補遺](http://blog.csdn.net/lanphaday/article/details/6658032) [Trac 經驗談之(3)工作流篇](http://blog.csdn.net/lanphaday/article/details/6620098) [Trac 經驗談之(4)報表篇](http://blog.csdn.net/lanphaday/article/details/6641391) [Trac 經驗談之(5)插件篇](http://blog.csdn.net/lanphaday/article/details/6654027) [Trac 經驗談之(6 完)插件篇補遺](http://blog.csdn.net/lanphaday/article/details/7100118) # Trac 經驗談之(2)雜談篇補遺 賴勇浩(http://laiyonghao.com) ![](https://box.kancloud.cn/2016-04-28_5721b38584b81.jpg) ### 教訓 ### 一定要有模板 嗯,我說的是每一個任務單(ticket)的描述。如果沒有一個描述模板,你得到的很大可能是一堆完全不知所云的文本。使用 TicketExtPlugin 可以很方便地做到這一點(見插件篇)。下面是我使用的模板,其中需求和改進的模板由我“抄襲”自禪道。 ~~~ =======================改進========================= 建議參考的模板:作為一名<某種類型的用戶>,我希望<某個功能的描述>更改為<另一個功能的描述>,這樣可以<開發的價值>。 =======================需求========================== 建議參考的模板:作為一名<某種類型的用戶>,我希望<達成某些目的>,這樣可以<開發的價值>。 =======================缺陷========================== 缺陷表現: 重現步驟: 期望結果: ~~~ ### 一定要定制報表 多問一下用戶,比如老板、經理、制作人和測試人員,了解他們想要弄明白什么信息,然后建立起相關的報表給他們方便地使用。這樣才能更好的讓他們跟進項目的狀態,推進項目的進展。 ### 不要定義太多字段 因為 Trac 有 Custom Fields 概念,用戶可以隨意定義字段,事實證明過多的字段一點用處都沒有。只有專業的測試人員會去設置類似功能組件、職能組件之類的選項,產品策劃等人通常無視這些“小細節”,甚至優先級、里程都都是空的,或者默認的。 ### 沒有必要設置開始、結束日期 現在我們有這樣的選項的,但在我們團隊,超過 9 成的任務單沒有設置兩個字段,我相信設置了這兩個字段了的任務單,也會有 9 成都沒能在這個期間內完成。對于開發人員來說,能夠在預設的里程碑里完成任務單,就相當不錯了。 ### 沒有必要安裝甘特圖、日歷圖等插件 是的,在老板看來,盯著甘特圖好像會有一種成竹在胸、一切盡在掌握的感覺。鼓起膽氣跟老板說:放棄這自我良好的感覺吧,這玩意根本不準。另外霍夫斯塔特定律必須記在心頭:軟件開發的時間總是比想象的時間長,即使注意了霍夫斯塔特定律也是如此。出處:[http://en.wikipedia.org/wiki/Hofstadter%27s_law](http://en.wikipedia.org/wiki/Hofstadter%27s_law)。 ### 搜索 Trac 的搜索相當不給力,比如你搜索“中文”兩個字時,它會告訴你沒有匹配的結果,并給出一條警告: ~~~ 警告: 搜索查詢太短。查詢必須至少包含 3 字符。 ~~~ 操蛋啊,尼瑪啊,咱這是中文啊……兩個字符可以表示整個世界了有木有!但是目前我還沒有搜索到有效的解決方案,如果你有辦法解決這個問題,請留言告知。謝謝。(2011年8月4日更新:flyinflash 朋友在本文后留言,提到了解決方案,我把它整合到了接下來的小技巧這一節中)。 ### 小技巧 ### 選擇 owner 只要把 Trac.ini 的設置改一下即可: ~~~ [ticket] restrict_owner = true ~~~ 不過這不是完美的解決方案,因為 Trac 默認是顯示注冊的賬號,這種英文字母+數字組合的名字對中國人太不友好了,比較好的方案是裝插件,見“插件篇”。 ### 繼承 Trac.ini 經常要編輯 Trac.ini,容易出錯。其實在 Trac.ini 加一個節 [inherit],然后填好 file 設置,Trac.ini 就能從指定的 file 中繼承設置。 ~~~ [inherit] file = /path/to/global/trac.ini ~~~ 如果有多個配置文件,那么需要用逗號(,)隔開。如果 Trac.ini 中又有相同的節項的話,父配置就會被 override,所以最佳實踐是 Trac.ini 只有 [inherit] 這一節,然后所有的具體設置都放在不同的文件中給 Trac.ini 繼承。 ### wiki 轉 html 有時候需要把純文本格式的 Wiki 轉成 HTML 頁面,比如發表到博客什么的。這時候可以使用這個方案:[http://trac.edgewall.org/wiki/CookBook/Scripts/StandaloneWiki2Html#no1](http://trac.edgewall.org/wiki/CookBook/Scripts/StandaloneWiki2Html#no1) ### 搜索(2011年8月4日更新) 把 trac.ini 中的 [search] 這一節進行設置,即可搜索較短的單詞,如中文的“義烏”,解決上文說的搜索警告的問題(感謝 flyinflash 的貢獻)。 ~~~ [search] min_query_length = 0 ~~~ ### Hacking 在這個系列發表之后,朋友 @SparkleZeng 在微博上評論說(見:[http://weibo.com/1764732124/xeT2KivsG](http://weibo.com/1764732124/xeT2KivsG)):“trac最大的好處是你可以二次開發,最大的問題是你需要二次開發才用的比較舒服。”說得太對了!所以對于 Trac 用戶來說,Hacking 是必經的階段,可能只是翻開源碼直接 hard code 幾行,也可能是編寫一個插件來增進體驗或增加功能。 本來我計劃獨立地寫一篇來講 Hacking Trac 這個事的,但在寫這個系列的過程中我認識到還是介紹“使用”經驗為好,所以就把這一篇縮寫成一節。與使用 Trac 不同,想要 Hack 它,至少要讀 Trac Developer Documentation([http://trac.edgewall.org/wiki/TracDev](http://trac.edgewall.org/wiki/TracDev)),而且有不少代碼必須要了解。簡單地直接在源碼那里 hard code 幾行就不需多方了,只要用好 find/grep 這兩條命令就差不多了。 對于想要編寫插件(Plugin)的家伙來說,Trac Component Architecture([http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture](http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture))是必讀的,通過這篇文檔才能了解到 Trac 的心臟—— trac.core 是如何實現一個易于擴展微型的組件內核的(顯然,這對于我們設計自己的應用也有很大的借鑒和啟發作用)。 ![](https://box.kancloud.cn/2016-04-28_5721b385a61f8.png) 清楚 Trac 組件架構的內核機制以后,相信大家對如何編寫插件實現自己的功能已經胸有成竹了。這時候需要了解 Trac 的 Request Handling 流程([http://trac.edgewall.org/wiki/TracDev/RequestHandling](http://trac.edgewall.org/wiki/TracDev/RequestHandling)),這里有兩個漂亮的時序圖交待了整個請求處理的流程。 躍躍欲試的你現在想動手了吧,不著急,先看一下 Writing Plugins for Trac([http://trac.edgewall.org/wiki/TracDev/PluginDevelopment](http://trac.edgewall.org/wiki/TracDev/PluginDevelopment)),你可以在這里看到基礎代碼模板,如何發布、調試,還有你必須了解的 Extension Points([http://trac.edgewall.org/wiki/TracDev/PluginDevelopment/ExtensionPoints](http://trac.edgewall.org/wiki/TracDev/PluginDevelopment/ExtensionPoints))。 別以為你現在就可以開始了哦,如果你需要在數據庫存儲數據,那你還要了解清楚它的 Data Models([http://trac.edgewall.org/wiki/TracDev/DataModels](http://trac.edgewall.org/wiki/TracDev/DataModels))和Database Scheme([http://trac.edgewall.org/wiki/TracDev/DatabaseSchema](http://trac.edgewall.org/wiki/TracDev/DatabaseSchema))。 最后,為了讓全世界人民都可以用上你編寫的插件,你還需要了解一下它的本地化技術([http://trac.edgewall.org/wiki/TracL10N](http://trac.edgewall.org/wiki/TracL10N))。好吧,現在你可以動手了,最后送你一份 Trac API Docs一路伴隨你([http://trac.edgewall.org/wiki/TracDev/ApiDocs](http://trac.edgewall.org/wiki/TracDev/ApiDocs))。 2011年8月4日更新:flyinflash 留言說:Trac開發文檔可能有時會讓人困惑,Plugin 和 Component 有時指同一樣東西,應該加備注。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看