鄭 丹
中國酒泉衛(wèi)星發(fā)射中心
近年來,國內(nèi)商業(yè)航天得到了快速發(fā)展,短短幾年內(nèi)突破了入軌門檻,但是距離以美國太空探索技術(shù)公司(SpaceX)為代表的國外商業(yè)航天的發(fā)展水平還有較大差距。商業(yè)航天的發(fā)展必須依賴創(chuàng)新,怎樣高可靠性、低成本地實(shí)現(xiàn)創(chuàng)新發(fā)展,是國內(nèi)商業(yè)航天面臨的難題和挑戰(zhàn)。從SpaceX公司的扁平化管理、快速試錯(cuò)、迭代發(fā)展的運(yùn)營模式中,能夠處處看到敏捷項(xiàng)目管理的理念,其快速迭代模式也被國內(nèi)商業(yè)航天公司借鑒。
敏捷軟件開發(fā)技術(shù)不僅僅是一套軟件開發(fā)方法,更是一套適用于復(fù)雜系統(tǒng)開發(fā)的原則、模式和理念。如果把“敏捷”簡單地理解為“快速”+“低成本”,為實(shí)現(xiàn)“快速”而盲目刪減測試項(xiàng)目,為降低成本使用工業(yè)級器件代替航天級器件而缺乏相應(yīng)的容錯(cuò)機(jī)制,那么,由于航天工程的高復(fù)雜性和高風(fēng)險(xiǎn)性,只會給商業(yè)航天公司的發(fā)展帶來不必要的挫折。事實(shí)上,“快速”+“低成本”是敏捷開發(fā)的結(jié)果,而不是敏捷開發(fā)的技術(shù)要求。因此,本文首先給出敏捷軟件開發(fā)的核心思想“迭代開發(fā)”對商業(yè)航天型號發(fā)展的建議,然后詳細(xì)分析了敏捷軟件開發(fā)的“重構(gòu)”“自測試”“簡化文檔”“消除重復(fù)代碼”等技術(shù)要求對商業(yè)航天技術(shù)創(chuàng)新、管理運(yùn)營等方面的啟示。
敏捷軟件開發(fā)為了應(yīng)對迅速變化的需求并且實(shí)現(xiàn)快速開發(fā),其核心思想是迭代開發(fā)。傳統(tǒng)大型軟件的開發(fā)方式是采用一個(gè)大周期進(jìn)行開發(fā),而迭代開發(fā)則將開發(fā)過程拆分成多個(gè)小周期,即一次“大開發(fā)”變成多次“小開發(fā)”,但是每次小開發(fā)都會新增一個(gè)用戶可以感知的完整功能。迭代開發(fā)的好處,一是能夠通過早期交付降低成本,二是能夠及時(shí)了解市場需求,降低產(chǎn)品不適用的風(fēng)險(xiǎn)。
SpaceX公司采用了迭代發(fā)展的理念。例如它的終極目標(biāo)是造一個(gè)大推力火箭,將人類送往火星。但是,它不是一開始就造大火箭,而是先造一個(gè)最簡陋的小火箭“獵鷹”1號,然后開發(fā)中型火箭“獵鷹”9號,再開發(fā)“獵鷹重型”火箭,最后才開發(fā)能夠真正實(shí)現(xiàn)火星移民夢想的“超重-星艦”系統(tǒng)。它的每一次迭代都給予了市場(包括NASA)一定的信心,同時(shí)也為自己贏得了至關(guān)重要的訂單。
國內(nèi)某些商業(yè)航天公司在開發(fā)液體火箭型號時(shí),沒有從入軌火箭開始,而是直接研究運(yùn)載火箭一子級的垂直起降回收技術(shù),雖然從技術(shù)難度上來說垂直回收技術(shù)在某些方面比一次性入軌火箭的研制難度更大,但是仍然不能給客戶提供完整的功能,因?yàn)橥暾墓δ鼙仨毷墙⒃谀軌虬l(fā)射有效載荷的能力基礎(chǔ)上的。即使掌握了先進(jìn)的回收技術(shù),也僅證明了具有顯著降低發(fā)射成本的能力,仍需要繼續(xù)攻關(guān)火箭入軌技術(shù)才能盈利,而且這種迭代劃分也沒有遵循從簡單到復(fù)雜的研發(fā)順序,因此,這種迭代劃分的優(yōu)勢并不明顯。
在軟件開發(fā)過程中,隨著時(shí)間流逝和不斷修改代碼,代碼結(jié)構(gòu)逐漸衰弱,代碼質(zhì)量也慢慢變差。“重構(gòu)”正好與此相反,在軟件開發(fā)過程中持續(xù)地進(jìn)行微小且保持軟件行為的修改,依靠“從量變到質(zhì)變”的原理,從根本上改善了代碼的質(zhì)量。由于“重構(gòu)”過程中始終使代碼保持可工作的狀態(tài),不需要花費(fèi)額外調(diào)試的時(shí)間,因此“重構(gòu)”的這種“小步前進(jìn)”能夠進(jìn)展迅速。重構(gòu)可以改善既有代碼的設(shè)計(jì),使軟件更容易理解,也可以使增加新功能變得容易。
SpaceX公司的管理模式也在不斷改進(jìn)以適應(yīng)其發(fā)展需求,比如它的質(zhì)量管理部門就是在公司規(guī)模擴(kuò)大后才成立的。建議商業(yè)航天公司更加重視產(chǎn)品研制過程中的技術(shù)積累和條件建設(shè),對生產(chǎn)運(yùn)營方式中任何不合理、不順暢的地方進(jìn)行持續(xù)性改進(jìn),重構(gòu)的對象可以是航天產(chǎn)品的生產(chǎn)環(huán)節(jié),如產(chǎn)品設(shè)計(jì)、關(guān)鍵技術(shù)、元器件、材料、工藝等,也可以是公司的運(yùn)營方式,如審批流程、會議制度、供貨方管理制度等。即使這個(gè)改變非常微小或者簡單,只要能夠降低成本,提高產(chǎn)品的可靠性,就可以改進(jìn),最終實(shí)現(xiàn)高可靠、低成本的目標(biāo),扎扎實(shí)實(shí)打造公司的核心競爭力。
在傳統(tǒng)軟件開發(fā)中,編寫產(chǎn)品代碼和軟件測試是相互獨(dú)立的工作,軟件測試由專門的測試人員負(fù)責(zé),只把測試結(jié)果反饋給軟件開發(fā)人員。而在敏捷軟件開發(fā)中,產(chǎn)品代碼和測試代碼都由軟件開發(fā)人員完成,一起放在軟件里,并且由軟件自動測試,即軟件對自己進(jìn)行測試并檢查測試結(jié)果。自測試的作用是快速發(fā)現(xiàn)錯(cuò)誤并確保錯(cuò)誤不再復(fù)現(xiàn),是“重構(gòu)”的重要技術(shù)保障。
商業(yè)航天如果采用迭代開發(fā)模式,那么在頻繁的“重構(gòu)”和“測試”情況下,必須提高測試的自動性和敏捷性。例如,增強(qiáng)元器件的自檢測功能,不僅能夠顯著減少測試準(zhǔn)備時(shí)間,還能提高排故效率;實(shí)現(xiàn)箭上自主監(jiān)測和在線排故功能,提高飛行的可靠性;在故障排除后增加測試項(xiàng)目,確保故障永遠(yuǎn)不會復(fù)現(xiàn),提高歸零措施的有效性;面向風(fēng)險(xiǎn)開展測試,加強(qiáng)“邊界條件”測試,提高系統(tǒng)可靠性;對供應(yīng)商或第三方服務(wù)執(zhí)行同樣的測試?yán)砟詈蜆?biāo)準(zhǔn),防止“木桶的短板效應(yīng)”。最后,測試體系也可以通過“重構(gòu)”的方式逐漸完善,測試體系是否完備,可以借鑒敏捷軟件開發(fā)的一個(gè)判斷標(biāo)準(zhǔn),即“是否具有這樣的信心‘只要通過了測試,就能成功’”。
在敏捷軟件開發(fā)中,軟件本身是最好的文檔,這個(gè)“軟件即文檔”的敏捷要點(diǎn)使得軟件開發(fā)不再花費(fèi)精力維護(hù)大量的文檔。但是,“軟件即文檔”敏捷要點(diǎn)的技術(shù)要求是軟件代碼必須像文檔一樣易讀易懂。為了做到這一點(diǎn),敏捷軟件開發(fā)技術(shù)采取了數(shù)十種編程技巧和規(guī)則,例如函數(shù)命名規(guī)則、函數(shù)的長度、變量可見域、無重復(fù)代碼等,來保證代碼編寫得像文檔一樣簡潔明了,并且還通過“重構(gòu)”手段來改善軟件的可讀性。如果僅僅為了節(jié)省文檔編寫和維護(hù)的時(shí)間,盲目取消文檔而不學(xué)習(xí)和應(yīng)用這些技巧和規(guī)則,那么即使閱讀和修改自己編寫的代碼也很困難,從而使整個(gè)軟件團(tuán)隊(duì)的開發(fā)走向困境。
商業(yè)航天的軟件也可以采用“代碼即文檔”的技術(shù)進(jìn)行編寫,使代碼具有易理解和易修改的特點(diǎn),進(jìn)而極大減少軟件文檔的數(shù)量和維護(hù)成本,提高軟件開發(fā)的效率。這就要求整個(gè)編程團(tuán)隊(duì)都要遵守“代碼即文檔”背后的各種規(guī)則和要求。同時(shí),也需采用比較簡單的文檔或者視頻等手段記錄主要思路等信息,便于其他人快速理解產(chǎn)品軟件。此外,如果商業(yè)航天的測發(fā)軟件也能夠按照手機(jī)軟件的開發(fā)標(biāo)準(zhǔn),滿足“無需操作手冊也能無失誤”的技術(shù)要求,那么就可以取消雙崗制,提高測發(fā)工作的效率。
敏捷軟件開發(fā)的一個(gè)重要原則是“消除重復(fù)代碼”。重復(fù)代碼會帶來很多麻煩,當(dāng)代碼中有一個(gè)錯(cuò)誤時(shí),很難找到全部的重復(fù)代碼進(jìn)行修改,而忽略了任何一處修改,就會使軟件在實(shí)現(xiàn)相同功能時(shí)采用不同的行為,特別是這些重復(fù)的代碼段還不完全相同的情形,需要逐一分析和修改,極大增加了代碼修改的困難性。代碼重復(fù)的原因很多,最常見的操作是在添加新功能時(shí),復(fù)制一段類似的代碼然后稍加修改,而避免重復(fù)代碼的方法也很簡單:堅(jiān)持一個(gè)功能只使用一段代碼來實(shí)現(xiàn)。
傳統(tǒng)火箭研制使用了很多具有類似功能卻在細(xì)節(jié)上略有不同的元器件,例如在一枚火箭上通常使用了多種型號的發(fā)動機(jī)或者多種型號的電池,雖然從總體設(shè)計(jì)上是最優(yōu)的,但是在使用和維護(hù)上都需要重點(diǎn)關(guān)注各型號元器件之間的差異性,導(dǎo)致了額外的使用和維護(hù)成本。而產(chǎn)品的通用化設(shè)計(jì),可以避免這些元器件的重復(fù)設(shè)計(jì),并且能夠以批量生產(chǎn)的方式分?jǐn)傇O(shè)計(jì)費(fèi),進(jìn)而降低生產(chǎn)成本。例如,SpaceX公司的“獵鷹重型”火箭一子級的27臺發(fā)動機(jī)狀態(tài)完全一致,給裝配和測試工作帶來了極大便利,而二子級所用的發(fā)動機(jī)是一子級發(fā)動機(jī)的高空版,大大縮減了生產(chǎn)成本和生產(chǎn)周期。
通過對若干敏捷要點(diǎn)的分析可知,敏捷開發(fā)的背后是更高的技術(shù)要求和更多敏捷的測試,商業(yè)航天公司要想實(shí)現(xiàn)“快速迭代”發(fā)展,必須重視“正確的做事方式”,通過持續(xù)“重構(gòu)”和“測試”,扎扎實(shí)實(shí)打造公司核心競爭力,逐步實(shí)現(xiàn)創(chuàng)新發(fā)展。商業(yè)航天的投資方也應(yīng)從創(chuàng)新能力、運(yùn)營管理模式、成本控制等多方面對商業(yè)航天公司進(jìn)行評估,而不是單獨(dú)從飛行試驗(yàn)的成敗“論英雄”,否則商業(yè)航天公司很難實(shí)踐快速試錯(cuò)、迭代發(fā)展的模式。