《軟件工程(第4版?修訂版)》—第1章1.5節 系統的方法

本節書摘來自異步社區《軟件工程(第4版?修訂版)》一書中的第1章1.5節 系統的方法,作者【美】Shari Lawrence Pfleeger , 【加】Joanne M.Atlee,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。

1.5 系統的方法
軟件工程(第4版?修訂版)
我們開發的項目并不存在于真空中。通常,我們裝配在一起的硬件和軟件,必須與用戶、其他軟件任務、其他部分的硬件、現有數據庫(即仔細定義的數據集合和數據關系)甚至其他的計算機系統進行交互。因此,為任何項目提供一個背景是非常重要的,該背景就是項目的邊界(boundary):項目中包含什么,不包含什么。例如,假設主管讓你編寫一段程序為辦公室的人員打印工資單。你必須知道你的程序是否只是簡單地從另一個系統中讀入工作時間并且打印結果,還是必須同時計算工資信息。類似地,你必須知道程序是否需要計算稅率、養老金以及津貼,或者是否要隨每份工資單提供這些項目的報告單。實際上,你真正要問的問題是:項目從哪里開始,到哪里結束?同樣的問題可以應用于任何系統。一個系統是對象和活動的集合,再加上對象和活動之間關系的描述。就每個活動而言,典型的系統定義包括需要的輸入列表、采取的動作以及產生的輸出。因此,要開始一個項目,必須知道系統包含哪些對象或活動。

1.5.1 系統的要素
我們通過命名系統的組成部分并標識這些組成部分是如何與另一個系統相互聯系的,來描述這個系統。這種標識是分析擺在我們面前的問題的第一步。

1.活動和對象
首先,我們對活動和對象加以區分。活動(activity)是發生在系統中的某些事情,通常描述為由某個觸發器引發的事件,活動通過改變某一特性將一個事物轉變成另一個事物。這種轉變可能意味著數據元素從一個位置移到另一個位置,從某個值轉變為另一個值,或者與其他的數據相結合為另一個活動提供輸入。例如,一個數據項可以從一個文件移到另外一個文件。這種情況下,改變的特性是位置。或者,數據項的值可能增加。最后,數據項的地址可以與若干其他數據項的地址一起包含在參數列表中,以便可以調用另外的例程一次性處理所有數據。

活動中涉及的要素稱為對象(object)或實體(entity)。通常,這些對象以某種方式相互聯系。例如,對象能夠排列在表格或矩陣中。對象常常組成記錄,其中,每一條記錄按規定的格式排列。例如,一個雇員的歷史記錄中可能包含如下對象(也稱字段):

名      郵政編碼

教名     每小時的工資

姓      每小時的津貼

街道地址   累計休假

城市     累計病假

記錄中不僅定義了每個字段,而且定義了每個字段的大小以及字段之間的關系。因此,記錄描述規定了每一個字段的數據類型、記錄中的開始位置和字段的長度。依次地,因為每個雇員都有一條記錄,所有的記錄組合在一起就構成了文件,并且要指明文件特性(如最大的記錄數等)。

有時,對象定義得稍有不同。不是將每一項考慮為一個大記錄中的字段,而是將對象看作是獨立存在的。對象的描述包括每個對象的特性列表,以及所有使用對象或影響對象的動作的列表。例如,考慮“多邊形”對象。一個對象描述可以是,這個對象具有諸如邊數以及每條邊的長度等特性。動作可能包括計算面積和周長。甚至可能還可以有一個屬性稱為“多邊形類型”。這樣,可以標識每個“多邊形”的實例,例如是“菱形”還是“長方形”等。類型本身也可能有對象描述。例如“長方形”可以由“正方形”和“非正方形”組成。當我們在第4章研究需求分析的時候,將會探討這些概念,并在第6章討論面向對象開發的時候進行深入探討。

2.關系和系統邊界
一旦定義了實體和活動,就要把實體和它們的活動進行匹配。實體和活動之間的關系應該要清晰、仔細地予以定義。實體的定義包括實體起源于何處的描述。有些項駐留于已經存在的文件中,有些項在活動的過程中被創建。實體的目的地也是非常重要的。有些項僅僅被一個活動所使用,而有些項會被指定為其他系統的輸入。也就是說,系統的某些項會被當前系統范圍之外的活動所使用。因此,可以認為我們正在考慮的系統是有邊界的。有些項跨越邊界進入我們的系統,而另一些是我們系統的產品并為其他系統所使用。

使用這些概念,我們能夠把系統(system)定義成一組事物的集合:一組實體、一組活動、實體和活動之間關系的描述以及系統邊界的定義。系統的這個定義不僅適用于計算機系統,而且適用于其他任何事物(其中,對象以某種方式與其他對象交互)。

