軟件將定義一切嗎?
摘要:本文指出軟件越來越重要,一些汽車公司和芯片公司正在變成軟件公司——軟件工程師數量已占到工程人員的一半。并探討了當今軟件的特點及構建軟件的基本思路。
本文引用地址:http://www.104case.com/article/201605/291756.htm你是如何來到這座城市的?飛過來還是坐火車、汽車?各個城市都有一些監控軟件,有的監控交通工具,有的監控人,我們經常想繞過它,因為不想被監控。
所以我們看到軟件無處不在。例如制造業,無論是工業4.0,還是“中國制造2025”。我們還用軟件來進行遠程通訊——智能手機再也不是手機,實際上是一個微型電腦,上面有很多軟件/應用。同時我們用軟件進行很多金融服務,包括轉帳、支付等。所以軟件是奏效的。但有時也不那么靈,例如一些金融軟件和汽車公司出的軟件問題,曾造成了巨大損失。
很多人提到物聯網,諸如將有多少傳感器植入,有多少汽車將無人駕駛,這些都是我們所預見到的未來。我們同時在之前做了一個調查,看各行各業誰需要軟件。工程、醫療、ICT行業等是大家都想到的,還有很多沒想到的就是消費者、零售等。所以很多領域是高度依賴軟件的。
例如2015年BMW的軟件工程師超過了其他工程師的總合,所以汽車行業也變成了軟件行業。一些芯片公司也有越來越多的軟件工程師,盡管他們不想成為軟件公司,但是事實上他們已經成為了。例如ADI公司的一位VP(副總裁)說:“我們已經成為了軟件公司,問題是我們的工程師還沒有意識到!”
寫軟件只占軟件工作的7%
生產高質量的軟件是復雜和困難的。寫軟件非常重要,但是只占軟件工作的7%,真正的挑戰是滿足日趨增長的系統需求,因為這個系統更加互聯,使用云來收集大數據,我們如何建立高質量的系統呢?同時我們的軟件質量,還有我們利用目標實現之間的關系,即我們如何能夠按時去進行產品投放,還有質量、生產率、監管、合規等都受到影響。
現在軟件正在發生改變,它并不是靜態、一成不變的,必須隨著環境的變化來改變。如果我們沒有提前做好準備當然也不知道未來會何去何從。盡管有很多預測是我們沒法提前很早做出來的,但是至少可以幫助我們去預計一些可能會出現的威脅。比如黑客攻擊等。
我們在進行軟件開發時候,我們要去思考到底有沒有把方方面面的信息都考慮進去?當然我們希望這軟件可以使用一段時間,即使最老的軟件,也就50年的歷史,也就是說軟件出現也不是特別早。那我們也會有一些供應商已經有二十多年的歷史,他們至今所做的還是一些基礎的軟件,但是我們要對軟件進行更新才能適應當前的變化。我們改變軟件,是為了能夠更好地使用或者匹配硬件,比如多核硬件等,或者讓我們來更好地利用當前最新的技術。因此,軟件必須要能夠得以調整滿足環境的變化,我們還會接到客戶的一些新的需求,以及政府、監管方面的需求,所以我們也都要去改變軟件,但是最重要就是軟件本身也應該改變,就像我們改變硬件一樣。
改軟件并不一定把它卸載
改變軟件并不一定要把軟件卸載或讓它退休,而是可以對它的某些模塊進行更新。這跟硬件有所不同。有一些軟件可能每天都在更新,我們看到未來這種趨勢將會越來越明顯。比如無人駕駛的汽車軟件,可能每天都會更新。
圖1可以看到軟件開發面臨的問題,當然我們看到最下面的較粗的曲線,就是我們理想的曲線,我們希望在軟件開發過程當中,到后期我所遇到的問題,或者是宕機率越來越低,故障率越來越低。但是實際情況并非如此,有可能我們會受到其他因素的影響,我們可能不得不面臨這些問題,所以隨著時間的推移,我們軟件的功能會越來越差,它的故障率會越來越高。
我們再想想現在軟件的應用規模到底有多大?2009年4月,一本計算機雜志給出的軟件分類如圖2所示。在這里可以看到,可見我們現在所使用的應用越來越多了,規模也越來越大,而且軟件的復雜程度也越來越高了。尤其現在很多開源項目,大家都積極地參與其中。
但是有意思的是嵌入式軟件。在2005年之后,有越來越多嵌入式軟件誕生,特點是量身定制的。就像汽車,這兩輛車可能硬件是一樣的,但是它們上面所搭載的軟件可能截然不同。
安全性等挑戰
如果你的軟件會被別人所操縱。別人可以直接看到這軟件的漏洞和軟件所運行的東西,所以對于機構、企業,一定要去保障軟件的安全性,這是非常重要的。
當前我們所面臨的問題是軟件無處不在。軟件嵌入到我們所使用的各種各樣的設備當中。軟件開發寫得不是很好,還有就是我們一些忽視的軟件,有時候我們并不知道,有一些軟件他們到底具有什么功能,他們到底是怎樣寫成的。因為有些軟件開發者已經退休了。此外就是軟件的故障無疑會大大降低軟件的質量。而且因為軟件安全性問題出現得非???,有的是猝不及防。還有一些軟件遺留的代碼或者是遺留的系統?,F在我們看到我們的系統正在不斷發生變化,比如說代碼之上不斷地更新系統,這系統可能已有二十多年的歷史,此外就是我們可能有一個基于構件的系統,我們需要使用一些新的技術,包括云的環境等新技術。還有我們希望可以讓我們的系統適應并且可以在運行的過程當中不斷地去升級和凈化。
軟件系統的構建
以我與NASA(美國宇航局)合作的航天器項目為例。我們有常規的方法,還有一些特定的研究領域,例如自主計算、軟件產品線(software product lines)以及代碼自動生成。
首先我們來看一下不同模型的方法。因為我們知道不同系統的模型有所不同,但不同的構件之間要進行協作,所以我們對它們的行為模式可能不是特別地了解,所以我們所要做的就是去了解到底會有哪些不同類型的行為模式,從而去得出這一系列的情況。
我們會有一些軟件是基于數學的方法來去編碼的,然后來去具體假設一下這會是什么?我們做一些分析,不同情況下會有什么樣的場景。我們有一個非常正式的ASL語言。我們會定義一下我們做一些什么,允許多少偏離,同時我們使用自主計算來進行系統編制,這是和云相關,還有我們想要云有一些適應性。我們使用人的自主神經系統來進行模擬。
我們有一些想法,如圖3。一種是處于理性來進行相應的回應,比如別人問你一個問題,你就舉一個手等。另外有一些神經系統,就是包括要去休息或者是消化的系統。即我們有一些組件,有點像心跳,如果心在跳動,說明這臺電腦還活著,它就這樣模擬人體,它會進行系統自測,也可以了解健康,看一下這系統運行是正確的還是有一些偏離。另外有睡眠狀態,這時不想被其他電腦干擾,當它們如果行為準確,我們就在恢復行動。然后我們有各種各樣的組件之間的要求,各個組件決定是不是要合作,那它們會有組件的自主分析會有信號的發出。首先我們使用硬件來去比擬,就是說我們去進行一些星球探索,包括像月亮,或者是土星;同時我們也有軟件,如果想要去改變行為模式的話,我們就使用軟件。我們就可以很快地來跑軟件這種短期行為。同時我們有一些自主代碼生成過程,工程師要有像使用自然語言的使用能力,有一些使用案例,我們也有一些特別的要求,希望軟件可以像自然語言來去自主的應用,同時我們也可以進行一些編碼,我們有一些工具進行編碼的生成,同時我們可以把現有的編碼提取出來去獲得一些模式。
同時也有一些并發的數學原理來描述一下這并發的事件。我們會根據工程手段和環境來進行編碼的分析和改變。同時我們也會去預測一下系統在未來執行的話會發生一些什么情況?我們系統未來會有一個主要的編碼生成器來主導。
也就是說我們是有這樣的虛擬系統和我們物理性事件進行關聯,有社交的系統(例如可以通過GPS告訴大家在哪里)。所以我們將會有很多的傳感器,生成很多的大數據,我們也使用云來進行儲存。同時希望有一些高質量的軟件去有效地使用這些資源。
小結
回到本文的標題,有什么事是軟件不能做的嗎?我的回答是:不,很多事都是由軟件主導的。(注:本文根據“第八屆云計算大會”上的講演整理。大會由中國電子學會主辦,北京,2016年5月20日。)
本文來源于中國科技期刊《電子產品世界》2016年第5期第19頁,歡迎您寫論文時引用,并注明出處。
評論