1. 程式人生 > >開發過程中如何理解好一個專案的需求

開發過程中如何理解好一個專案的需求

這裡的軟體,可以是個小程式、小工具,可以是個框架、元件,也可以是個系統。

1 軟體的理想

對很多開發人員來說,需求是個比較籠統、模糊的概念。如果不在開發運維的過程中,多揣摩多思考,那麼需求這個東西就會變的越來越陌生,甚至覺得不那麼重要,不那麼相關!

那麼到底需求是什麼?

我說——需求,是軟體的理想!“做人如果沒有理想,跟鹹魚有什麼區別!”同樣,軟體也應該有軟體的理想,沒有理想的軟體連鹹魚都不如,會成為一坨si,一坨開發人員“煩”,運維人員“怕”,使用者“罵”的一坨si!

2 客戶需求是衡量軟體的最低標準

既然,談到了理想,那麼什麼樣的理想?誰關心這些理想?

這裡寫圖片描述

有圖可見,軟體系統的利益攸關方為: 開發人員、運維人員、客戶;軟體不單單是客戶的軟體,還是開發人員的親兒子,運維人員的好兄弟!在軟體系統產生之前,每一方對其都應該是有期待、有幻想的,這些期望和幻想便是軟體的理想,就是需求!

某次年會上,一位銷售舉杯向研發敬酒,說,“我們的工作是向客戶撒謊,而你們的工作就是讓謊言成為現實!”這時,搞運維的小夥伴們搖著頭,一臉憂傷。賣掉軟體,只不過是萬里長征的第一步,部署,更新,升級,故障修復,問題分析,效能評估,等等等等,路還遠著呢!

為什麼要提devops,就是因為很多人懈怠了、麻木了,以為滿足客戶需求就萬事大吉了!

要知道,需求 ≠ 客戶需求!客戶需求是衡量一個軟體的最低標準!

軟體的理想,應該是客戶滿意,運維放心,開發喜愛,大家好才是真的好!

3 做一名高尚的開發人員

這裡寫圖片描述

開發人員是個集合概念,由一個個的程式設計師組成。相對於軟體來說,“開發人員”這個集體並沒有想象中那麼穩定,今天A走了,明天B來了,那麼就要進行“知識交接”。常常是,軟體還在賣、在不斷擴充套件、在運營,可開發軟體的程式設計師卻是換了一茬又一茬。另外 A 開發了 X 模組,有了bug,可能需要 D 來分析排查,那麼 D 就要理解 X 的邏輯和機制,這裡也涉及到“知識交接”。後續,可能又 C 負責系統的重構,那麼 C 就要對系統的前世今生有個徹徹底底的認識!

A 希望搞“敏捷”,去文件化,什麼設計文件、架構圖、介面模型的,統統簡化,手裡拿著一份客戶需求,不管三七二十一,就是幹!什麼單元測試,老子的程式碼不用測!什麼,想了解細節,統統去看程式碼!“我死之後,管他媽的洪水滔天!”這是很多程式設計師的心裡寫照,因此命名不講究,風格不統一,註釋很敷衍,文件殘缺不全,設計時毫無原則 。。。。

B、C、D 統統懵逼,齊聲說——我們的軟體應該是有理想的!我們應該做一名高尚的開發人員!有理想、有追求、有節操,為偉大的共產主義事業,奮鬥不息!

這裡寫圖片描述

易理解很重要!

在開發過程中,程式設計師應該多向開源軟體看齊,開源軟體有很多好的原則、習慣、正規化,尤其是在易理解性上。當我們在閱讀和學習開源軟體時,我們對它有什麼期望呢?希望有詳細的文件,比如,設計文件,介面文件,模型文件,最好哪位大神再寫點《xxx原始碼分析》的文章,設計文件最好深入淺出,圖形並茂,最好有範例,等等等等。使用或學習某些元件、框架後,常常會說,xxx好重啊,難懂,沒資料啊,太難用等等。所有這些期望或評價,都關乎軟體的可理解性!