3.系統舉例
要了解系統定義是如何進行的,考慮一個呼吸系統的例子:身體吸進氧氣排出二氧化碳和水。我們可以很容易地定義它的邊界:如果指出身體的一個具體器官,就能說出它是不是呼吸系統的一部分。氧氣和二氧化碳分子都是實體或對象,它們按照可以明確定義的方式進出呼吸系統。我們也可以根據實體間的交互來描述系統中的活動。如果必要的話,可以通過什么進入以及什么離開來描述這個系統,也可以用一個表格來描述其中涉及的所有實體和活動。圖1-8說明了一個呼吸系統。請注意每個活動都涉及實體,并且可以通過描述哪些實體是輸入,它們如何被處理,以及輸出的結果來進行定義。

我們還必須清晰地描述計算機系統,與預期的用戶一起定義系統的邊界:我們的工作從什么地方開始以及在什么地方結束?另外,我們必須知道什么處于系統的邊界上,從而可以確定輸入的開始和輸出的目的地。例如,在打印工資單的系統中,支付信息可能來自公司的計算機,系統輸出可能是發送到郵箱的工資單的集合,送到適當的接收者手中。在圖1-9所示的系統中,我們可以了解邊界并且理解實體、活動和它們之間的關系。

圖1-9 工資單產品的系統定義

1.5.2 相互聯系的系統
邊界的概念之所以重要,是因為幾乎不存在與其他系統無關的系統。例如,呼吸系統必須與消化系統、循環系統、神經系統以及其他系統交互。呼吸系統沒有神經系統就不能發揮作用,循環系統沒有呼吸系統也不能正常工作。這種相互依賴可能是非常復雜的(實際上,由于我們不能認清生態系統的復雜性,已經引起并加劇了許多環境問題)。但是,一旦描述了系統的邊界,就很容易了解什么在系統內部、什么不在以及什么超出了邊界。

此外,一個系統存在于另外一個系統的內部也是可能的。描述一個計算機系統的時候,通常是集中于實際系統的一小部分。這種集中使得我們能夠定義和構建一個比包裹它的系統簡單得多的系統。如果仔細記錄那些影響系統的系統之間的交互,即使集中于更大系統中的較小部分,也不會有任何損失。

我們來討論一個例子,看一看是如何做到這一點的。假定要開發一個水系監控系統,該系統在整條河流經過的很多地點采集數據。在數據采集點完成若干計算,其結果被傳送到中心站點進行匯總報告。這樣一個系統的實現方式可能是:有一個中心站點的計算機,它與數十個在遠程站點的小型計算機進行通信。其中,必須考慮很多系統活動,包括收集水質數據的方式、在遠程站點進行的計算、與中心站點的信息通信、通信數據在數據庫或共享數據文件中的存儲以及根據數據創建報告。可以把這個系統看成是一些系統的集合,其中每個系統都有特定的目的。尤其是,我們可以只考慮較大的系統的通信方面,并且開發一個通信系統將數據從遠程站點傳送到中心站點。如果我們仔細地定義通信系統和大系統之間的邊界,通信系統的設計和開發就可以獨立于大系統來完成。

整個水系監控系統的復雜性要比通信系統大得多,因此,通過對分開的、較小的部分進行處理可以簡化我們的工作。如果邊界定義詳細、正確,那么根據較小的部分構建較大的系統是相對容易的。通過以分層的方式來考慮較大的系統,可以按圖1-10所示那樣描述系統的構造過程(以水系監控系統為例)。一個層次本身就是一個系統,但是,每一層及其包含的那些層次也構成一個系統,圖1-10中的圓圈表示它所代表的系統的邊界,所有圓圈的集合構成了水系監控系統。

一個系統可能包含另外一個系統,這一點很重要,因為它反映了這樣一個事實:一個系統中的對象或活動是外層所代表的每一個系統的一部分。因為每一層都會引入更多的復雜性,所以隨著每一層系統的加入,要理解任何一個對象或活動就會更加困難。因此,首先集中于最小的系統是最簡單的方法,這樣便于更好地理解隨后的系統。

我們使用這種思想來構建一個替換舊版本的新系統(無論是手工方式還是自動方式)。我們希望盡可能多地理解新、舊系統是如何運行的。通常情況下,兩個系統之間的差別越大,設計和開發就越困難。之所以出現這樣的困難,不僅是因為人們傾向于拒絕改變,而且這種差別使得系統難以學習。在構造或合成大系統的時候,把新系統的構造作為一系列遞增的中間系統是極其有用的。不是從A系統直接構建B系統,而是從A到A,再到A,然后到B。例如,假定A是一個包含3個主要功能的手工系統,B是A的自動化版本。我們可以將A系統定義為一個新的系統,它只有功能1是自動化的,而功能2和功能3仍是手工的。然后,A有自動化的功能1和功能2,但其功能3仍是手工的。最后,B具有3個自動化的功能。通過將A到B的“距離”分成三段,我們就得到了一系列小的問題,這比整個問題要更容易處理。

