色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

為什么說軟件開發過程是一個復雜過程

5RJg_mcuworld ? 來源:互聯網 ? 作者:佚名 ? 2017-10-23 09:09 ? 次閱讀

問題的分類

最初在1999年被Dave Snowden開發出來的Cynefin框架嘗試把世界上的問題劃分到了5個域中(大類):

簡單(Simple)問題,該域中的因果關系非常明顯,解決這些問題的方法是 感知-分類-響應(Sense-Categorise-Respond),有對應的最佳實踐

復合(Complicated)問題,該域中的因果關系需要分析,或者需要一些其他形式的調查和/或專業知識的應用,解決這些問題的方法是感知-分析-響應(Sense-Analyze-Respond),有對應的好的實踐

復雜(Complex)問題,該域中的因果關系僅能夠從回顧中發現,解決這些問題的方法是探索-感知-響應(Probe-Sense-Respond),我們能夠感知涌現實踐(emergent practice)

混亂(Chaotic)問題,該域中沒有系統級別的因果關系,方法是行動-感知-響應(Act-Sense-Respond),我們能夠發現新穎實踐(novel practice)

失序(Disorder)問題,該域中沒有因果關系,不可感知,其中的問題也無法被解決

顯然,軟件開發過程更多地是一個復雜(Complex)問題。在一個產品被開發出來之前,不確定性非常高,團隊(包括業務人員和技術人員)對產品的知識也是最少的,而且需要大量的學習和嘗試才可以明確下一步可能的方向。不幸的是,很多時候我們需要在一開始(不確定性最高的時候)就為項目做計劃。這種從傳統行業中非常適合的方法在軟件開發領域不再適用,這也是敏捷開發、精益等方法論在軟件開發中更加適合的原因。

正因為軟件開發事實上是一個學習的過程,我們學習到的新知識反過來會幫助我們對問題的定義,從而帶來變化。這里的變化可能來自兩個方向:功能性非功能性。

功能性的變化指隨著對業務的深入理解、或者已有業務規則為了匹配市場而產生的變化。比如支付方式由傳統的貨到付款變成了網銀付款,又變成了微信支付、支付寶掃碼等等。一個原始的電商平臺僅僅提供基本的購物服務,但是后來可以根據已有數據產生推薦商品,從來帶來更大的流量。這些變化需要體現在已有的代碼中,而對代碼的修改往往是牽一發而動全身。

非功能性的變化是指隨著業務的發展,用戶規模的增加,數據量的變化,安全認知的變化等產生的新的需求。比如100個用戶的時候無需考慮性能問題,但是100萬用戶的時候,性能就變成了必須重視的問題。天氣預報應用的數據安全性和網絡銀行的數據安全性要求也大不相同。

而在業務提出一個需求的時候,往往只是一個簡化過的版本。

非功能性復雜性

這是一個經過設計師精確設計的界面,在它被設計出來之前,用戶事實上無法準確的描述出它。設計過程中經歷了很多的諸如:

  • 線框圖

  • 顏色的確定

  • 交互的動畫

  • 信息層次

往復多次之后,界面確定了。在沒有仔細思考使用場景的時候,開發會誤以為這個功能非常簡單。但是如果你是一個有經驗的開發者,很快會想到的一些問題是:

  • 在寬屏下如何展示

  • 在平板上如何展示

  • 手機上如何展示

  • 即使僅僅支持桌面版,跨瀏覽器要考慮嗎?支持哪些版本?

  • 有些UI效果在低版本的瀏覽器上不工作,需要Shim技術

除此之外,依然有大量的其他細節需要考慮:

  • 性能要求是什么樣的?

  • 安全性要考慮嗎?

  • 在網絡環境不好的時候,要不要fallback到基礎視圖?

  • 既然涉及發送邀請函,送達率如何保證

  • 與外部郵件服務提供商集成時的工作量

等等。這些隱含的信息需要被充分挖掘出來,然后開發者才能做一個合理的評估,而且這還只是開始。一旦進入開發階段,很多之前沒有考慮到的細節開始涌現:字體的選用,字號,字體顏色,元素間的間距等等,如何測試郵件是否發送成功,多個角色之間的conversation又會消耗很多時間。

需求的變化方向

作為程序員,有一天你被要求寫一段代碼,這段代碼需要完成一件很簡單的事:

  1. 打印”Hello, world”5次

很容易嘛,你想,然后順手就寫下了下面這幾行代碼:

print("Hello, world")
print("Hello, world")
print("Hello, world")
print("Hello, world")
print("Hello, world")

