国产成人久久精品一区二区三区,亚洲福利久久,日韩精品免费一区二区在线观看,精品美女在线视频

云南天光浩月為您提供PC網站、微網站、手機APP一站式互聯網解決方案
您當前位置:首頁 > 軟件資訊 > 【云南天光浩月】2017年軟件開發為什么很難?
【云南天光浩月】2017年軟件開發為什么很難?

【云南天光浩月】2017年軟件開發為什么很難?

(一)問題的分類


最初在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又會消耗很多時間。

需求的變化方向



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

    打印”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);



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

    打印”Hello, world”5次



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

小結

 



小節

 



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

1.難道做嵌入式當真不如一名程序員?

2.物聯網操作系統之爭,誰將最終勝出?

3.嵌入式從業之路,我該怎么走?

4.快速學習C語言的途徑,讓你少走彎路!

5.代碼閱讀能力不行,是因為你沒看到此文!

6.驚!這些細節如果被忽視了,往往會毀掉你的電路

 

為了方便您及時獲取最新軟件開發信息,請您關注并收藏云南天光浩月信息科技

 

相關新聞 News
国产成人久久精品一区二区三区,亚洲福利久久,日韩精品免费一区二区在线观看,精品美女在线视频
jiujiure精品视频播放| 综合国产在线| 久久精品国产亚洲夜色av网站| 免费在线亚洲| 欧美韩日一区| 国产日产精品一区二区三区四区的观看方式| 天堂日韩电影| 国产视频一区欧美| 伊人成人网在线看| 国产欧美精品久久| 麻豆久久久久久| 久久精品欧美一区| 蜜桃久久久久久| 精品国产精品国产偷麻豆| 久久精品卡一| 国产精品a级| 亚洲专区欧美专区| 一级成人国产| 免费成人网www| 亚洲成人一区在线观看| 亚洲一区区二区| 97se综合| 精品高清久久| 最新国产精品| 神马午夜在线视频| 一本色道久久精品| 欧美一区三区| 91精品国产自产观看在线| 欧美啪啪一区| 欧美日韩中文| 99国产成+人+综合+亚洲欧美| 欧美一区久久久| 日本欧洲一区二区| 黑人精品一区| 日韩精品一区二区三区av| 日韩中文字幕无砖| 国产精品永久| 97精品97| 亚洲免费成人| 欧美另类中文字幕| 精品欧美一区二区三区在线观看| 欧美日韩国产免费观看 | 精品一区二区三区在线观看视频 | 精品欧美激情在线观看| 一二三区精品| 在线观看亚洲精品福利片| 久久99国产精品视频| 久久三级福利| 日韩精品中文字幕第1页| 欧美中文一区二区| 亚洲激情另类| 偷拍欧美精品| 日韩av网站在线免费观看| 亚洲伦乱视频| 精品捆绑调教一区二区三区| 色一区二区三区四区| 日本欧美不卡| 日韩av片子| 一区二区日韩免费看| 日韩精品一卡二卡三卡四卡无卡| 日韩av一区二区在线影视| 日本大胆欧美人术艺术动态| 国产亚洲字幕| 久久裸体视频| 精品国产一区二区三区噜噜噜| 另类激情亚洲| 午夜亚洲福利| 亚洲精品网址| 91久久精品无嫩草影院| 日韩视频在线一区二区三区 | 日韩一区二区三区在线看| 日韩一级欧洲| 电影91久久久| aa亚洲婷婷| 亚洲成av在线| 综合激情视频| 日韩精品导航| 欧美激情久久久久久久久久久| 亚洲精品乱码| 日韩精品一二区| 蜜桃视频在线观看一区| 在线 亚洲欧美在线综合一区| 亚洲一区二区免费在线观看| 成人福利av| 9国产精品视频| 日韩avvvv在线播放| 香蕉精品999视频一区二区| 日韩网站在线| 欧美99久久| 欧美a在线观看| 久久蜜桃精品| 鲁大师影院一区二区三区| 精品三级久久久| 鲁大师影院一区二区三区| 日韩激情综合| 国产精品国码视频| 日韩视频网站在线观看| 久久中文字幕二区| 欧美91视频| 国产精品色网| 国产探花一区| 精品久久99| 好吊日精品视频| 成人一区而且| 国产精品美女午夜爽爽| 国产精品第一| 免费不卡中文字幕在线| 视频在线在亚洲| 亚洲免费精品| 国产亚洲一区二区三区啪| 精品欧美激情在线观看| 六月婷婷综合| 天堂8中文在线最新版在线| 亚洲激精日韩激精欧美精品| 国产日产精品_国产精品毛片| 久久国产亚洲| 日韩欧美三区| 天堂8中文在线最新版在线| 国产免费播放一区二区| 日韩高清一区| 999久久久国产精品| 成人在线免费观看网站| 亚洲91视频| 精品一区二区三区四区五区| 精品日韩毛片| 欧美精品一线| 欧美日韩免费观看一区=区三区| 三级欧美在线一区| 久久精品97| 中文字幕中文字幕精品| 亚洲免费资源| 久草免费在线视频| 中文字幕日韩高清在线| 美女亚洲一区| 久久久久99| 亚洲精品观看| 欧美在线亚洲综合一区| 亚洲va中文在线播放免费| 日日夜夜免费精品视频| 日韩专区欧美专区| 欧美午夜精彩| 欧美激情在线精品一区二区三区| 日本成人中文字幕在线视频| 欧美日韩1区| 日韩精品欧美激情一区二区| 亚洲一级高清| 欧美日韩尤物久久| 久久国产生活片100| 欧美中文字幕一区二区| 久久xxxx| 成人国产综合| 国产精品久久久久蜜臀| 久久亚洲二区| 欧美日韩亚洲一区在线观看| 每日更新成人在线视频| 韩国精品主播一区二区在线观看 | 亚洲精品99| 三级欧美在线一区| 亚洲免费观看高清完整版在线观| 欧美一区二区三区久久精品| 国产精品亚洲综合久久| 日韩高清不卡| 国产精品午夜一区二区三区| 日韩精品诱惑一区?区三区| 欧美日韩免费观看一区=区三区| 私拍精品福利视频在线一区| 92国产精品| 国产三级一区| 欧美福利一区| 91欧美精品| 婷婷国产精品| 蜜桃av一区二区在线观看| 国产高清久久| 国内精品福利| 精品亚洲自拍| 男人操女人的视频在线观看欧美| 国产精品精品| 精品久久中文| 日韩高清不卡一区二区| 国产精品视频一区二区三区 | 日韩一区二区三区精品| 日韩高清电影一区| 色在线中文字幕| 久久一二三区| 只有精品亚洲| 精品资源在线| 国产成人久久精品一区二区三区| 国产精品亚洲一区二区三区在线观看| 一区二区三区视频免费观看| 久久精品一本| 青青草国产成人99久久| 久久久久中文| 国产精品女主播一区二区三区| 丝袜诱惑制服诱惑色一区在线观看| 婷婷综合亚洲| 国产一精品一av一免费爽爽| 免费精品一区| 亚洲色图综合| 日韩精品亚洲aⅴ在线影院| 激情久久久久久|