tft每日頭條

 > 科技

 > 軟件工程與工業軟件工程的區别

軟件工程與工業軟件工程的區别

科技 更新时间:2024-12-23 11:16:37

軟件工程與工業軟件工程的區别(軟件工程和軟件工藝)1

軟件工程是将工程化的方法應用到軟件研發中。軟件工程是研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正确的管理技術和當前能夠得到的最好的技術方法結合起來。

而核心的工程學思想又是什麼呢?

如果從系統工程學來講即任何事物的發展都有規可循,事物發展經曆一個特定的生命周期過程,從最初的概念構思,到設計,到生産最終形成最終的産品。即事物發展有特定的階段和過程,相互之間還相互制約和影響,最終形成我們期望的産品。對應到軟件研發,即我們常說的軟件生命周期模型。

核心的工程學思想僅此而已,而随着軟件研發和管理進步,發現僅僅有工程學的思想并不能高質高效的研發出我們需要的産品,因此在此基礎上融入了管理學知識和支撐質量管理思想。如果對應到CMMI即是項目管理過程域和支撐保障過程域。而CMMI相對于CMM更加強調了IPPD集成化産品研發的思想。

軟件工程與工業軟件工程的區别(軟件工程和軟件工藝)2

軟件工程興起是為了解決軟件危機的問題,針對大規模複雜軟件的研發,針對高精度和高質量的軟件研發。而針對大型軟件任何一個人都不可能成為各方面的專家,産業化必然趨勢就是更加喜歡的分工。但是分工後帶來的是更多的協作和過程,因此為了保證軟件研發成功和質量,需要對所有的控制環節都進行控制,需要将軟件周期階段劃分的足夠細化,同時進度,成本相關問題重要性則進一步弱化。

工程學思想要的就是嚴謹。希望将軟件開發過程按部就班的流水線化,變得任何一個步驟或動作都有章可循,都可以嚴謹和量化定義。但是現實往往并非如此,軟件開發的主體是人而非簡單的機器,這就導緻了軟件過程本身很難做到完全的标準化和量化可控。

軟件工程與工業軟件工程的區别(軟件工程和軟件工藝)3

正是這個原因逐步出現了軟件工藝的概念。

那我們再看看工藝本身的定義,工藝(Craft)是勞動者利用生産工具對各種原材料、半成品進行增值加工或處理,最終使之成為制成品的方法與過程。

制定工藝的原則是:技術上的先進和經濟上的合理。由于不同的工廠的設備生産能力、精度以及工人熟練程度等因素都大不相同,所以對于同一種産品而言,不同的工廠制定的工藝可能是不同的;甚至同一個工廠在不同的時期做的工藝也可能不同。可見,就某一産品而言,工藝并不是唯一的,而且沒有好壞之分。這種不确定性和不唯一性,和現代工業的其他元素有較大的不同,反而類似藝術。

而軟件工藝思想的提出,其核心是在強調不是人人都在做大型複雜和高精度的軟件,重過程有其适用場景也有其不适用的場景。其二,軟件開發的核心是人,人不是機器,人的思維和主觀能動性對軟件開發的成敗仍然作用巨大;其三,小作坊也可以産生賞心悅目的産品,軟件除了科學還有藝術。

軟件是一個複合體,應該是科學和藝術的結合,工程學和工藝學的結合。

在生産管理中我們可以看到,我們可以用工程學的思想設計和定義我們的生産線,但是我們卻更加需要工藝學的思想設計生産工藝,以保證生産過程足夠的靈活性,柔性和适應客戶對産品的要求。産品不是千篇一律,毫無生命力,産品也不是流水線一固定就一成不變,而引入工藝學正是将僵化的生産線融入了更多的成本性,經濟學,适用性,人員技能等各方面的情況考慮和綜合評估。

在沒有提出軟件工藝思想前,軟件工程學認為工程學是一成不變的,是可以解決所有軟件研發問題,工程學的一套方法并不會太多的考慮客戶的需求,軟件的領域,人員的技能,項目目标要求等諸多内容。而為了保證工程學思想的嚴謹,工程學将所有無法把握和預測的内容都作為了工程學基本的入口假設。它們假設需求一開始就清楚的,需求是不會變化的,人員的技能是滿足的,客戶的需求是可以無偏差傳遞的等等。

為了應對這些現實的問題,我們引入了敏捷思想和敏捷軟件開發過程。對于敏捷方法我們一直再看,其核心思想究竟有哪些。