在我們的例子中,兩個系統非常相似。它們的功能是相同的,但是實現的方式不同。但是,目標系統常常與現有系統存在著巨大差別。尤其是,通常希望目標系統不受現有硬件和軟件所強加的約束的限制。增量開發(incremental development)方法可以包含一系列階段,其中每一個階段都使前面的系統不受當前系統約束的限制。例如,階段1可能增加一個新硬件,階段2可能替換執行一組特定功能的軟件。系統逐漸地從舊的軟件和硬件中脫離開,直到它體現出新系統的設計。

因此,系統開發可以首先在實際系統中實現一組變化,然后增加一系列變化以生成完整的設計方案,而不是從當前一步一下跳到將來。使用這種方法,我們必須同時從兩個不同的方面看待系統:靜態地和動態地。靜態視圖告訴我們系統如今如何運行,而動態視圖展示系統如何演變成最終的系統。缺少任何一方面都是不完整的。

本文僅用于學習和交流目的,不代表異步社區觀點。非商業轉載請注明作譯者、出處,并保留本文的原始鏈接。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395966.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395966.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395966.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2-2 用Python爬取銀河演員網上的演員參演電影的信息進行抓取

腳本中用到的actors_use.csv為之前從豆瓣上抓取的演員列表。 1 galaxyactors.py2 # -*- coding: utf-8 -*-3 #該腳本可以按照文件actors_use.csv中給出的演員的姓名4 #對銀河演員網http://www.8fkd.com/上的演員參演電影的信息進行抓取5 #信息包括演員參演電影和電影日期&#…

在c語言中,以r方式不能打開并不存在的文件,C語言文件選擇題

C語言文件選擇題(答案在最后)1、標準庫函數fgets(s,n,f)的功能是A) 從文件f中讀取長度為n的字符串存入指針s所指的內存B) 從文件f中讀取長度不超過n-1的字符串存入指針s所指的內存C) 從文件f中讀取n個字符串存入指針s所指的內存D) 從文件f中讀取長度為n-1的字符串存入指針s所指…

動腦2017android_您肯定要在2017年初嘗試的25個新Android庫

動腦2017androidby Michal Bialas由Michal Bialas 您肯定要在2017年初試用的25個Android庫 (25 Android libraries you definitely want to try out in early 2017) This is a list of 25 best Android libraries released in January and February 2017. All of these are wo…

linux中安裝多個mysql_liunx系統下安裝多個MySql數據庫并做主從配置

在網上搜索了很多資料,都沒有看到像樣的文檔,思路不是很清晰,對第一次安裝的朋友來說較為困難,經過長時間的安裝嘗試和查詢網上零碎的知識點,終于成功的完成Linux系統下多MySql數據庫安裝和主從配置,現在分…

034_nginx報錯總結

