java學習:軟體開發七大難點原因
軟體開發七大難點原因
1.軟體產業是年輕
人類一直在建設的房子,道路和橋樑數千年之久。 已經不知道在初期很多房子或橋樑倒塌如何為人類學會建立這些結構的正確方法。
只要看看臭名昭著的宋體海峽大橋坍塌在1940年認識到,千百年來第一橋建成後,他們仍然沒有完善橋樑建設。
相比較而言,軟體業只有50歲左右。 我們還有很長的路要走,我們有我們身後經驗的機構,建築和製造行業有。
今天建築行業大多使用預製材料和部件。 大多數的這些由機器製成並已嘗試和許多其他項目進行測試。
另一方面軟體行業不具有其他行業有預置組件的範圍內。 軟體系統是由發現,發明,並且創造的,其結果是每一個新系統是從零開始創建的自定義項目新組件的方法從根本上構建的。 這使我們對我們的下一個點。
2.每行代碼是失敗的潛在點
由於所有新項目都定製接下去的每一行代碼都未經證實,因此應進行測試。 然而,在現實世界中,這是完全不切實際的。
每一行代碼都會有幾十個,甚至上千個,可能的輸入,輸出,州或依賴來處理。 這會影響到,或由其他行代碼或由外部因素的影響。 即使是可能的記錄每一次測試案例一行代碼,你仍然不能確定,有沒有一些未知因素,可能會導致錯誤。
和測試一個單一的代碼行是挑戰的一部分。 代碼不存在行自身。 它是整個系統的一部分,整個需要進行測試,以確保該應用程序的功能的所有部分正確。
軟體的極度複雜性意味著它不可能測試每個路徑,以便在現實世界上最好的項目團隊將實施,旨在提高對軟體無缺陷的可能性的過程。 他們將使用的技術,如編碼標準,單元測試,冒煙測試,自動回歸測試,設計和代碼審查等,所有這些都應該提高軟體的質量。
所有這些測試是有代價的。 每個項目都需要回答的問題是 - 如何關鍵的是這個軟體,我們應該有多少測試,請確保該軟體是正確的?
往往測試階段火速和軟體出去與缺陷不可接受的水平。 另一方面,對於大多數系統中,有
繼續以測試缺陷所獲得的值的點。 這就是為什麼大多數商業軟體即使它是已知含有缺陷被釋放。
3.缺乏用戶輸入的
在過去10年的研究公司,Standish Group的,都被調查企業對他們的IT項目。 導致軟體項目成為質疑的一號因素是「缺乏用戶輸入」。
這種情況的原因可能包括:
該系統正在推動的管理等業務的用戶沒有買入
用戶是太忙,有「更重要」的事情要做
用戶社區和IT團隊之間的關係不佳
如果沒有一個用戶代表的參與和投入的項目是註定要失敗的。 這個人應該是一個專業領域專家有權作出決定,並在項目時間表的承諾。
因此,假如有好的用戶輸入然後翻譯需求到設計開始的挑戰。 而這是不容易的任務,因為我們的下一個點的節目。
4.用戶不知道他們想要什麼,直到他們看到它
即使從用戶良好的輸入再多的用戶需求分析,可以帶走一個不可改變的事實,即用戶只認為他們知道自己想要什麼。 事實上,這不是直到他們開始看到的東西,並用它,他們開始真正了解他們需要什麼。 這尤其是當軟體正在為他們以前沒有使用一個新的想法或流程開發的。
有研究表明,平均項目經歷大約在要求一個25%的變化從「要求的完整」的階段到第一釋放。 這就是著名的「範圍蔓延」的問題,besets幾乎所有的項目。 它通常開始,一旦最初設計開始出現引起了用戶更深刻地思考他們真正想要的。
目前的挑戰是,你一)忽略了新的要求,並進行按照設計文件和風險提供一個系統,沒有做什麼用戶需要或b)承擔的變化,因為它們產生的結果,該項目拓展和建設成本的上升?
沒有簡單的回答這個兩難儘管事實上,多種技術,如敏捷開發,已經發展到更容易地適應不斷變化的需求。 即使是看似微小的變化可能對項目產生重大影響。 每一個明確的要求,可能會導致更多的隱性要求(高達50倍)的軟體進一步複雜化。
在開發階段變化的要求是擺在所有軟體開發者的巨大挑戰之一。 這是可以做到,但千萬不要以為這很容易。 同時,請不要以為新的要求,而不影響時間軸或預算,除非有相應的拆除要求得到滿足。
5.有沒有進入壁壘,成為一名程序員
有一種說法,指出軟體開發是如此的困難,因為節目是那麼容易。 換句話說,它是比較容易學習如何編寫代碼,但存在著,並提供優秀的軟體之間存在巨大的差距。
人們可以有可能它等同於學習一門新的語言。 是的,你可以拿起語法並獲得合理的辭彙,但是這是一個完全不同的球賽有一些母語流利的雙向討論。
各種研究表明,不同等級的顯影劑之間的生產率比率可以高達28:1。 考慮到這一點它,你肯定會只想聘請最好的開發者。 不幸的是,這是不容易,因為偉大的開發是一個非常罕見的商品。
沒有任何障礙進入編程世界,因此它是充斥著許多貧窮的程序員誰的項目產生不利影響。 此外,即使是潛在的優秀的年輕開發者仍然會是一個更有經驗的開發人員已經學會了避免錯誤。
這真的是值得付出更多的一個一流的經驗的開發人員。 他們會做的事情更快,更好,用更少的代碼。 您的項目將交付更快,將會有較少的缺陷。 他們現在將節省您的錢,他們也將節省您的錢通過系統的壽命,支持和維護成本。
6.所有軟體是受外部因素影響
物理結構服從物理定律例如它們經過幾千年的學習多的受到重力,質量,氣氛等是已知的關於物理世界,因此可以建模和預測。
軟體是「mindware」,因此不服從物理定律,但它通常必須符合外部制約因素,如硬體,與其他軟體整合,政府法規,傳統的數據格式,性能標準,可擴展性等。
理解和照顧所有這些外部因素是一個近乎不可能完成的任務。 即使是一個看似簡單的要求,如支持多種瀏覽器,成倍增加了兩個構建和測試軟體的難度。 如果您再添加一個需要支持多個版本的每一個瀏覽器,那麼你將再次呈指數級增長的複雜性和難度。
7.估計是一門藝術而不是科學
鑒於其前提是所有新項目都是定製的,有沒有預先構建的組件,該項目將受到範圍蔓延,並且在開發團隊的技能水平通常是改變那也難怪,估計持續時間該項目的永遠不能科學鍛煉。 有太多的未知數。 如果你從來沒有建立在同一個軟體之前同一支球隊,那麼你怎麼能知道要多久時間?
當然經歷使你在估算和更多的經驗,你有你就越有可能會預見的未知數。 太多的項目,跑過來,因為過於樂觀的估計是由沒有經驗的人誰希望一切順利流動,誰做的未知數沒有考慮設置。
靠的方式來控制項目的時間表,並因而成本,是不適合於所有的項目,甚至對項目某些部分。
如果項目涉及使用複雜的外部介面或新技術,然後估計變得更難得到的權利。 這些是通常很難量化的前期,通常只發現為完成工作的風險。
※給未來程序員的15個頂級職業建議
※想學java還不知道這些怎麼行?
※一些泛IT培訓行業的內幕:IT證書只是入門
※猜字母遊戲!會寫會玩才是真本事!
※到了50歲你 還願意做編程工作嗎?
TAG:java學習吧 |
※Databricks 開源 MLflow 平台,解決機器學習開發四大難點
※John Carmack要求VR開發者不要「在新奇感上」
※簡化 Django 開發的八個 Python 包
※Imagination 發布神經網路軟體開發套件 (SDK)
※ReactNative開發實戰一之環境搭建
※大公司流行開發新字體,Netflix 成了最新一個
※Mozilla推出開源瀏覽器Firefox Reality,專為VR一體機開發
※python web 開發學習路線
※谷歌Daydream更新 開發難度降低
※以太坊核心開發者Karl Floersch:像黑客帝國那樣學習加密經濟學!
※Yolanda:濕婆神舞ShivaNata零基礎教學,左右腦的平衡開發
※Python開發
※Mozilla 推出開源瀏覽器 Firefox Reality,專為 VR 一體機和 AR 頭顯開發
※Valve展示了最新的Knuckles開發套件EV2 進行了重大設計改進
※移動開發者如何更好地學習 React Native?
※mac搭建lamp開發環境
※JetBrains殺入Python開發,發布全新機器學習Web方案!
※硬體開發商Hardlight VR宣布倒閉 稱VR產業仍不成熟
※AI開發最大升級:Pandas與Scikit-Learn合併,新工作流程更簡單強大!
※基於 hapi的Node.js 小程序後端開發實踐指南