阜新住房建設委員會網站seo推廣怎么學
軟件工程
面向對象設計原則
- 單一職責:設計目的單一的類
- 開閉原則;對擴展開放,對修改關閉
- 里氏替換:子類可以替代父類
- 依賴倒置:要依賴于抽象,而不是實現(xiàn)。要針對接口編程,不要針對實現(xiàn)編程
- 接口隔離:使用多個專門的接口好過使用單一的總接口
- 組合重用:要盡量使用組合而不是繼承來達到重用的目的
- 迪米特法則:最少知識法則,一個對象應當對其他對象有盡可能少的了解(封裝)
迪米特法則的應用準則:
- 在類的劃分上,應當創(chuàng)建有弱耦合的類。類之間的耦合越弱,就越有利于復用。
- 在類的結構設計上,每一個類都應當盡量降低成員的訪問權限。一個類不應當public自己的屬性,而應當提供取值和賦值的方法讓外界間接訪問自己的屬性。
- 在類的設計上,只要有可能,一個類應當設計成不變類。
- 在對其它對象的引用上,一個類對其它對象的引用應該降到最低。
耦合
耦合表示模塊之間聯(lián)系的緊密程度。模塊間的耦合度是指模塊之間的依賴關系,包括控制關系、調用關系、數(shù)據(jù)傳遞關系。模塊間聯(lián)系越多,其耦合性越強,同時表明其獨立性越差。降低模塊間的耦合度能減少模塊間的影響,防止對某一模塊修改所引起的牽一發(fā)動全身的水波效應,保證系統(tǒng)設計順利進行。
緊密耦合表示模塊之間聯(lián)系非常強,松散耦合表示模塊之間聯(lián)系比較弱,非直接耦合則表示模塊之間無任何直接聯(lián)系。模塊的耦合類型通常分為7種:
- 非直接耦合:兩個模塊之間沒有直接關系,它們之間的聯(lián)系完全是通過上級模塊的控制和調用來實現(xiàn)的。
- 數(shù)據(jù)耦合:一組模塊借助參數(shù)表傳遞簡單數(shù)據(jù)。
- 標記耦合:一組模塊通過參數(shù)表傳遞記錄等復雜信息(數(shù)據(jù)結構)。
- 控制耦合:模塊之間傳遞的信息中包含用于控制模塊內部邏輯的信息。
- 通信耦合:也叫外部耦合,一組模塊共用一組輸入信息,或它們的輸出需要整合以形成完整數(shù)據(jù),即共享輸入或輸出。
- 公共耦合:多個模塊都訪問同一個公共數(shù)據(jù)環(huán)境,公共的數(shù)據(jù)環(huán)境可以是全局數(shù)據(jù)結構、共享的通信區(qū)、內存的公共覆蓋區(qū)等。
- 內容耦合:也叫內部耦合,一個模塊直接訪問另一個模塊的內部數(shù)據(jù);一個模塊不通過正常入口轉到另一個模塊的內部;兩個模塊有一部分程序代碼重疊;一個模塊有多個入口等。
對于模塊之間耦合的強度,主要依賴于一個模塊對另一個模塊的調用、一個模塊向另一個模塊傳遞的數(shù)據(jù)量、一個模塊施加到另一個模塊的控制的多少,以及模塊之間接口的復雜程度。
內聚
軟件設計中通常用耦合度和內聚度作為衡量模塊獨立程度的標準。劃分摸塊的一個準則就是高內聚低耦合。
內聚度是指內部各元素之間聯(lián)系的緊密程度,模塊的內聚種類通??煞譃?種,按其內聚度從低到高的次序依此為:
- 偶然內聚:巧合內聚,完成一組沒有關系或松散關系的任務
- 邏輯內聚:完成邏輯上相關的一組任務
- 瞬時內聚:時間內聚,所包含的任務必須在同一時間間隔內執(zhí)行
- 過程內聚:處理元素相關,而且必須按特定的次序執(zhí)行
- 通信內聚:所有處理元素集中在一個數(shù)據(jù)結構的區(qū)域上
- 順序內聚:處理元素相關,而且必須順序執(zhí)行
- 功能內聚:完成一個單一功能,各個部分協(xié)調工作,缺一不可
系統(tǒng)建模
包括四個模塊:
- 用例建模:描述參與者和系統(tǒng)之間的主要交互;用例建??梢悦枋隼嫦嚓P者所看到的系統(tǒng)行為
- 組件建模:確定系統(tǒng)的子系統(tǒng)、模塊和組件結構,為子系統(tǒng)、模塊分配需求和職責,每個組建元素作為一個自包含的單元,用于開發(fā)、部署和執(zhí)行
- 服務建模:提供通用的應用程序,并將應用程序定義為一組抽象服務接口
- 性能建模:是對系統(tǒng)的性能進行度量,為每個組件確定性能指標。包括執(zhí)行時間、資源使用、開發(fā)復雜性、維護復雜性等
靜態(tài)分析
靜態(tài)分析通過解析程序文本從而識別出程序語句的各個部分,審查可能的缺陷和異常之處,靜態(tài)分析包括五個階段:
- 控制流分析階段找出并突出顯示那些帶有多重出口或入口的循環(huán)以及不可達到的代碼段;
- 數(shù)據(jù)使用分析階段突出程序中變量的使用情況;
- 接口分析階段檢查子程序和過程說明及它們使用的一致性;
- 信息流分析階段找出輸入變量和輸出變量之間的依賴關系;
- 路徑分析階段找出程序中所有可能的路徑并畫在此路徑中執(zhí)行的語句
軟件質量
軟件質量是指反映軟件系統(tǒng)或軟件產品滿足規(guī)定或隱含需求的能力的特征和特性全體。軟件質量管理是指對軟件開發(fā)過程進行的獨立的檢查活動,由質量保證、質量規(guī)劃和質量控制三個主要活動構成。軟件質量保證是指為保證軟件系統(tǒng)或軟件產品充分滿足用戶要求的質量而進行的有計劃、有組織的活動,其目的是生產髙質量的軟件。軟件評審是軟件質量保證的主要活動之一。
軟件質量強調3個方面的內容:
- 軟件需求:測試軟件質量的基礎
- 開發(fā)標準:定義一組用于指導軟件開發(fā)方式的準則
- 期望需求:間接定義用戶對某些特性的需求
軟件設計
軟件設計包括體系結構設計、接口設計、數(shù)據(jù)設計和過程設計。
- 結構設計:定義軟件系統(tǒng)各主要部件之間的關系;開發(fā)一個模塊化的程序結構,并表示出模塊間的控制關系
- 數(shù)據(jù)設計:將模型轉換成數(shù)據(jù)結構的定義。好的數(shù)據(jù)設計將改善程序結構和模塊劃分,降低過程復雜性
- 接口設計:人機界面設計,軟件內部,軟件和操作系統(tǒng)間以及軟件和人之間如何通信
- 過程設計:系統(tǒng)結構部件轉換成軟件的過程描述
外部&內部設計
外部設計處于軟件設計的開始階段,主要是按系統(tǒng)需求說明來確定此系統(tǒng)的軟件結構和對應于系統(tǒng)需求說明,設計出各個功能部分的功能和接口。內部設計處于軟件工程中的概要設計階段,按照外部設計中確立的系統(tǒng)軟件結構,來細化此系統(tǒng)各個功能部件以及各個部件接口的設計,并且詳細給出各個功能部件詳細的數(shù)據(jù)輸入、輸出設計。內部設計細化外部設計中的各種功能。
用戶界面設計
用戶界面設計的基本原則是從實踐中總結出來的一些設計規(guī)則。Theo Maiidel在他的界面設計著作中提出3條黃金規(guī)則:
- 讓用戶擁有控制權:用戶希望控制計算機,而不是被計算機控制,因此在設計人機界面時應遵循以下原則:交互模式的定義不能強迫用戶進入不必要的或不希望的動作的方式、提供靈活的交互、允許用戶交互可以被中斷和撤銷、當技能級別增長時可以使交互流水化并允許定制交互、使用戶隔離內部技術細節(jié)。
- 減少用戶的記憶負擔:要求用戶記住的東西越多,與系統(tǒng)交互時出錯的可能也越大,因此好的用戶界面設計不應加重用戶的記憶負擔。減少用戶記憶負擔的設計原則為:減少對短期記憶的要求、建立有意義的默認值、定義直覺性的捷徑、界面的視覺布局應該基于真實世界的隱喻、以不斷進展的方式提示信息。
- 保持界面一致:用戶應該以一致的方式展示和獲取信息,這意味著所有可視信息的組織遵循統(tǒng)一的設計標準,所有屏幕顯示都遵守該標準。輸入機制被約束到有限的集合內,在整個軟件系統(tǒng)中被一致地使用,同時從任務到任務的導航機制也被一致地定義和實現(xiàn)。保持界面一致性的設計原則包括以下內容:允許用戶將當前任務放在有意義的語境中、在應用系列內保持一致性、不要改變用戶己經熟悉的用戶交互模型。
軟件重用
軟件重用是指在兩次或多次不同的軟件開發(fā)過程中重復使用相同或相似軟件元素的過程。
按照重用活動是否跨越相似性較少的多個應用領域,分垂直式重用與水平式重用:
- 垂直式重用:縱向重用,局限于某一垂直領域的重用,如只在電力系統(tǒng)中用到的構件。指在一類具有較多公共性的應用領域之間進行軟部件重用??v向重用活動的主要關鍵點是域分析:根據(jù)應用領域的特征及相似性預測軟部件的可重用性。
- 水平式重用:橫向重用,指通用領域的重用。在不同應用領域都可重用的軟件元素,如數(shù)據(jù)結構、分類算法和人機界面構建等。標準函數(shù)是一種典型的、原始的橫向重用機制。
軟件復用過程:創(chuàng)建、復用、支持、管理4個過程
- 創(chuàng)建:界定和提供可復用資產,以滿足復用者的需要
- 復用:利用可復用資產來生產應用軟件產品
- 支持:全面支持可復用資產的獲取、管理和維護工作
- 管理:執(zhí)行計劃、啟動、資源、跟蹤,并協(xié)調其他各個過程
SDE
軟件開發(fā)環(huán)境(Software Development Environment,SDE)是指支持軟件的工程化開發(fā)和維護而使用的一組軟件,由軟件工具集和環(huán)境集成機制構成。
軟件開發(fā)環(huán)境應支持多種集成機制:如平臺集成、數(shù)據(jù)集成、界面集成、控制集成和過程集成。軟件開發(fā)環(huán)境應支持小組工作方式,并為其提供配置管理,環(huán)境的服務可用于支持各種軟件開發(fā)活動,包括分析、設計、編程、調試和文檔等。較完善的軟件開發(fā)環(huán)境通常具有多種功能,例如,軟件開發(fā)的一致性與完整性維護,配置管理及版本控制,數(shù)據(jù)的多種表示形式及其在不同形式之間的自動轉換,信息的自動檢索與更新,項目控制和管理,以及對開發(fā)方法學的支持。軟件開發(fā)環(huán)境具有集成性、開放性、可裁減性、數(shù)據(jù)格式一致性、風格統(tǒng)一的用戶界面等特性,因而能大幅度提高軟件生產率。
軟件開發(fā)環(huán)境應支持多種集成機制,根據(jù)功能的不同,集成機制可以劃分為環(huán)境信息庫、過程控制與消息服務器、環(huán)境用戶界面三部分:
- 環(huán)境信息庫。環(huán)境信息庫是軟件開發(fā)環(huán)境的核心,用以存儲與系統(tǒng)開發(fā)有關的信息,并支持信息的交流與共享。環(huán)境信息庫中主要存儲兩類信息,一類是開發(fā)過程中產生的有關被開發(fā)系統(tǒng)的信息,例如分析文檔、設計文檔和測試報告等;另一類是環(huán)境提供的支持信息,如文檔模板、系統(tǒng)配置、過程模型和可復用構件等。
- 過程控制與消息服務器。過程控制與消息服務器是實現(xiàn)過程集成和控制集成的基礎。過程集成時按照具體軟件開發(fā)過程的要求進行工具的選擇與組合,控制集成使各工具之間進行并行通信和協(xié)同工作。
- 環(huán)境用戶界面。環(huán)境用戶界面包括環(huán)境總界面和由它實行統(tǒng)一控制的各環(huán)境部件及工具的界面。統(tǒng)一的、具有一致性的用戶界面是軟件開發(fā)環(huán)境的重要特征,是充分發(fā)揮環(huán)境的優(yōu)越性、高效地使用工具并減輕用戶的學習負擔的保證。
管理
軟件工程管理集成過程管理和項目管理,包括以下 6 個方面:啟動和范圍定義、軟件項目計劃、軟件項目實施、評審和評價、關閉、軟件工程度量。
生命周期
根據(jù)傳統(tǒng)的軟件生命周期方法學,可以把軟件生命周期劃分為軟件定義、軟件開發(fā)、軟件運行、軟件維護。
軟件產品從形成概念開始,經過開發(fā)、使用和維護,直到最后退役的全過程成為軟件生存周期。一個完整的軟件生存周期是以需求為出發(fā)點,從提出軟件開發(fā)計劃的那一刻開始,直到軟件在實際應用中完全報廢為止。軟件生存周期的提出了是為了更好地管理、維護和升級軟件,其中更大的意義在于管理軟件開發(fā)的步驟和方法。
軟件生存周期模型又稱軟件開發(fā)模型(Software Develop Model)或軟件過程模型(Software Process Model),它是從某個特定角度提出的軟件過程的簡化描述。
可參考軟考高級之系統(tǒng)架構師系列之軟件開發(fā)模型
維護
軟件維護工作包括多種類型:
- 改正性維護:也叫正確性維護,改正在系統(tǒng)運行(使用)階段已發(fā)生而系統(tǒng)測試階段尚未發(fā)現(xiàn)的錯誤。軟件測試不可能發(fā)現(xiàn)系統(tǒng)中所有潛在的錯誤,程序在使用過程中還可能發(fā)生錯誤,診斷和更正這些錯誤的過程稱為改正性維護
- 適應性維護:指使應用軟件適應信息技術變化和管理需求變化而進行的修改。在使用過程中,外部環(huán)境(新的硬、軟件配置)、數(shù)據(jù)環(huán)境(數(shù)據(jù)庫、數(shù)據(jù)格式、數(shù)據(jù)輸入/輸出方式、數(shù)據(jù)存儲介質)可能發(fā)生變化。為使軟件適應這種變化,而去修改軟件的過程就稱為適應性維護
- 完善性維護:指擴充功能和改善性能而進行的修改。在軟件的使用過程中,用戶往往會對軟件提出新的功能與性能要求。為了滿足這些要求,需要修改或再開發(fā)軟件,以擴充軟件功能、增強軟件性能、改進加工效率、提高軟件的可維護性
- 預防性維護:為了適應未來的軟硬件環(huán)境的變化(為了改進軟件未來的可維護性或可靠性,或為了給未來的改進提供更好的基礎而對軟件進行修改),應主動增加預防性的新功能,以使應用系統(tǒng)適應各類變化而不被淘汰。目的是檢測并更正軟件產品中的潛在錯誤,防止它們成為實際錯誤
逆向工程
逆向工程與重構工程是目前預防性維護采用的主要技術。所謂軟件的逆向工程就是分析已有的程序,尋求比源代碼更高級的抽象表現(xiàn)形式。一般認為,凡是在軟件生命周期內將軟件某種形式的描述轉換成更為抽象形式的活動都可稱為逆向工程。
逆向工程導出的信息可分為如下4個抽象層次:
- 實現(xiàn)級:包括程序的抽象語法樹、符號表、過程設計表示等信息
- 結構級:包括反映程序分量之間相互依賴關系的信息,例如調用圖、結構圖、數(shù)據(jù)結構等
- 功能級:包括反映程序段功能及程序段之間關系的信息,如數(shù)據(jù)和控制流模型
- 領域級:包括反映程序分量或程序與應用領域概念之間對應關系的信息,如實體關系模型
上述信息的抽象級別越高,它與代碼的距離就越遠,通過逆向工程恢復的難度亦越大,而自動工具支持的可能性相對變小,要求人參與判斷和推理的工作增多。
應用系統(tǒng)構建中可以采用多種不同的技術,逆向工程就是分析已有的程序,尋求比源代碼更高級的抽象表現(xiàn)形式,在軟件生命周期內將軟件某種形式的描述轉換成更為抽象形式的活動;重構是指在同一抽象級別上轉換系統(tǒng)描述形式;設計恢復是指借助工具從已有程序中抽象出有關數(shù)據(jù)設計、總體結構設計和過程設計的信息;再工程是在逆向工程所獲信息的基礎上修改或重構已有的系統(tǒng),產生系統(tǒng)的一個新版本。
復雜度
軟件源碼復雜度度量方法主要有三種:
- 代碼行方法:最簡單,該方法認為,代碼行越多,軟件越容易產生漏洞
- Helstead方法:思路是根據(jù)程序中可執(zhí)行代碼行的操作符和操作數(shù)的數(shù)量來計算程序的復雜性。操作符和操作數(shù)的量越大,程序結構就越復雜
- McCabe方法:環(huán)路復雜度,用來定量度量程序的邏輯復雜度
McCabe
托馬斯·麥克凱提出的一種基于程序控制流的復雜性度量方法,又稱環(huán)路度量,循環(huán)復雜度(Cyclomatic Complexity),條件復雜度,圈復雜度。它認為程序的復雜性很大程度上取決于程序圖的復雜性。單一的順序結構最為簡單,循環(huán)和選擇所構成的環(huán)路越多,程序就越復雜。
McCabe度量法以圖論為工具,先畫出程序圖,然后用該圖的環(huán)路數(shù)作為程序復雜性的度量值。程序圖是退化的程序流程圖,即把程序流程圖的每一個處理符號都退化成一個結點,原來連接不同處理符號的流線變成連接不同結點的有向弧,這樣得到的有向圖就叫做程序圖。
根據(jù)圖論,在一個強連通的有向圖G中,環(huán)的個數(shù)V(G)
計算公式:
V(G) = m ? n + 2
V(G)
是有向圖G中環(huán)路數(shù),m是圖G中弧數(shù),n是圖G中結點數(shù),p是圖G中強連通分量個數(shù)。在一個程序中,從程序圖的入口點總能到達圖中任何一個結點,因此,程序總是連通的,但不是強連通的。為了使圖成為強連通圖,從圖的出口點到入口點加一條用虛線表示的有向邊,使圖成為強連通圖。這樣就可以使用上式計算環(huán)路復雜性。
另有一種計算公式:環(huán)路復雜度 = 閉環(huán)個數(shù) + 1
McCabe復雜度包括:圈復雜度、基本復雜度、模塊設計復雜度、設計復雜度、集成復雜度、行數(shù)、規(guī)范化復雜度、全局數(shù)據(jù)復雜度、局部數(shù)據(jù)復雜度、病態(tài)數(shù)據(jù)復雜度。
工具
軟件系統(tǒng)工具的種類繁多,很難有統(tǒng)一的分類方法。通常可以按軟件過程活動將軟件工具分為軟件開發(fā)工具、軟件維護工具、軟件管理和軟件支持工具。
- 軟件開發(fā)工具:需求分析工具、設計工具、編碼與排錯工具。
- 軟件維護工具:版本控制工具、文檔分析工具、開發(fā)信息庫工具、逆向工程工具、再工程工具。
- 軟件管理和軟件支持工具:項目管理工具、配置管理工具、軟件評價工具、軟件開發(fā)工具的評價和選擇。