不過,拷貝粘貼看起來有點低端,你做了一個微小的改動:

for(var i = 0; i < 5; i++) {
 print("Hello, world")
}

看起來還不錯,老板的需求又變成了打印”Goodbye, world”5次。既然是打印不同的消息,那何不把消息作為參數呢?

function printMessage(message) { for(i = 0; i < 5; i++) {
   print(message);
 }
}

printMessage("Hello, world")
printMessage("Goodbye, world")

有了這個函數,你可以打印任意消息5次了。老板又一次改變了需求:打印”Hello, world”13次(沒人知道為什么是13)。既然次數也變化了,那么一個可能是將次數作為參數傳入:

function printMessage(count, message) { for(i = 0; i < count; i++) {
   print(message);
 }
}

printMessage(13, "Hello, world");
printMessage(5, "Goodbye, world");

完美,這就是抽象的魅力。有了這個函數,你可以將任意消息打印任意次數。不過老板是永遠無法滿足的,就在這次需求變化之后的第二天,他的需求又變了:不但要將”Hello, world”打印到控制臺,還要將其計入日志。

沒辦法,通過搜索JavaScript的文檔,你發現了一個叫做高階函數的東東:函數可以作為參數傳入另一個參數!

function log(message) {
 system.log(message);
}

function doMessage(count, message, action) { for(i = 0; i < count; i++) {
   action(message);
 }
}

doMessage(5, "Hello, world", print);
doMessage(5, "Hello, world", log);

這下厲害了,我們可以對任意消息,做任意次的任意動作!再回過頭來看看那個最開始的需求:

  1. 打印”Hello, world”5次

稍微分割一下這句話:打印,”Hello, world”,5次,可以看到,這三個元素最后都變成了可以變化的點,軟件開發很多時候正是如此,需求可能在任意可能變化的方向上變化。這也是各種軟件開發原則嘗試解決的問題:如何寫出更容易擴展,更容易響應變化的代碼來。

小結

軟件的復雜性來自于大量的不確定性,而這個不確定性事實上是無法避免的,而且每個軟件都是獨一無二的。另一方面,軟件的需求會以各種方式來變化,而且往往會以開發者沒有預料到的方向。比如上面這個小例子中看到的,最后的需求可能會變成將消息以短信的方式發送給手機號以185開頭的用戶手機上。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4629

    瀏覽量

    93198
  • 軟件工程師
    +關注

    關注

    8

    文章

    218

    瀏覽量

    21151
  • 智能硬件
    +關注

    關注

    205

    文章

    2350

    瀏覽量

    107834