子曰:己所不欲,勿施於人。在軟體開發時,同時應該做到“己所欲,施於人”。

        1 缺陷處理時的開發人員;
        2 接手後續開發任務的開發人員;
        3 學習軟體系統的新員工;
        4 自己;

如果,前期為了趕進度,特別忽視軟體在可理解上的重要意義,那麼後期任務交接、缺陷處理和功能擴充套件的時候,必將付出血的代價。

易擴充套件是一個循序漸進的過程,可能還要與重構相結合,是不斷髮現設計或結構上的問題,不斷優化的過程。就像網站的結構一樣,從單伺服器,到業務儲存分離,再到分散式,是在需求的驅動下,慢慢完善。易測試,也是軟體開發中至關重要的一面。

4 運維人員的憂傷

毫不誇張的說,運維幾乎佔了軟體整個生命週期的全部,相較之下,開發不過是“十月懷胎”。一個軟體,會是長命百歲,還是少小夭折,運維期很重要!

部署、配置、更新、升級,統計、評估、業務跟蹤、問題定位!如果在開發時,沒有站在運維的角度去思考、去設計,那麼這樣的軟體對運維人員來說將是災難。這裡的運維人員,不單單是一線的技術,還包括後臺的研發,研發將會被無窮無盡的bug搞的懷疑人生!

這裡寫圖片描述

在運維人員眼中,怎樣的軟體才算好軟體呢?

易管理:部署方便,配置靈活,最好能提供多種模式,有“一鍵式”的傻瓜模式,也有高階模式,用起來很有成就感的那種!快速恢復的能力,當出現故障的時候,能及時恢復!

易度量:有時跟現場技術交流時,常常聽到,“慢”、“卡頓”,等等定性的,主觀的詞彙,為什麼呢?就是因為軟體自身是不可度量的。是io瓶頸,還是cpu瓶頸,負載到底多大?介面使用率,資源佔用率,這些資訊必須是軟體自省的。只有這樣才能提高運維的效率。

比如,二八定律,系統介面,無論是對外介面還是內部介面,肯定有些是頻繁被呼叫的,有些甚至從來都沒被用過,那麼介面使用率就很重要,對後續優化,介面重構,都很有意義!

易分析,其實運維過程中,大部分的工作就是分析,包括系統診斷,問題檢測,日誌系統,業務跟蹤系統,效能評估系統,資源統計系統。這些模組都不是必須的,但是有的話就會非常利於運維!

5 客戶不懂軟體

這裡寫圖片描述

客戶: 可用性,可靠性(穩定,安全,好用不貴),易用性

可用性,就是滿足客戶的功能性需求,解決客戶的現實問題!是對軟體開發人員最樸素、最坦誠的要求,恰如“女的,活的”這般的相親需求。

可靠性,要求軟體穩定、健壯,安全,正確,不要太嬌貴了,有點壓力就down;也不要太馬虎了,時不時就給點錯誤資料;更不能太隨便了,門戶大開,對非法入侵毫無抵抗力!

易用性,是個相對高階的需求了,是種主觀的、體驗式的、卻又極其重要的衡量標準。為什麼大家更喜歡用支付寶,而不是各大銀行的app客戶端?

總結

本文主要是作為一個引子,來更接地氣的說明什麼是需求,有那些重要的需求。關於如何去完成這些需求,是一件非常複雜,困難的事情,網路上有很多資料,資源,用來說明如何實現擴充套件性?如何實現可維護性?易用性等等。只有結合自己的工作經驗,與有針對性的思考,才能把網上的技術分享變成自己的知識財富!

接下來,我也會結合自己的理解逐個去總結。

本文借鑑博主為墨城之左的部落格文章。

相關推薦

開發過程如何理解一個專案需求

