qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          談?wù)勅绾螒?yīng)對軟件開發(fā)中的需求變更

           令人煩惱的需求變更

            在軟件開發(fā)中,大家都會遇到過這樣的問題:客戶的一個新想法,就推翻了之前與客戶經(jīng)過再三討論而確認(rèn)定下來的需求。如果是功能性需求變更還會讓人容易接受一些,畢竟功能性需求不實現(xiàn)的話,是會大大影響到軟件產(chǎn)品的質(zhì)量。但是一些非功能性的變更會讓人很頭疼,許多是看起來無關(guān)痛癢的、雞毛蒜皮的變更,卻是極為令人無語和無奈,甚至是煩惱和厭惡的。

            (1)什么是軟件需求?

            在IEEE中,軟件需求的定義是:用戶解決問題或達(dá)到目標(biāo)所需的條件或功能。一般包含業(yè)務(wù)需求、用戶需求、功能需求、行業(yè)隱含需求和一些非功能性需求。業(yè)務(wù)需求反映了客戶對系統(tǒng)、產(chǎn)品高層次的目標(biāo)要求;功能需求定義了開發(fā)人員必須實現(xiàn)的軟件功能。所謂非功能性需求,是指為滿足用戶業(yè)務(wù)需求而必須具有除功能需求以外的特性。包括系統(tǒng)性能、可靠性、可維護(hù)性、易用性和對技術(shù)和對業(yè)務(wù)適應(yīng)性等。其中最常見的是軟件界面、操作方便等一系列要求。

            (2)非功能性需求變更的特點

            讓我們從客戶角度和開發(fā)人員角度去看看非功能性需求的特點。首先,有些非功能性小需求從客戶角度看起來工作量不大,但是實際上開發(fā)人員要耗費比較長的時間去完成這些小功能。其次,許多非功能性需求,如界面美觀、操作方便等都是客戶頭腦一熱、或領(lǐng)導(dǎo)一拍腦袋就部署下去的需求,往往是原來在需求分析階段所沒有注意的內(nèi)容。

            其實,非功能性需求是常常被輕視,甚至被忽視的。原因是非功能性需求描述很困難,它很難像功能性需求那樣,可以通過結(jié)構(gòu)化和量化的詞語來描述清楚。在描述這類需求時候,我們經(jīng)常采用軟件性能要好、操作要方便、軟件界面要美觀大方等較模糊的描述詞語。例如,易用性就同時涉及到美工和UI界面、人機工程、交互式設(shè)計、心理學(xué)、用戶行為模式等內(nèi)容。這類描述詞語都是脫離了軟件的執(zhí)行環(huán)境,是對人和相關(guān)的場景的描述,因此很難體現(xiàn)到軟件架構(gòu)設(shè)計和具體的實現(xiàn)中。

            國內(nèi)的很多軟件公司,對于這種情況趨之若鶩,認(rèn)為是負(fù)擔(dān),影響軟件公司的工作安排,工作量以及工作進(jìn)度,直接導(dǎo)致了軟件公司的效益,幾乎是很多軟件公司的最大隱患,因此我們?nèi)绾握J(rèn)識、對待這個普遍存在的問題就成了軟件公司以及員工需要解決的問題;

            1)首先,要從心理上徹底根除對需求變更的恐懼,從認(rèn)識上明確需求變更是軟件開發(fā)過程中不可缺少的部分,從方針上明確需求變更的存在性和必然性;

              a)從軟件公司角度,認(rèn)清自身存在的不足, 客觀面對需求的變更

              b)從職員角度,提高本身的業(yè)務(wù)和技術(shù)能力

            2)從技術(shù)角度上使需求變更的處理簡單化,明確化,增加可維護(hù)性;

              a)使用更好的技術(shù)手段,設(shè)計更靈活以用來適應(yīng)更多變的需求;

              b)使用更完善的軟件工程的理念,讓軟件各個步驟細(xì)化,更易維護(hù)和修改;

              c)使用完善的測試流程,最大的降低需求變更帶來的軟件風(fēng)險;

            3)對需求變更進(jìn)行有效的管理,讓需求變更可以規(guī)范化管理,做到有效的處理需求的變更,用有限的資源獲得最大的效益;

              a)軟件的初期,就要考慮最大限度的減少將來可能存在的需求變更

              b)需求的控制,減少需求的來源,過濾不合理的需求

              c)文檔化管理,有備可查,有據(jù)可依;

              d)合適的公司體制和運作,找到一條適合自己公司發(fā)展的運作體制和管理模式;

            可能大家覺得上面說的話有些空,那么我就從技術(shù)角度上再具體的談?wù)劇?/p>

            就像剛才說過的,需求變更是必然存在的。從技術(shù)的角度來降低或避免需求變更給我們帶來的影響就顯得極為重要。

            1、設(shè)計之初,充分理解需求,更好對需求進(jìn)行整理和規(guī)劃,預(yù)測可能變更的需求。

            需求難做,業(yè)務(wù)難做,非功能性的需求變更更是難做。所以當(dāng)我們在收集了用戶需求后,不僅僅是簡單的分類,然后按部就班的開發(fā),而是要深入挖掘需求,一些看似固定業(yè)務(wù)的需求,可能由于業(yè)務(wù)的變更而使得你的系統(tǒng)不能使用。我們要做的就是拆分需求,把一些可能會發(fā)生變化的需求拆開,改成工作流程可配置的。就像面向過程轉(zhuǎn)向面向?qū)ο蟮哪菢樱嫦蜻^程是死的,而面向?qū)ο笾匦陆M合后,就特別簡單。

            就說說我們剛做的這個收銀系統(tǒng)吧,用戶要求結(jié)賬時,要打印小票,并自動打開錢箱。這就是最最原始的需求。但是我們最終把它做成了這樣:打印機是外部設(shè)備,可以增刪和配置;打印次數(shù)可配置;打印樣式可配置;打印時,要判斷打印機狀態(tài),非正常狀態(tài)要給出各種提示(不一一列舉);錢箱可以自動打開,也可以手動打開。另外還設(shè)定了許多功能配置:如禁用/啟用全部打印機,禁用/啟用某個打印機,是否打印訂單小票,是否自動打開錢箱,是否顯示錯誤提示信息等等(如圖)。

            我們把這個固定的需求,拆分成可配置的,這樣就把這個需求可能的變更已經(jīng)分析的差不多了。不論它怎么變化,我們的應(yīng)對都會變得從容。就在前2天部署的時候出現(xiàn)問題了,打印機是新買的,不只是什么原因,在打印多個換行之后,就會失敗,不能繼續(xù)打印。這個問題是我們所料不及的,因為我們測的我們這里的所有打印機,都完美打印,而新買的也是同品牌,同型號的打印機。最終分析出這個問題后,我們不用更改系統(tǒng),只要修改一下小票樣式配置,就可以完美打印了。

            小票樣式設(shè)定(圖):

            硬件設(shè)置(圖):

            單個打印機設(shè)置(圖):

            功能設(shè)置(圖):

            2、系統(tǒng)完成之后,客戶再提新需求后,要分析這個需求的深層次含義,分析客戶要的到底是什么。對于一些需求,如果適合于大部分客戶,而且改動很少,就可以完成,那么可以在下個升級版本中集成。而對于某些非功能性的需求,改動太大,或者基本的核心功能都需要更改的話,那么就不要先去急著實現(xiàn),而是放置起來,等待系統(tǒng)需要進(jìn)行大的升級或者重構(gòu)時,再考慮添加。而且要防止客戶濫用提需求的權(quán)力,對于一些不合理的需求,還要去引導(dǎo)客戶,讓他們理解這個功能的不合理的地方,從而重新修改需求或者放棄。


          posted on 2013-05-15 10:17 順其自然EVO 閱讀(312) 評論(0)  編輯  收藏 所屬分類: requirement and analysis

          <2013年5月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 诸城市| 河间市| 平罗县| 库伦旗| 普安县| 武陟县| 微博| 中山市| 绥芬河市| 保山市| 喀喇沁旗| 攀枝花市| 孟州市| 芦山县| 神池县| 牡丹江市| 庆元县| 长汀县| 开封县| 茌平县| 光泽县| 奉贤区| 南开区| 阿勒泰市| 洛南县| 沾益县| 黔江区| 平和县| 静海县| 化州市| 鹤岗市| 瑞丽市| 庐江县| 巴青县| 阿城市| 衡阳县| 当雄县| 朝阳市| 中牟县| 紫金县| 彝良县|