敏捷思想第一點是肯定了人在軟件開發中的核心價值,如果不是這樣那麼軟件開發就是傳統工廠,軟件生命周期就是流水線,軟件過程也應該是全自動化的過程。但是事實并不是如此,對于軟件開發,如果一群新手在一起,即使有再好的工程學思想也無法開發出高質量的軟件。

敏捷思想第二點是證實了軟件研發過程中的不确定性,認可了需求是可能存在變化的,認可了我們開始并不能完全地預測和認知一切。變化是絕對的,那麼我們剩下的就是适應變化。為了适應變化我們進行快速原型,短周期叠代,通過适應變化我們将浪費降低到最少的精益思想。

敏捷思想的第三點是我們在管理方法上的進一步改進,我們認為軟件項目管理其核心是對人的管理,軟件項目管理應該以人為核心展開,因此首先強調自我的管理,強調在個人高度自治下的自适應團隊。過程的敏捷來源于使用過程的人的敏捷,而非過程本身。同時我們借鑒其他管理學經驗,認為管理應該是可視化的,而不是一個黑盒,在此我們将任務可視化,進度可視化,結果可視化。而看闆可能僅僅是我們借鑒的一種思路。

軟件開發應該是工程學和工藝學的融合

軟件工程與工業軟件工程的區别(軟件工程和軟件工藝)4

工程學關注科學,技術和方法工具;而工藝學根據關注人,學習和自适應。工程學關注最終高精度的産品,工藝學關注外部的環境,人,需求對工程的影響。工程學希望系統化地解決一切問題,工藝學希望充分發揮人的主動能動性,采用不同的方法靈活應對各種問題。工程學培養的是機器和螺絲釘,而工藝學培養的是讓産品發揮生命力的匠人和大師。工程學循規蹈矩和嚴謹科學,而工藝學則以人為本體現軟件藝術之美。

軟件工程不應該抱着将軟件開發工廠化和機器化的思想;而軟件工藝也不能完全抛棄工程,将軟件單純地看做一個藝術品。工程和工藝思想的結合,過程和人的結合是不二選擇,而不能從一個極端走到另外一個極端。

軟件工藝部分思想整理

軟件工程與工業軟件工程的區别(軟件工程和軟件工藝)5

軟件工藝是我比較鐘愛的一本書,雖與傳統的軟件工程思路有出入,但裡面有很多思想&思路可以借鑒。其實軟件工藝和軟件工程并不矛盾和敵對。項目的特點不同,周期不同,我們在做項目的時候确實應該采用不同的策略和方法論。其目的隻有一個就是保證項目成功和按期交付。

軟件項目中人始終是最重要的因素,這是軟件項目管理和其它工程項目管理的一個重要區别。忽略了人的因素很難管理好項目。我們離CMMI5級還有距離,離軟件工廠還有距離,如果真正能夠實現軟件工廠,說明某階段工作可以自動化,這時候可以不考慮人的因素。否則必須考慮到人對項目的重要影響。

優秀設計開發人員和一般人員之間生産率存在6-10倍甚至更大差距,這一點不容置疑,但往往我們很難給優秀人員2倍甚至更高的薪水,但投入和回報無法成正比的時候,很難留住優秀的人才,很難讓優秀人才保持搞得責任感和工作熱情。

任何工程或文檔都無法替代溝通和交流。面對面的溝通是最高效直接的方式。任何一個團隊在沒有經過前期多年磨合,形成團隊詞彙表之前不要輕易啟動遠程協同。這個已經不是簡單的溝通效率問題,也是無法形成團隊文化認同感的問題。

決定項目成敗的一個重要因素是項目中各個成員的知識,技能和經驗。不可能每個項目都有天才,但我們需要每個項目成員都是合格,勝任的人員。

以師帶徒是新成員成長和技能提升的最佳方式,任何組織級培訓計劃和執行都無法代替以師帶徒模式。如何面試和挑選合适的項目成員是一個需要重點關注的問題,否則會浪費老師大量時間,得不償失。

中小型的項目更适合敏捷開發和增量叠代,這樣可以更好地應對變化,以更快速的方式交付用戶滿意的産品。應該為測試和維護而設計,但往往需要達到這樣的水平需要開發人員有多年的經驗和知識的積累。

活到老學到老,在完成項目工作的過程也是自我不斷學習和知識積累的過程。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved