為什麼軟體開發過程難以適用
❶ 為什麼說軟體開發過程是一個復雜過程
軟體開發過程一般分成三類:主要過程類、支持過程類和組織過程類:
1、主要過程類
供各主要當事方(如需方、供方、開發者、運行者和維護者)在參與或完成軟體產品開發、運行或維護時使用。
2.支持過程類
支持過程類中的過程對基本過程類中的過程提供支持。被支持的過程根據需要採用一些支持性過程,並與開過程結合,幫助軟體項目獲得成功記良好的產品指令。
3.組織過程類
此類過程用來建立和實施一種基礎結構,並且不斷改進該基礎結構的過程。基礎結構由一些相關的過程和人員組成。
軟體開發把軟體過程放在中心地位來看待,關注的核心是開發過程,並涉及相關的其他過程。
❷ 什麼是軟體危機怎麼解決這個危機
軟體危機是指落後的軟體生產方式無法滿足迅速增長的計算機軟體需求,從而導致軟體開發與維護過程中出現一系列嚴重問題的現象。那麼你對軟體危機了解多少呢?以下是由我整理關於什麼是軟體危機的內容,希望大家喜歡!
軟體危機的介紹
軟體危機(software crisis),20 世紀60年代以前,計算機剛剛投入實際使用,軟體設計往往只是為了一個特定的應用而在指定的計算機上設計和編制,採用密切依賴於計算機的機器代碼或匯編語言,軟體的規模比較小,文檔資料通常也不存在,很少使用系統化的開發 方法 ,設計軟體往往等同於編製程序,基本上是個人設計、個人使用、個人操作、自給自足的私人化的軟體生產方式。
60年代中期,大容量、高速度計算機的出現,使計算機的應用范圍迅速擴大,軟體開發急劇增長。高級語言開始出現; 操作系統 的發展引起了計算機應用方式的變化;大量數據處理導致第一代資料庫管理系統的誕生。軟體系統的規模越來越大,復雜程度越來越高,軟體可靠性問題也越來越突出。原來的個人設計、個人使用的方式不再能滿足要求,迫切需要改變軟體生產方式,提高軟體生產率,軟體危機開始爆發 。
1968年,北大西洋公約組織(NATO)在聯邦德國的國際學術會議創造軟體危機(Software crisis)一詞。而1960年代中期開始爆發眾所周知的軟體危機,為了解決問題,在1968、1969年連續召開兩次著名的NATO會議,並同時提出軟體工程的概念。
軟體危機的解決途徑
軟體工程誕生於60年代末期,它作為一個新興的工程學科,主要研究軟體生產的客觀規律性,建立與系統化軟體生產有關的概念、原則、方法、技術和工具,指導和支持軟體系統的生產活動,以期達到降低軟體生產成本 、改進軟體產品質量、提高軟體生產率水平的目標。軟體工程學從硬體工程和其他人類工程中吸收了許多成功的 經驗 ,明確提出了軟體生命周期的模型,發展了許多軟體開發與維護階段適用的技術和方法,並應用於軟體工程實踐,取得良好的效果。
在軟體開發過程中人們開始研製和使用軟體工具,用以輔助進行軟體項目管理與技術生產,人們還將軟體生命周期各階段使用的軟體工具有機地集合成為一個整體,形成能夠連續支持軟體開發與維護全過程的集成化軟體支援環境,以期從管理和技術兩方面解決軟體危機問題。
此外,人工智慧與軟體工程的結合成為80年代末期活躍的研究領域。基於程序變換、自動生成和可重用軟體等軟體新技術研究也已取得一定的進展,把程序設計自動化的進程向前推進一步。在軟體工程理論的指導下,發達國家已經建立起較為完備的軟體工業化生產體系,形成了強大的軟體生產能力 。軟體標准化與可重用性得到了工業界的高度重視,在避免重用勞動,緩解軟體危機方面起到了重要作用。
軟體危機的主要表現
軟體開發進度難以預測
拖延工期幾個月甚至幾年的現象並不罕見,這種現象降低了軟體開發組織的信譽。
軟體開發成本難以控制
投資一再追加,令人難於置信。往往是實際成本比預算成本高出一個數量級。
而為了趕進度和節約成本所採取的一些權宜之計又往往損害了軟體產品的質量,從而不可避免地會引起用戶的不滿。
用戶對產品功能難以滿足
開發人員和用戶之間很難溝通、矛盾很難統一。往往是軟體開發人員不能真正了解用戶的需求,而用戶又不了解計算機求解問題的模式和能力,雙方無法用共同熟悉的語言進行交流和描述。
在雙方互不充分了解的情況下,就倉促上陣設計系統、匆忙著手編寫程序,這種"閉門造車"的開發方式必然導致最終的產品不符合用戶的實際需要。
軟體產品質量無法保證
系統中的錯誤難以消除。軟體是邏輯產品,質量問題很難以統一的標準度量,因而造成質量控制困難。
軟體產品並不是沒有錯誤,而是盲目檢測很難發現錯誤,而隱藏下來的錯誤往往是造成重大事故的隱患。
軟體產品難以維護
軟體產品本質上是開發人員的代碼化的 邏輯思維 活動,他人難以替代。除非是開發者本人,否則很難及時檢測、排除系統故障。
為使系統適應新的硬體環境,或根據用戶的需要在原系統中增加一些新的功能,又有可能增加系統中的錯誤。
軟體缺少適當的文檔資料
文檔資料是軟體必不可少的重要組成部分。實際上,軟體的文檔資料是開發組織和用戶的之間權利和義務的合同書,是系統管理者、總體設計者向開發人員下達的任務書,是系統維護人員的技術指導手冊,是用戶的操作 說明書 。
缺乏必要的文檔資料或者文檔資料不合格,將給軟體開發和維護帶來許多嚴重的困難和問題。
軟體危機的原因分析
用戶需求不明確
在軟體開發過程中,用戶需求不明確問題主要體現在四個方面:
在軟體開發出來之前,用戶自己也不清楚軟體開發的具體需求;
用戶對軟體開發需求的描述不精確,可能有遺漏、有二義性、甚至有錯誤;
在軟體開發過程中,用戶還提出修改軟體開發功能、界面、支撐環境等方面的要求;
軟體開發人員對用戶需求的理解與用戶本來願望有差異。
缺乏正確的理論指導
缺乏有力的方法學和工具方面的支持。由於軟體開發不同於大多數其他工業產品,其開發過程是復雜的邏輯思維過程,其產品極大程度地依賴於開發人員高度的智力投入。由於過分地依靠程序設計人員在軟體開發過程中的技巧和創造性,加劇軟體開發產品的個性化,也是發生軟體開發危機的一個重要原因。
軟體開發規模越來越大
隨著軟體開發應用范圍的增廣,軟體開發規模愈來愈大。大型軟體開發項目需要組織一定的人力共同完成,而多數管理人員缺乏開發大型軟體開發系統的經驗,而多數軟體開發人員又缺乏管理方面的經驗。各類人員的信息交流不及時、不準確、有時還會產生誤解。軟體開發項目開發人員不能有效地、獨立自主地處理大型軟體開發的全部關系和各個分支,因此容易產生疏漏和錯誤。
軟體開發復雜度越來越高
❸ 軟體開發難不難
軟體開發是一個技術型的工作,對於專門從事計算機工作的人來說軟體開發工作簡單,但是對於業外人事開發軟體是一個極難的工作。
軟體開發是根據用戶要求建造出軟體系統或者系統中的軟體部分的過程。軟體開發是一項包括需求捕捉、需求分析、設計、實現和測試的系統工程。軟體一般是用某種程序設計語言來實現的。通常採用軟體開發工具可以進行開發。軟體分為系統軟體和應用軟體,並不只是包括可以在計算機上運行的程序,與這些程序相關的文件一般也被認為是軟體的一部分。 軟體設計思路和方法的一般過程,包括設計軟體的功能和實現的演算法和方法、軟體的總體結構設計和模塊設計、編程和調試、程序聯調和測試以及編寫、提交程序。
❹ 什麼是軟體危機,為什麼產生軟體危機
軟體危機是指落後的軟體生產方式無法滿足迅速增長的計算機軟體需求,從而導致軟體開發與維護過程中出現一系列嚴重問題的現象。
產生軟體危機的原因主要有兩個方面:
1、與軟體本身的特點有關。
軟體不同於硬體,它是計算機系統中的邏輯部件而不是物理部件;軟體樣品即是產品,試制過程也就是生產過程。
軟體不會因使用時間過長而「老化」或「用壞」;軟體具有可運行的行為特性,在寫出程序代碼並在計算機上試運行之前,軟體開發過程的進展情況較難衡量,軟體質量也較難評價,因此管理和控制軟體開發過程十分困難。
2、來自於軟體開發人員的弱點。
其一,軟體產品是人的思維結果,因此軟體生產水平最終在相當程度上取決於軟體人員的教育、訓練和經驗的積累。
其二,對於大型軟體往往需要許多人合作開發,甚至要求軟體開發人員深入應用領域的問題研究,這樣就需要在用戶與軟體人員之間以及軟體開發人員之間相互通訊,在此過程中難免發生理解的差異,從而導致後續錯誤的設計或實現。
(4)為什麼軟體開發過程難以適用擴展閱讀:
解決途徑
在軟體開發過程中人們開始研製和使用軟體工具,用以輔助進行軟體項目管理與技術生產,人們還將軟體生命周期各階段使用的軟體工具有機地集合成為一個整體,形成能夠連續支持軟體開發與維護全過程的集成化軟體支援環境,以期從管理和技術兩方面解決軟體危機問題。
此外,人工智慧與軟體工程的結合成為80年代末期活躍的研究領域。基於程序變換、自動生成和可重用軟體等軟體新技術研究也已取得一定的進展,把程序設計自動化的進程向前推進一步。
在軟體工程理論的指導下,發達國家已經建立起較為完備的軟體工業化生產體系,形成了強大的軟體生產能力 。軟體標准化與可重用性得到了工業界的高度重視,在避免重用勞動,緩解軟體危機方面起到了重要作用。
❺ 為什麼現在的軟體開發效率很難快速提升,甚至到達瓶頸
首先就是資金預算的問題,一款軟體從著手開發到交付客戶,往往是有許多不可預算的突發情況,因此也給開發預算帶來了許多不便,如果我們在開發之前不能准確的預算出軟體開發所需要的資金並告知客戶,那麼如果在開發過程中遇到一些沒有預估出來的突發情況使得資金不夠,這部分資金客戶會不會承認並願意支付就是一個問題,或者說這部分資金是不是在客戶的承受能力之內都不得而知。
大型軟體的內存問題,一些大型電腦軟體往往佔用的內存有好幾個G,這對於一些安裝了很多軟體的電腦來說是災難性的,內存過大往往會拖慢電腦的運行速度,在有些時候還可能導致電腦死機,造成不可預估的損失。
❻ 軟體開發難嗎
首先我想強調的是:「學習從來都不是件容易的事,除非你是天才」。
所以,就更不用說軟體開發,這個極其需要腦力和精力的學習。
軟體開發,本身就是一門大學問,不僅僅需要有扎實的理論知識,還需要不斷的實踐經驗積累。
當然,不同平台的軟體開發,上手難易程度是不一樣的,而且跟該軟體開發所需的編程語言掌握程度關系也非常大。所以,學習軟體開發你得先把對應的編程語言先學好學精。
這里簡單說下當初我自學Android軟體開發的經歷:
2011年剛畢業沒多久,我在一些論壇上看到很多牛人通過自己寫的移動端應用或者游戲賺取了大量的廣告費,我在這些數字(金錢)的誘惑下決定自學Android軟體開發,希望能從中分一杯羹。
那時候基本上是白天上班,晚上就窩在自己的小屋裡,天天學習Java編程語言和Android軟體開發到凌晨2、3點。後期基礎學的差不多了就開始著手開發自己的App,每天晚上基本都是在完成一段自認為比較滿意的代碼或者完成自己的App上一個比較重大的功能之後才回床休息。
那段時間很累,但人很興奮(我這得有多大的興趣啊)。雖然廣告費沒賺到多少,但成功的把自己送進了一個比較高大上的外企,薪資也翻了兩翻,算是正式踏進了移動互聯網行業!
所以,對普通人來說軟體開發並不是件容易的事,但天道酬勤,勤學勤練自然就會變得容易!
❼ 為什麼軟體開發和維護的過程難以度量
這與開發者的管理規范程度和管理水平、技術人員的能力及對規范的遵守情況有關,管理規范、指令已經定量管理的公司軟體開發和維護都可以度量。
❽ 為什麼軟體項目開發中需求難以確定
需求總在變化,有時會導致項目的崩潰,不了了之。參與過實際項目管理的人,往往都有以下類似的感受: 1. 最終用戶的理解和開發團隊的理解決定了最初的需求模型; 2. 開發團隊的理解往往是對用戶體驗解釋的簡單機械映射; 3. 概念模型和理想的用...
❾ 企業軟體開發為什麼困難重重
因為是按照甲方的需求來弄的。不是想怎麼樣就怎麼樣
❿ 為什麼軟體開發方法論讓你覺得糟糕
圍繞軟體開發實踐和方法論,總有很多教條式的口水仗。階段式(phase-gate)方法能夠有效管理軟體開發過程的風險,還是說只是風險管理中的花哨噱頭?TDD真的能夠促生出高品質軟體?結對編程是代碼評審的有效替代抑或只是增加了商議溝通代價?我想說,雖然缺乏證據判斷這些論調的謬處,但有兩條常用的法則能夠幫助我們選擇好的實踐,同時,提升我們所提供軟體的價值:劃小開發周期以及提升反饋效率。
Michael Feathers給出了以下觀點:
我認為,我們最終還是得倚重開發者的能力,這才是個更重要的考量因素,而非選擇哪門語言或糾結於方法論間的細微差別。坦誠地說,我們都清楚這點,但我們看起來好像過度糾結於開發能力是關鍵因素這事兒上。或許這是個經濟學里一個被廣泛接受的觀點的引申,要是人人都可以替代(隨便找個人都能頂上),那該有多好呀?但事實並非如些。
問題是,我們怎樣才能找到有(合適)技能的開發者?IT界從未很好地定義個體生產率,從這點來看,那麼,要找到合適技能的開發者就是個很難解決的問題。代碼行數(Lines of code) – 在現在仍然是一個主流的度量方法 – 深陷「一行代碼一個責任」泥潭,這並不是一個好的方法。而度量工作小時數則是鼓勵(個人)英雄式舉動 – 經驗表明,「英雄們」通常就是導致項目延期的人,依賴「英雄」往往是一開始就採取的不該採取的冒險行動,長時間工作導致人變得魯鈍,並導致低質量軟體出 現。目前還沒有被普遍接受的針對IT專業人才的專業要求系列標准和僱用範式,招聘好的人才,是一門(招聘)藝術,而非(招聘)工程。
心理學家至少對這個問題進行了研究:為什麼IT業的技能很難被掌握和度量?Daniel Kahneman說(Thinking Fast and Slow),掌握技能有兩個基本條件:一個環境足夠規律以便可預測;有機會通過長時間實踐來學習掌握這些規律。
但是典型的軟體項目往往是沒有規律及可預測環境的。項目成功的唯一正確度量就是:最終的結果通過整個生命周期里的實施達到了預期目標嗎? 很難知道什麼關鍵活動導致了項目成功和失敗,很少有人能夠通過舊有或現有的項目獲得答案。幾乎不可能判定哪些決策導致了成功或失敗(在人工智慧領域,這叫作信度分配問題)。
這些因素造成了IT專業人員很難掌握引導產品和服務走向成功所需的能力。然而,開發者掌握能幫助他們更高效地達到目標的技巧,將使他們更有動力 – 通常稱之為「開發完成」,盡可能快的、不考慮是否功能被集成以及生產就緒。類似的場景也常出現在其他功能性實施領域。
實際的軟體項目是復雜的,沒有規律可循,這會導致另一個問題 – 為了證明某種技術、實踐和方法論是實際有效而收集相關數據是極度困難的,幾乎不可能在脫離收集環境的情況下歸納出這些數據。
在Laurent Bossavit的好書《The Leprechauns of Software Engineering》中, 他抨擊了軟體開發的一些慣式,比如「成本變化」(或「缺陷成本」)「曲線」,這些慣式是許多其它的軟體開發方法論知識基礎,稱開發人員生產率的變化是一個數量級(參照確定性金字塔原理)。Laurent Bossavit說明了相關依據 – 很多人依賴從計算機科學專業學生進行的非正式試驗或是從無法被有效控制的項目中收集小量數據。這些研究組織的給出的論調基礎往往是不健全的,數據缺乏分析,而且,最過分的是調查結果普遍遠遠超出了他們的適用領域。
因此,不太可能輕易下論斷敏捷開發實踐就比瀑布模式之流合適,反之亦然。「方法大師」的見解其實也沒太大指導意義,就像Kahneman說的,「人們在想法方面的信心,並非是有效行事可倚重的因素…當評估專家的想法,即使在有規律可循的情況下,你也一定要想清楚是否有合適時機可以引入其想法的可能性」。就像Ben Butler-Cole指出的(why software development methodologies rock),引入一種新方法往往會帶來一些影響。
你可能會認為當我們決定怎樣運作一個團隊時,我們就陷入了被動。但細想一下為什麼軟體開發無章可循?為什麼在這個環境里很難進行一些試驗以及獲取技能?什麼實踐和決定會導致成功或失敗?其中的根原因就是:環境是無規律的,做出變更與理解變更帶來的結果之間的反饋過程太長了。這里的「變更」一詞是指廣義上的需求變更、方法變更、開發實踐變更、商業計劃變更、代碼或配置變更等等。
還是有一些辦法幫助縮短周期的,比如當我們應用精益軟體開發思想 – 一個很重要的方法。縮短開發周期在大型產品開發中是很重要的:在Bret Victor的精彩視頻Inventing on Principle中提到,「如此多的創新被發現,只要你真正理解了你在做什麼,你就能發現任何事物」。
但對我而言就是這樣的:我們幾乎不可能實踐持續改進、學會怎樣使團隊或個人變得更好、掌握成功創建大型產品與服務所需的技能。除非我們聚焦於盡可能使反饋間隔時間縮短,以便實際洞察其間關聯,以及辨別原因和影響。
事實上,從想法到反饋的周期盡可能短的好處是如此明顯和重要,應該把其作為商業模式中要遵循的一個重要原則。如果你糾結於要把你的產品創建成一個用戶安裝式的軟體還是SaaS模式(Software-as-a-Service,軟體運營服務模式,軟體即服務),這時的想法會自然而然地推動你強烈考慮SaaS模式(有感而發)。如果你要重建你的系統(包含硬體),應該考慮怎樣盡快實現原型(how you can get prototypes out as quickly as possible),以及模塊化硬體和軟體,以便你可以快速和獨立地整合。3D printing(三維列印成型技術)技術看起來在這方面有著巨大的用武之地,因為它可以滿足軟體開發應用實踐朝硬體系統(原型呈現)的演進。如果你想如願以償地縮短周期,或多或少按多功能型團隊(cross-functional teams)方式運作是需要的。
軟體方法論,即使僱用一群牛人並讓他們自我組織,也是糟糕的,因為他們時常搞得「cargo-cult」(貨物崇拜,敏捷開發里的知名小故事,形而上):我們在做stand-ups(每日站立會議),我們有優先順序的backlog(優先待辦事務),我們甚至看在老天的份上實踐了continuous integration(持續集成)。
我們的到頭來的結果為什麼還這么差呢?因為你忘了最重要的事情:建立一個學習能力和適應能力都很好的組織。