這裡的軟體,可以是個小程式、小工具,可以是個框架、元件,也可以是個系統。 1 軟體的理想 對很多開發人員來說,需求是個比較籠統、模糊的概念。如果不在開發運維的過程中,多揣摩多思考,那麼需求這個東西就會變的越來越陌生,甚至覺得不那麼重要,不那麼相關! 那麼到底需求是什麼?

android studio 開發過程怎麼解決同一個專案下,兩module之間的相互訪問

        最近,想用google自己的工具zxing開發一個能夠實現二維碼掃描app,但是將執行匯入之後zxing能夠獨立執行,但是主module訪問執行出了問題,老是報錯,蒙了好幾天了,想從軟體開發牛人哪裡獲取一點經驗,對同一專案下module之間能夠實現相互訪問

前端爬坑日記(1),你在初入vue專案開發過程可能會掉進的坑!

這篇文章是記錄我在vue專案開發中遇到的各種巨坑,希望看了能對你有一些幫助,這篇文章會長期更新 1.Vue中使用sass 首先通過以下程式碼安裝sass的依賴: npm i sass-loader node-sass - s 然後在webepack.base.conf.js目錄下配置

基於vue框架專案開發過程遇到的問題總結(一)

(一)關於computed修改data裡變數的值 問題:computed裡是不能直接修改data裡變數的值,否則在git commit 時會報錯 解決:在computed裡使用get和set來進行獲取和修改data變數,(參考下圖) (二)computed裡監聽陣列

專案開發過程什麼是開發環境、測試環境、生產環境、UAT環境、模擬環境?

專案開發過程中什麼是開發環境、測試環境、生產環境、UAT環境、模擬環境? 最近在公司專案開發過程中總用到測試環境,生產環境和UAT環境等,然而我對環境什麼的並不是很理解它的意思,一直處於開發階段,出於好奇,本人蒐集了自己所瞭解的一些知識分享給各位,如果有不齊全的地方,請在評論下方留言! 一

Unity專案開發過程常見的問題,你遇到過嗎?

最近看到有朋友問一個unity遊戲開發團隊,需要掌握哪些知識之類的問題。事實上Unity引擎是一個很靈活的引擎,根據團隊開發遊戲型別的不同,對人員的要求也有差異,所以不能一概而論。但是,一些在Unity專案開發過程中常常會遇到的問題還是可以總結一下的。 下面我就來聊聊實際工作中,一個專案組可能會遇到的問題吧

【C語言】實際專案開發過程常用C語言函式的9大用法

C語言是當中最廣泛的計算機程式語言,是所有計算機程式語言的祖先,其他計算機程式語言包括當前流行的Java語言,都是用C語言實現的,C語言是程式設計效率最高的計算機語言,既能完成上層應用開發,也能完成底層硬體驅動程式設計,在計算機程式設計當中,特別是在底層硬體驅動開發當中,具有不可替代的作用。

二次開發過程發現一個找也找不到的函式file_delete(),有誰知道這個函式,發現刪除遠端附件函式

反正我沒找到,現在刪除檔案就是unlink,我就是刪除一直false; 先測試再說。發現微擎首頁的後臺操作能夠正常刪除新增圖片到七牛雲 (刪一張將圖片連結儲存,隨後到七牛雲端儲存->內容管理裡面找,沒找到就是刪了。)   ==============

年度鉅獻-WPF專案開發過程WPF小知識點彙總(原創+摘抄)

用了三年多的WPF,開發了很多個WPF的專案,就我自己的經驗,談一談如何學好WPF,當然,拋磚引玉,如果您有什麼建議也希望不吝賜教。 WPF,全名是Windows Presentation Foundation,是微軟在.net3.0 WinFX中提出的。WPF是對Direct3D的託管封裝,它

軟體專案開發過程主要遇到的核心問題小結

1、軟體專案開發合同的訂立,合同需要對將來幾個月甚至幾年需要做的事情有個明確的定義說明,限定好工作範圍、工作內容、承擔的責任、專案總費用,每個階段支付的費用都需要有明確的說明甚至付款條件等都需要一清二楚,很多東西都沒講明白是將來合作不愉快的導火索,這些都需要白紙黑字寫清楚