一、nginx: [emerg] "client_header_timeout" directive is not allowed here in /opt/nginx/conf/vhost.d/newton-api.uuwatch.com.conf:24 location / { client_body_timeout 5s;client_header_timeout 3s; #配置參數報錯proxy_set_header X-Forwarded-For …

江蘇省高等學校計算機一級成績查詢,江蘇計算機一級考試成績查詢

想要了解江蘇2020年9月計算機一級考試成績查詢入口的小伙伴快來看看吧!下面由出國留學網小編為你精心準備了“江蘇2020年9月計算機一級考試成績查詢入口公布”,持續關注本站將可以持續獲取更多的考試資訊!江蘇2020年9月計算機一級考試成績查詢…

Linux中mongodb安裝和導出為json

采用官方工具導出mongo數據為json格式 文檔:https://docs.mongodb.com/manual/reference/program/mongoexport/ 可以遠程導出,只要有host:port即可。 首先需要安裝tools: 在redhat中: 文檔:https://docs.mongodb.com/manual/tutor…

《樹莓派實戰秘籍》——1.17 技巧17添加重啟按鈕

本節書摘來異步社區《樹莓派實戰秘籍》一書中的第1章,第1.17節,作者:【美】Ruth Suehle ,Tom Callaway,更多章節內容可以訪問云棲社區“異步社區”公眾號查看 1.17 技巧17添加重啟按鈕 樹莓派實戰秘籍也許你已經注意到Pi缺少了某…

dns是指網絡域名系統_域名系統(DNS)是Internet的骨干。 這就是全部的運作方式。...

dns是指網絡域名系統by Nikolas ODonnell由Nikolas ODonnell 域名系統(DNS)的工作方式以及如何使其變得更好。 (How the Domain Name System (DNS) works and how you can make it better.) The Domain Name System (DNS) is often referred to as the backbone of the intern…

07.敏捷項目管理——推測階段筆記

00.推測階段關注產品很項目——創造和理解產品結構、性能和故事功能清單以及發布計劃。 01.發布計劃會用到與產品規格、平臺結構體系、資源、風險分析、業務約束以及目標進度等信息。 02.迭代計劃和開發方法有兩個至關重要的組成部分——短期迭代時間框和功能。 03.產品經理控制…

mysql臨時關閉索引功能_MySQL優化之索引優化

$1.WHY : 找到MySQL Query執行慢的原因1.1 EXPLAIN通過Explain查看SQL Query語句的執行情況&#xff0c;從中找出導致MySQL查詢性能差的原因EXPLAIN QUERY語句【字段解釋】<1> id -- 表的讀取順序id相同時&#xff0c;按照從上至下的順序執行id不同時&#xff0c;id值越…

Maven實戰. 1.3Maven與極限編程

1.3Maven與極限編程 極限編程&#xff08;XP&#xff09;是近些年在軟件行業紅得發紫的敏捷開發方法&#xff0c;它強調擁抱變化。該軟件開發方法的創始人Kent Beck提出了XP所追求的價值、實施原則和推薦實踐。下面看一下Maven是如何適應XP的。 首先看一下Maven如何幫助XP團隊實…

python 下字符串格式時間比較

python 下有多個有關時間的模塊&#xff0c;分別是time、datetime、calendar&#xff0c;今天重點討論下time寫法。 其中time模塊&#xff0c;主要有以下方法&#xff1a; ltimetime.time() 獲取當前系統時間&#xff0c;返回float型數值時間戳&#xff08;當前時間相對于1970.…

要記住的Facepalm:我在未先測試SDK的情況下對其進行了改進。

by Rahul Chowdhury通過拉胡爾喬杜里 要記住的Facepalm&#xff1a;我在未先測試SDK的情況下對其進行了改進。 (A Facepalm to Remember: I bumped up the version of an SDK without testing it first.) It all started when Google made its App Shortcuts API available fo…

《計算機應用基礎》第三套作業,《計算機應用基礎》第三套試卷和答案.doc

《計算機應用基礎》第三套試卷和答案洼擬酚痕扁亭疵熏瘤頂籌鮮愧禾候拂咨煥挖害騁邑授琳短雨況絮姚話混頸攆陛蠶撅瑟終妝響氫渾啄濃善籮將霞多仇齊眠長逗指臟和親鬧藩蝴班搬囊嫁瀾代閨杠貼漢磁渺禮懦縣謬勤享善跑紙億憑閨倔曳妖掩返狠撰翼蝎聚捌諄累堿膨躬孺癢凸蒂偉熱吊深瀝刑…

K8S Calico

NetworkPolicy是kubernetes對pod的隔離手段&#xff0c;是宿主機上的一系列iptables規則。 Egress 表示出站流量&#xff0c;就是pod作為客戶端訪問外部服務&#xff0c;pod地址作為源地址。策略可以定義目標地址或者目的端口 Ingress 表示入站流量&#xff0c;pod地址和服務作…

前端頁面內含外顯相關知識

頁面顯示&#xff1a; 對于頁面上篩選條件有下拉框加載的&#xff0c;直接下對應顯示時加載 {text : 產品線,dataIndex : entorgid,align : center,width : 150,renderer:function(value,metaData,record ,rowIndex,colIndex,store,view){if(value ! ""){$("#en…

捷克 簽證_一位捷克開發人員構建了可在您的瀏覽器中直接運行的語音合成器

捷克 簽證Here are three links worth your time:這是三個值得您花費時間的鏈接&#xff1a; A Czech developer built this mouth synthesizer that runs right in your browser. Be sure to turn your sound on. (1 minute watch interactive app) 一位捷克開發人員構建了可…

mvc 之 配置EF+oralce

只需要在項目中加載nuGet包就可以了 操作&#xff1a;工具--nuGet包管理器--程序包管理器控制臺 在 PM>處輸入 install-package entityframework 加載sqlserver的數據庫連接 install-package oracle.manageddataaccess.entityframework 加載oracle的數據庫連接 參考地址&…

計算機組裝與維修bios設置,(完整版)計算機組裝與維修模擬試題(BIOS設置的習題).docx...

第十二章BIOS 設置的習題一、問答題、目前 BIOS 的類型主要有哪幾種&#xff1f;、設置 Quick_Power_Self_Test( 快速開機自檢 ) 為什么狀態時&#xff0c;可以加速計算機的啟動&#xff1f;、何謂 _BIOS&#xff1f;、簡述 BIOS 的基本功能。、 BIOS與 CMOS有何區別&#xff1…