<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 九、輕松制訂軟件進度表 去年十月,美國東北部充斥著一個名為Acela產品的廣告.這是一列由波士頓開 到華盛頓的新開快速火車.到處都是電視廣告,大廣告牌和海報.你會認為這么 多廣告一定創造出一些對Amtrak新快運服務的需求 可能會吧.不過Amtrak根本沒有機會知道.Acela—延再延,結果整個營銷活動 在Acela服務推出前就結束了.這讓我想起某位產品在推出前一個月被媒體大加 贊揚的營銷經理,他對我說:”真是大出風頭!只可惜你還買不到這玩意!” 那些睪丸素過剩的自大狂游戲公司總喜歡在自家網站上夸稱,下個游戲等”好了 “自然就會推出.至于時程?我們才不要那討厭的東西!我們是超酷的游戲程序員! 大部份公司可沒這種福份.問問蓮花公司吧.他們的Lotus 123 3.0版初推出時需 要用80286計算機,這在當時可不怎么普遍.結果就把產品延后16個月推出,努 力讓程序能在8086的640K內存限制下執行.等他們完成時,微軟在Excel的開發 上已經領先了 16個月了,更諷刺的是那時候8086已經完全過時了! 在我寫這篇文章時,Netscape的5.0版web瀏覽器幾乎已經拖了兩年.部份原因是 他們下了個自殺式的決定,把所有程序丟掉重頭開始.同樣的錯誤已經讓安信 達(Ashton-Tate),蓮花,和蘋果的MacOS成為軟件歷史中的灰焊.Netscape瀏覽 器的占有率在這段期間由80%左右掉到大約20%,而且完全無法對競爭者有任何 反應,因為他們最重要的軟件產品已經被拆成1000片散落在地上,什么事都做 不了.其他因素都不夠看,光這一個爛決定就成為Netscape炸爛自己的核彈 了.(Jamie Zawinski’s世界聞名之怒詳述了整件事). 所以說你一定得定時程.幾乎沒幾個程序員想做這件事.以我的經驗來說,絕大 部份人都完全不訂時程,直接做了才說.至于那少數幾個有做的,多是因為老板 一定要,只好敷衍著做一做,而且除了那些同時相信〃軟件項目一定會延誤〃及” 幽浮”的上級管理階層外,沒人真的相信排出來的時程. 那么為什么沒人要訂時程呢?主要原因有二.首先是執行起來很痛苦.其次是沒人 認為值得做.明明知道排出來不準確,為什么要費事去做呢?大家都為時程一定 是錯的,而且時間過得愈久錯得愈離譜,所以何必白費工夫呢? 下面提供一個簡單無痛的方法,可以訂出確實無誤的時程. 1)使用微軟Excel.不要用像微軟Project這種專門的程序.微軟Project的問題 在于它假設你要花大量時間處理相關連性(dependency).所謂相關連性是指有 兩件工作,第一件工作必須在第二件工作開始前完成.我發現就軟件而言,相 關連性實在是很明顯,完全不需要花工夫正式追蹤. Project另一個問題是假設你需要能按一個小按鈕就〃重新均衡調整 (rebalance)”時程.這表示程序會重新安排把工作指派給不同的人.這就軟件來 說完全行不通.程序員是不能互換的.Rita的程序錯誤交由John來修正的話得花 上好幾倍的時間才行.另外如果你把負責用戶接口的程序員拉去處理WinSock問 題,她會卡在那里花整個星期熟悉WinSock程序設計.重點是Project是設計給建筑辦公大樓用的,不是寫軟件用的. 2)簡單就好.我用的時程表標準格式簡單到你一定背得起來.一開始只要七個字 段就好了: 如果開發人員不只一個,你可以讓每個人有自己一個表,也可以加個字段標出 負責各項工作的人員. 3)每個功能應該包含多項工作.所謂功能就像是在程序中增加拼字檢查.增加拼 字檢查包含好幾項程序員必須做的工作.排時程最重要的部份就是排出這個工 作表.接下來是個基本原則: 4)只有實際要寫該程序的程序員才能排出該項的時程.任何由管理階層排好時 程交由程序人員執行的系統一定都會失敗.只有實際執行工作的程序員才能找 出完成功能所需的步驟.也只有這個程序員才能估計每個步驟所需的時間. 5)把工作分得很細.要讓時程真正產生作用,這可是最重要的一環.分好的工作 應該是以小時計而不是以天計.(當我看到以天甚至以周為單位的時程,我知道 這根本是玩假的).你可能會認為把工作細分的時程只不過是精確一點而已.錯! 錯得離譜!當你訂時程時先由大項工作開始,然后再細分出細項工作,就會發現 結果完全不一樣,而不光是精確一點而已.這樣的時程出來的是完全不一樣的 數字.為什么會這樣呢? 當你必須訂出細項工作時,就得強迫自己實際地找出確實要進行的步驟.要編 寫foo這個子程序.要建立某些對話框.要讀取某某檔案.這些步驟都很容易估 計,因為你以前寫過子程序建過對話框,也讀過某某檔案. 如果你隨便劃分出大項工作(實作出文法修正功能),表示你根本沒有真正思考過 要做的事情.而如果你并未真正思考過要做的事情,根本就不可能知道需要多 久才能完成. 依據經驗來看,每項工作耗時應在2到16小時之間.如果時程上有項工作需要40 小時(一周),表示細分得還不夠. 細分工作還有另一個理由,就是能逼你設計那些要命的功能.如果你排了3周去做 “Internet整合〃這樣的粗略功能,你就完蛋了.如果你必須找出要寫哪些子程 序,就會逼自己把該項功能弄清楚.因為被迫提早進行這種程度的規劃,所以 就能消除軟件項目中大量不穩定的成份. 6)記錄最初和目前的估計.當你把某件工作第一次排進時程時,先估計所需時 數并填入〇「ig[inal] Est[imate]以及Cu「「[ent] Est[imate]字段中.當計劃進行時,你會發現某件工作所需的時間比估計的更長(或更短),就可以依需要更新 Cu「「Est字段.這是由錯誤學習并教育自己準確估算工時的最佳作法.大部份程 序員并不知道如何估計工時.這是不要緊的.只要你持續學習并隨時更新時程, 時程就會確實作用.(你可能必須削減功能或延期,不過時程本身還是能運作無誤, 它會一直提醒你該砍功能或是必須延期了).我發現大部份程序員只要一年工夫 就能排出很好的時程. 當某項工作完成時,Cu「「Est欄的值會和Elapsed欄一樣,而Remain欄會變成0. 7)每天更新耗時(elapsed)欄.你不用真的看著馬表寫程序.只要在回家前或鉆 到桌下休息前(如果你是那些瘋子之一的話),假裝自己已經工作8小時(哈!)并 列出所做的工作,再把8小時分配好填入工作對應的耗時欄中.Excel會自動計算 剩余欄的內容. 同時還要依據現實狀況更新各工作的Cu「「Est欄.每天更新時程應該只需要約兩 分鐘.所以才會說這是無痛的時程排法–快速又容易. 8)加上國定假日,休假等等項目.如果整個時程耗時約一年,每個程序員可能會 休10到15天的假.時程中應該加一項叫〃休假〃的功能,用作國定假日或其他會 消耗人們時間的事情.這樣就可以把剩余時間加總起來除以40 (就是考慮一切之 后的所需工作周數),計算出出貨的日期. 9)把除錯時間排入時程!除錯是最難估計的.回想一下你前一個專案.除錯所占的 時間很可能是把程序寫出來的一到兩倍.所以時程中一定要加這一項,而且這 有可能是最大的一項. 實際的作法如下.讓我們假設一位開發人員正在做某件工作.〇「ig Est是16小時, 不過到目前為止已經用了 20小時,而且恐怕還要再做10小時.所以開發人員在 Cu「「Est和耗時欄分別輸入30及20. 等到達里程碑(milestone)時,這所有的〃落后〃加總起來可能會有相當數量.理 論上為了因應這些延誤,我們必須削減功能才能準時上市.幸運的是可以削減 的第一項功能就是名為緩沖(buffer)的功能,而這個項目一開始就排了很多任 務時. 原則上,開發人員會在寫程序時除錯.程序員在應該除錯時絕對不該寫新程序. 基于兩項原因,隨時都應該讓錯誤數目盡可能的少: 1)在寫出程序的同一天除錯會比較容易.如果一個月后當你忘記程序運作細節 時再來除錯,就會變得非常困難而且要花很長的時間. 2)修正錯誤就像科學活動.不可能估計何時能有發現并解決問題.如果隨時都只有 一兩個主要的問題,表示未來無法估計的項目不多,所以很容易估算產品推出的時間.反過來說,如果主要的問題有幾百幾千個,根本就不可能預測什么時候 才能把問題全部修好. 圖: [http://chinesetradjoelonsoftware.com/Images/Painless_Software_Schedules.gif](http://chinesetradjoelonsoftware.com/Images/Painless_Software_Schedules.gif) 如果開發人員總會在寫程序時就把問題修好,為什么還要加上除錯項目呢?有 道理,不過即使在寫程序時盡量修好所有的問題,在到達里程牌時,測試人員 (內部或外部)總還是會找到真正困難的錯誤,難免要有許多除錯的動作. 10)把整合時間排入時程中.如果你的程序員不只一位,難免會有兩人不一致的 事情需要協調.他們會各自建立功能近似的對話框,這當然需要協調.必須有人 細查所有菜單,鍵盤快捷方式,工具欄工具等等,并且整理及組織所有大家不得不 加的新菜單項.另外只要有兩個人把程序登入就會出現編譯錯誤.這也得有人修 正,而且應該列入時程. 11)在時程中加上緩沖時間.事物總是容易用完.你可能要考慮兩種重要的緩沖. 第一種:預防工作耗時超過預期的緩沖.第二種:針對未預期但必要的工作的緩 沖(這通常是因為管理階層決定某功能超級重要,絕對不能等到下一版). 你可能會很驚訝地發現,休假,國定假日,除錯,整合還有緩沖時間加起來超過實際 做事的時間.如果被嚇到表示你程序寫得還不夠久,不是嗎?你要忽略這些項目 的話后果自行負責. 12)絕對不要讓經理叫程序員縮減估計時間.很多菜鳥軟件經理認為能用精細” 緊密(短得不怍實際)”的時程,”激勵〃程序人員做得更快.我認為這種激勵根本 是腦袋壞掉.當我進度落后時,我會覺得內疚消沈毫不積極.當我進度超前時, 會非常快樂而且充滿生產力.時程可不是玩心理游戲的地方. 如果你的經理要求你縮短估計時間,這里告訴你要怎么做.在時程表上加一個 叫Rick的估計(當然是假設你叫Rick)的新字段.把你的估計填進去.隨便經理怎 樣要求,直接把她定的時間填入Cu「「Est字段后就不要管了.等項目經束時再看 看誰的估計比較接近實際狀況.我發現光是威脅說要這樣做,效果就很驚人了, 特別是當你的經理了解到,他們剛參加了一個看你能做得多慢的競賽時更是有 效! 為什么不適任的經理們總會試圖要程序員縮短估計時間呢? 當項目開始時技術經理會去見經營人員,然后會得出一個他們認為三個月(實際 上要9個月)做得到的功能列表.如果你認為寫程序不需要先想清楚所需步驟, 然后估算出來某工作需時n,實際上很可能會耗時超過3n.在訂定真正的時程時, 把所有工作加總起來,就會了解項目耗時遠比想象中多得多.歡迎光臨真實世界. 不適任的經理的處理方法是想辦法讓員工做得更快.這一點其實不太實際.你或 許能雇用更多員工,不過他們需要時間適應,可能前幾個月都只有一半的效率 (還會拖慢必須引導他們的其他人員工).而且無論如何,在這個業界得要6個月 才找得到好的程序員. 你可能可以讓員工在一年內全力以赴,暫時提高10%的初版程序(譯注:指未整理 除錯的程序)產量.算不上是什么大躍進,而且這樣有點太短視了. 你可能可以懇求員工不計辛勞超努力地工作,提高20%的初版程序產量.砰!可惜 除錯時間倍增了.真是了不起的自爆蠢方法. 不過你絕對絕對不可能由n變成3n,如果你自認有這種本事,請寫信告知貴公司 的股票代碼好讓我放空. 13)時程就像積木.如果你有一堆積木,積木太多塞不進箱子里.這時候你只有 兩個選擇:找個大點的箱子或拿掉一些積木.如果你認為能在6個月內完成出貨, 可是時程上排的卻是12個月,同樣的也只能延后出貨時間或是刪掉部份功能. 積木是不能壓縮的,如果你自認為可以,那只不過是在騙自己,徒然讓自己失 去一個真正能展望未來的好機會. 另外要知道,如此維護時程還有其他好處,就是能逼你自己刪除功能.為什么 說這是好處呢?假設你有兩個功能:其中一個非常有用而且能讓產品變得超棒 (比如Netscape 2.0里的table),另一個很容易而且程序員很想寫(如BLINK標 簽),不過卻啥用處也不具備市場價值. 如果你不訂出時程,程序員會先做簡單/有趣的功能.然后等時間用完時你完全 沒得選擇,只能延后時程來完成有用/重要的功能. 如果你在開始作業前就排出時程,就會了解必須削減某些項目,自然會把容易/ 有趣的功能砍掉而做有用/重要的功能.這樣子強迫自己削減某些功能,就能完 成更強更好的產品,不但功能更好而且又更早推出. 我想起Excel 5的制作.我們最初的功能列表非常龐大,遠遠超出我們的時程. 我們都在想:天啊!這些全都是超級重要的功能!沒有宏編輯精靈我們怎么活得 下去呢? 結果是我們沒得選擇,所以只好配合時程把功能刪到不能再刪.每個人對于削減 功能都很不爽.為了安撫自己的感覺,我們只好告訴自已說這不是在刪除功能, 只不過因為這些功能沒那么重要,所以延后到Excel 6而已. 當Excel 5幾近完成時,我和同事Eric Michelman開始寫Excel 6的規格.我們坐 下來審視由Excel 5刪除移過來的”Excel 6”功能列表,當我們發現這些被刪除的 功能爛極了時真的是被嚇到了.里面竟然沒有一項值得做.我認為即使是接下來 的三個版本,也完全沒有必要制作這些功能.配合時程削減功能是我們所做過 最好的事.如果我們沒有這樣做,Excel 5可能會耗雙倍時間而且包含50%無用 的垃圾功能.(我絕不懷疑這就是Netscape 5/Mozilla現在的狀況:他們沒有時程 也沒有明確的功能列表,沒有人愿意削減功能,所以永遠無法推出.等他們能 推出時,里面會有很多IRC客戶端等根本不該做的無用功能. ## 附錄:你該知道的Excel二三事 用Excel管理軟件時程如此好用,原因之一就是對大部份Excel程序員而言, Excel的唯一用途就是維護軟件時程表!(只有少數程序員會用沙盤推演 (what-if scenario)規劃的方式做事的…這些程序員! 共享列表利用檔案選單的共享列表命令可以讓大家同時開啟并編輯檔案.由于 整個團體應該會持續更新時程,這個功能幫助很大. 自動篩選這是個篩選時程的好方法,舉例來說,你可以只檢視所有指派給你的 功能.再加上自動排序功能,就能依優先度順序檢視所有指派給你的功能,這 實際上就是你的工作清單.夠酷吧! 樞鈕分析表這是個檢視摘要及多重匯總表格的好方法.舉例來說,你可以做一 張圖顯示各優先度下各個開發人員的剩余時數.樞鈕分析表就實在是個大創新. 你一定要學會怎么用樞鈕分析表,因為它能讓Excel增強一百萬倍. Excel分析工具箱中的WORKDAY函數是個在無痛時程中計算日歷天數的好方法.
                  <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>

                              哎呀哎呀视频在线观看