原文標題:軟件開發為什么很難?

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    自己做的TAS5825板子軟件開發過程中怎么接到PPC3上去調試呢?

    我們打算做一個TAS5825的板子,PPC3軟件已經申請下來了,有問題是我們自己做的TAS5825板子軟件開發過程中怎么接到PPC3上去調試呢?
    發表于 10-15 08:15

    直播軟件開發過程中,如何選擇流媒體協議?

    `在直播軟件開發過程中,我們可能會遇到些困惑。像是對于流媒體協議的選擇,如HTTP-FLV、WebRTC,RTMP,HLS及其它私有協議等,到底哪個比較合適?哪種協議可以用在PC平臺上?哪種協議在
    發表于 08-21 14:34

    嵌入式軟件開發過程

    在嵌入式軟件開發過程中,般來說,花在測試和花在編碼的時間比為3:1(實際上可能更多)。這個比例隨著你的編程和測試水平的提高而不斷下降,但不論怎樣,軟件測試對般人來講很重要。很多年前
    發表于 10-27 07:28

    嵌入式軟件開發過程中的模塊化

    對很多人來,嵌入式軟件開發過程中模塊化(Modularization)是海市蜃樓、是書面詞匯、是
    發表于 12-20 07:22

    嵌入式軟件開發過程之程序代碼分層

    在嵌入式軟件開發過程中,在程序架構的搭建完成之后,為了提高項目代碼的可讀性和可維護性等,應對程序代碼分層
    發表于 12-21 06:13

    嵌入式系統的開發過程

    并行交互進行,這樣嵌入式軟件開發已經成為項很復雜的工程。   嵌入式系統的開發過程如下:
    發表于 12-22 08:15

    利用RealView MDK仿真功能的CAN總線的軟件開發過

     RealView MDK具有強大的仿真功能,能仿真很多ARM芯片內部外設。文章以RealView MDK為開發環境,敘述了CAN總線的軟件開發過程,并給出了仿真結果。   0 引言
    發表于 07-16 10:57 ?2137次閱讀
    利用RealView MDK仿真功能的CAN總線的<b class='flag-5'>軟件開發過</b>

    KnowleSys軟件開發過程指南

    軟件項目的成敗并非在于完全的技術層面的考慮上,而是取決于項目本身是否被小心規劃,謹慎執行。絕大部分軟件項目都可以以種幾乎保證成功的決定性的方式進行。本開發過程
    發表于 04-13 22:50 ?10次下載
    KnowleSys<b class='flag-5'>軟件開發過程</b>指南

    嵌入式軟件開發過程中基于功能點的缺陷度量李冰

    嵌入式軟件開發過程中基于功能點的缺陷度量_李冰
    發表于 03-14 08:00 ?0次下載

    GitHub開源軟件開發過程影響因素分析

    通過分析GitHub開源軟件開發過程,提出了問題解決速度、問題增加速度等影響因素,并對這些影響因素間的相關性進行了分析.經過實驗證明了有些影響因素之間存在定的相關性.同時,根據實驗的結果還給出了針對GitHub開源
    發表于 12-28 11:48 ?0次下載
    GitHub開源<b class='flag-5'>軟件開發過程</b>影響因素分析

    軟件開發過程中需要的十三類文檔

    軟件項目開發過程中,應該按軟件開發要求撰寫十三類文檔,文檔編制要求具有針對性、精確性、清晰性、完整性、靈活性、可追溯性!
    發表于 09-15 09:03 ?6005次閱讀

    軟件開發工程師工作中最艱巨的任務是什么

    軟件開發過程中最艱巨的任務是什么?達內軟件開發部的工程師們發現他們大部分人認為在軟件開發過程中最艱巨的任務其實不是代碼。
    的頭像 發表于 05-06 14:32 ?3069次閱讀

    簡述Geant4 的軟件開發過程

    Geant4 的軟件開發過程 Gabriele Cosmo(歐洲核子研究中心,瑞士日內瓦)用于 Geant4 協作。 摘要: 自其最早的研發 [1] 以來,Geant4 仿真工具包已經遵循決定項目
    的頭像 發表于 08-26 16:22 ?5277次閱讀

    編程與軟件工程

    過程為中心的軟件工程過程方法論主要有瀑布式與統一軟件開發過程。這種軟件開發過程需要產生大量的正式文檔,通過嚴格的流程管理控制
    的頭像 發表于 09-22 10:56 ?3598次閱讀

    參數——汽車軟件開發中最大的挑戰之

    汽車軟件的應用通常是在軟件用于多個型號和迭代的車輛時完成的。參數為開發提供了必要的靈活性,通過巧妙地調整軟件來補償系統變量,從而使軟件可重用
    的頭像 發表于 02-14 15:30 ?722次閱讀
    參數——汽車<b class='flag-5'>軟件開發</b>中最大的挑戰之<b class='flag-5'>一</b>
    主站蜘蛛池模板: 都市妖奇谈有声 | 亚洲欧美日韩另类精品一区二区三区 | 国产精品丰满人妻AV麻豆 | 出差无套内射小秘书 | 看 视频一一级毛片 | brazzers巨臀系列 | 国产学生在线播放精品视频 | 久久精品亚洲AV中文2区金莲 | 秋霞网在线伦理免费 | 高清国产在线观看 | 欧美一区二区在线观看 | 国产69精品久久久久观看软件 | 拔萝卜电视剧高清免费 | 芭乐视频免费资源在线观看 | 俄罗斯少女人体 | 午夜无码国产理论在线 | 接吻吃胸摸下面啪啪教程 | 国产成人免费观看 | gogogo免费视频观看 | 国产成人在线免费观看 | 成人永久免费视频网站在线观看 | 久久精品AV无码亚洲色欲 | 依人青青青在线观看 | 漂亮妈妈中文字幕版 | 含羞草完整视频在线播放免费 | 国内精品日本久久久久影院 | 国产精品爽爽久久久久久无码 | 末班车动漫无删减免费 | 久久综合给合久久狠狠狠… | 欧洲精品不卡1卡2卡三卡四卡 | 久久精品亚洲热综合一本奇米 | 暖暖免费 高清 日本社区中文 | 国产精品九九久久 | 亚洲午夜久久久久中文字幕 | 国产欧美二区综合 | 动漫成年美女黄漫网站 | 亚洲欧美中文日韩v在线 | 狠狠色丁香婷婷久久综合五月 | 亚洲精品视频在线观看视频 | 国产精品午夜小视频观看 | 小货SAO边洗澡边CAO你动漫 |