遊戲開發過程需求變化那些事

背景 隨著軟體專案越來越龐大,為了提高開發效率和有效的質量管控,開發過程中的專案管理越來越重要,流程分工也在不斷細化。傳統的軟體開發過程分大致分為如下幾個步驟: 需求提出 可行性分析 需求分析 概要設計 詳細設計 編碼 測試 整合交付 產品的最終形

mpvue+vant weapp專案開發過程遇到的問題(未完待續)

一、元件上bind:方法名=“方法”,找不到方法 報錯圖: 百度到的:都說methods不可用,可以用computed代替,但是我用了computed,裡面的方法全都在頁面載入時做完了。。。還操作毛線。。。 解決辦法:誤打誤撞用methods可以了。把元件上的bind:方法名=

iOS開發筆記之四十三——日曆NSCaledar使用過程遇到的一個蘋果系統bug

    我們的app上有一個時間日曆,早期的需求只考慮到app在國內使用。在國內時,NSCaledar這個方法的使用一切正常,後來業務要擴大到國外各地。NSCaledar就暴露了一個問題,這個問題直接導致了我們日曆頁面的卡死。我們忽略掉所有的繁文縟節,直接進入問題的根源。

淺談軟體開發過程專案管理

摘要:大量軟體開發例項表明,如果不能在軟體開發中加強專案管理,隨著國內軟體行業的不斷髮展與壯大,國內的軟體開發企業將面臨嚴峻的挑戰性與風險性。因此,為了確保軟體開發的效率與質量,必須認識到強化專案管理的必要性,並且堅持多管齊下的方針,積極採取有效的管理策略。   關鍵詞:軟體;開發;專案管理   軟體開發

軟體開發過程測試用例圖、E-R圖的理解和使用

研一上學學期分別修了《軟體工程》、《面向物件分析和設計》兩門課程,雖然沒有認真聽講。但是知道要想在該專業領域走的更遠,有全域性觀念。這門課程還是相當重要的。尤其是用例圖和關係實體圖,對於從全域性快速的

android專案開發過程的本地快取總結

在現在很多的開發中,開發一個app快取和網路儲存搭配起來使用往往是必須的,自己寫過比較多的專案所有談談感想。 快取作用: 所謂的快取機制就是資料獲取方式的變化,app的快取通常就是把使用者經常需要從網路上載入並且變化不是事實的資料進行本地的儲存,這樣可以減少使用者流量的使用

專案開發過程的細節問題及解決方法(Vue,Css)(入門級)

Vue開發填坑 方法methods通用 問題描述: vue開發過程中很多時候,函式方法methods會在各個元件內共用,每個元件都寫個比較多餘。 解決方法: 1.利用CommonJS思想,單獨寫,然後每個元件利用import { function

專案開發過程的管理規範

# 平臺專案管理規範(Go語言版本) ### 1    編碼規範 | go版本 | go1.13.4 | | --- | --- | | 開發環境 | linux/mac/windows | | git版本 | 2.7.3+ | | 是否需要go fmt | 需要 | | 是

使用phxpaxos開發過程遇到的坑

例如 exec 永遠 傳輸 snap 如果 poi 沒有 github 1. 開啟BatchPropose後,狀態機使用ExecuteForCheckpoint生成快照要註意: ExecuteForCheckpoint中的InstanceID不能立即持久化。 例如:

ReactJS 開發過程的一些使用心得

有著 dom操作 作者 -s arc 有用 第一個 sets tao ReactJS作為目前最火的構建用戶界面的前端框架,為什麽有那麽多的前端工程師去追逐它,不僅因為它簡單,而且它提供了一系列強大的API讓我們擺脫以前繁瑣的DOM操作,使我們的邏輯更加清晰,代碼更加簡單。