1. 程式人生 > >一種高效的跨程序MVC架構

一種高效的跨程序MVC架構

VcSmith、VcTester、VcAuto基同於一體系架構,功能層次劃分清晰,很好的實現了元件重用,使用一種跨程序MVC結構,保證系統具良好的伸縮性,構造出一種軟性的、指令碼化的緩衝層,讓調測變得很便利而高效。

VcTester分層架構

一個高效的軟體開發系統應有良好的分層架構,使各層能採用最恰當、最高效的語言進行開發,層之間介面除了要簡潔、清晰、便於理解,還應為除錯與自動化測試提供便利,良好的分層架構還需適應經常性軟體重構,便於產品功能拓展延伸,並支援大幅度程式碼重用或元件重用。

VcSmith、VcTester、VcAuto軟體架構具備上述高效研發系統的特徵。在抽象層次理解,它可以劃分4層:最上層是終端操作層,其下依次是調測介面層、業務實現層、基礎庫支援層。

抽象分層

VcTester系列軟體採用分散式架構,由多個可執行檔案構成一個協調靈活、功能拓展便利的體系。如下圖,在被測系統中駐留一個調測代理(是CSE腳本系統),然後將被測系統中的例項對映到調測代理,在調測試代理中可以用指令碼自由模擬被測系統的行為,也即:調測代理具備較完整的產品功能展現能力,以此為基礎衍生出各種各樣的調測支援功能。

分散式結構

使用者操作終端是獨立的可執行程式,它與被測系統中的調測代理通過共享記憶體方式建立連線。在此連線基礎上,我們封裝本地過程呼叫(Local Procedure Call,LPC)系統,之後再在LPC之上構造跨程序MVC系統,使介面操作與底層業務實現分離,並建立柔性互動,讓操作介面具備良好的可擴充套件性與可測試性。

基於這一架構,VcTester系列軟體可以方便的支援多個使用者終端,包括:控制檯終端(CON)、圖形介面終端(GUI)、表格驅動終端(TABLE),也能方便的接入一個遠端通訊代理來支援遠端診斷接入。

在終端操作層與其下業務實現層之間設有調測介面層,這一層是天然的指令碼解釋執行形式,除錯、測試、診斷都方便的支撐起來,且能快速實現自動化作業。

SRPC元件介面

VcTester系列軟體的各個程序主要通過共享記憶體方式實現通訊,這是一種端到端、匯流排式結構,各個埠都掛接在共享記憶體總線上,每個埠都用它的註冊名標識(比如VcSmith與VcTester的被測系統預設註冊名是CseClient,使用者介面註冊名是CseWin),各埠在底層通訊層次是對等的,無client、server之分,而在此之上疊加特定框架結構(比如MVC)後才有client與server之分。

SRPC元件分佈

VcTester採用CSE提供的共享記憶體架構,即SRPC元件(Simple Remote Procedure Call),之所以稱RPC,是因為該元件既支援LPC,也支援RPC,兩者基於同一架構,遠端通訊外掛作用於LPC,就成為RPC,所以統稱為RPC。SRPC提供兩類遠端呼叫,一類是exec呼叫,另一類是eval呼叫,前者是非同步模式,不要求等待返回結果,後者是同步模式,等待返回結果,除了遠端呼叫,SRPC還提供建立(或停止)通訊連線、檢視連線端狀態等輔助功能。

使用者可以將CSE的SRPC元件引入到自己的產品中,因為CSE是共享軟體,SRPC元件允許用於二次釋出,另外,SRPC提供多種介面,包括C/C++、Delphi、CSE、Python、VBA等,方便接入各個系統,在SRPC之上還提供一些封裝(如跨程序MVC)。

跨程序MVC結構

將使用者操作終端與業務邏輯實現分離到兩個程序後,我們構造一種跨程序的MVC結構,如下圖,其中Module提供業務邏輯實現,在駐留於被測系統的調測代理中實現,View與Controller在使用者介面實現。有關CSE的跨程序MVC實現細節可到CSE官方網站查閱相關資料。

分散式MVC

各個層次重用

因為VcTester系列軟體具備良好框架結構,所以能實現大幅度程式碼重用或元件重用。高度重用是我們研發過程的顯著特色,它讓我們在維持低成本生產的同時,能快速推出產品。

在基礎庫支援層(在調測代理中),我們重用CSE指令碼語言(這是一款開源的共享軟體)、VC調測元件介面(既支援對映系統,也支援我們整合介面的單步除錯)。

在調測介面層與終端操作層,我們重用了SRPC與跨程序MVC元件,在GUI介面重用了CVP外掛系統、SynEditV2控制元件(用於構造指令碼編輯器、C/C++編輯器),我們還重用VC編譯功能,提取編譯結果資訊來實施更精準、更智慧的C/C++語言分析。

當然,重用不限於原始碼或元件,我們在構築VcTester系列工具形成一套技術體系與調測理念的過程中,方方面面都體現重用思想。被測實體對映到指令碼,讓腳本系統具備對等的表現能力,是一種重用;除錯驅動指令碼與測試驅動分享,除錯操作生成測試指令碼,也是一種重用;單元與整合測試、介面測試、自動化測試、診斷測試各階段工作成果可重用;本系列工具的IDE環境提供強大的外部工具整合功能,象Pclint、VSS、VLD、ANT、SourceMonitor、Koders等工具都能方便整合進來,當然也是一種重用;再如,採用Excel構造表格驅動,也體現了一種重用,否則我們要自行開發(Excel夠強大了,沒必要重複發明一個輪子,再說,我們怎麼做也超不過Excel)。

就連使用者學習CSE語言,也可以高度重用。CSE具備良好的表述能力與語言對映能力,CSE V1.5將引入相容Python的功能,任意Python擴充套件模組都可重用到CSE系統中,會用CSE意味著你開始敲打掌握超強測試語言的大門。另外,CSE從V1.6開始支援混合程式設計,CSE指令碼能自動轉化為C/C++程式碼,此方式可讓程式設計效率倍升,上述SRPC與跨程序MVC也從該版本開始延伸為一個高效的程式設計框架,使用者可將它重用到自己的產品。再進一步,在CSE V2與V3規劃中,語言對映技術將進一步拓展,支援跨平臺,支援64位,展現文件化程式設計、視覺化程式設計、扁平化程式設計等理念。

總之,學會CSE,就已步入高效研發之路,當前VcTester系列工具只在調測領域展示一半的技術能力(即:線上語言對映技術),另一半(即:離線語言對映技術)將更精彩,功能更強勁,適用範圍也延伸至研發全領域,參見SEP 104:線上與離線語言對映技術概述

 

相關推薦

高效程序MVC架構

VcSmith、VcTester、VcAuto基同於一體系架構,功能層次劃分清晰,很好的實現了元件重用,使用一種跨程序MVC結構,保證系統具良好的伸縮性,構造出一種軟性的、指令碼化的緩衝層,讓調測變得很便利而高效。 VcTester分層架構 一個高效的軟體開發系統應有良好的

如何使用搜索技巧來成為高效程序

程序員 搜索功能搜索技能的重要性對於缺乏編程知識的人來說,完全有可能開發一個網頁或一個小應用。如果運氣夠好,當你使用谷歌去搜索一些示例的時候,你有可能會搜索到現成的代碼,並因此而完成工作。即便是那些經驗豐富的程序員,也經常會為了節約時間和精力而去搜索現有的解決方案。如果沒有搜索引擎、網絡和集體的智慧,現代化高

動效,屬於前端程序員的浪漫,無與倫比的體驗

前端 JavaScript CSS html 前端入門 一、初見 如果把網頁和用戶的關系比做正在戀愛的情侶,很顯然網頁的 UI 是顏值,而動效在我看來則是情侶之間的如果把網頁和用戶的關系比做正在戀愛的情侶,很顯然網頁的 UI 是顏值,而動效在我看來則是情侶之間的小浪漫。可能和顏值比起來,浪

高效的QPS統計方法

循環數組 eset 指數 yun return hashmap await spa 全面 一、概述 對QPS的統計,通常是對一秒內各線程通過數據處理鏈中某一個切入點的次數進行累加計數。且不論采用何種方式都繞不開鎖,那如何結合QPS統計的場景,減少線程之間對鎖的競爭,是各實現

[論文學習]An Effective Approach for Mining Mobile User Habits:高效挖掘移動使用者習慣的方法

原文: Cao H, Bao T, Yang Q, et al. An effective approach for mining mobile user habits[C]//Proceedings of the 19th ACM international confere

高效的序列化方式——MessagePack

最近在弄一些資料分析方面的內容,發現很多時候資料瓶頸在模組之間的資料序列化和反序列化上了,原來專案中用的是Json,找了一圈發現Json.net在Json序列化庫中已經是效能的佼佼者了,便準備從序列化方式入手了,最後選擇了MessagePack的這個序列化的庫。 MessagePack是一種的序列化格式。這

WPF 分享設置程序保存配置文件的方法

combo chang col ORC 地方 data 修改配置 set mys 最近需要做一個配置程序,主要給其他程序做相關配置的小工具。 配置項蠻多的,一般我們都是將各個配置項寫到配置文件的節點中,比如App.config文件或者自定義的xml文件。 因為我用的是wp

【轉載】無鎖環形佇列的高效實現

1.環形佇列是什麼  佇列是一種常用的資料結構,這種結構保證了資料是按照“先進先出”的原則進行操作的,即最先進去的元素也是最先出來的元素.環形佇列是一種特殊的佇列結構,保證了元素也是先進先出的,但與一般佇列的區別是,他們是環形的,即佇列頭部的上個元素是佇列尾部,通常是容

高效的android雙擊退出(可擴充套件多擊)

參考Google,安卓手機中在檢視安卓系統版本的地方,三擊或者多擊會出現彩蛋,可以借鑑其原始碼進行實現。 //利用陣列來儲存時間     long[] mHits = new long[3];     @Override     pub

高效雙端佇列(連結串列)實現方式

本文將介紹一種高效的雙端佇列(連結串列),包括資料結構、新建佇列、插入頭結點、插入尾節點、刪除頭結點等,所有操作的時間複雜度均為O(1)。 為了方便理解,部分函式前面均配了一幅圖作為介紹。 首先,資料結構定義如下: typedef struct node_s {

Liv Wild:高效的專案啟動方式——QuickStart

一種高效的專案啟動方式——QuickStart,該方法用以確認在專案開始之前理解專案的關鍵驅動因素。來自ThoughtWorks英國分公司的Liv Wild為現場觀眾介紹QuickStart的理念與實踐。 主持人:有請Liv Wild做主題演講,演講的題目是“一種高效的專案啟

高效熵提取的TRNG設計

        在如今人工智慧與虛擬互動的時代,人們對​​於資訊保安有了更高的要求。隨機數作為資訊加密與通訊協議中最為基本的一環,其隨機性與不可預測性有了更高的標準。儘管人們可以通過計算機,利用演算法產生的偽隨機數來作為隨機源,但隨著新技術新科技的發展,在資訊保安領域隨機數的質量也成為了一個潛在的隱患。因為通

[轉載] 更清晰的Android架構

一種更清晰的Android架構 過去幾個月以來,通過在Tuenti網站上與@pedro_g_s和@flipper83(安卓開發兩位大牛)進行友好討論之後,我決定寫這篇關於架構安卓應用的文章。 我寫這篇文章的目的是想把我在過去幾個月體悟到的小方法以及在調查和應用中學到的有用的東西分享給大家。 入門指南 大家都

高效無鎖記憶體佇列的實現

Disruptor是LMAX公司開源的一個高效的記憶體無鎖佇列。這兩天看了一下相關的設計文件和部落格,下面嘗試進行一下總結。 第一部分。引子 談到併發程式設計,有幾個概念是避免不了的。 1.鎖:鎖是用來做併發最簡單的方式,當然其代價也是最高的。核心態的鎖的時候需要作業

更清晰的 Android 架構

過去幾個月以來,通過在Tuenti網站上與@pedro_g_s和@flipper83(安卓開發兩位大牛)進行友好討論之後,我決定寫這篇關於架構安卓應用的文章。 我寫這篇文章的目的是想把我在過去幾個月體悟到的小方法以及在調查和應用中學到的有用的東西分享給大家

ORACLE刪除重複資料的高效的方法

刪除重複資料的一種高效的方法 表demo是重複拷貝自dba_objects,有88萬左右,不重複的是27323,沒有索引 方法一:delete   from   demo   a   where   a.rowid   <>   (select   max(

高效、可自動擴容、快取、永久儲存通用方案設計

離線訊息儲存方案 1 系統框架設計 1.1 名詞解釋: 名詞 解釋 備註 OffServer叢集 離線訊息伺服器叢集 Redis 一個redis例項 用於儲存一些關鍵資訊 MysqlKeyHashServer(MKHS) 代理整

Anti-Caching:新型資料庫管理系統架構

1.寫在前面 之前的三篇博文主要介紹了NVM(Non-Volatile Memory)和資料庫相關的內容。NVM因其讀寫效能接近DRAM、可位元組定址、非易失、大容量等特點,在電腦科學的許多領域都具有非常身後的發掘潛力。而我目前研究的資料庫方向只是NVM所應用

無鎖環形佇列的高效實現

1.環形佇列是什麼  佇列是一種常用的資料結構,這種結構保證了資料是按照“先進先出”的原則進行操作的,即最先進去的元素也是最先出來的元素.環形佇列是一種特殊的佇列結構,保證了元素也是先進先出的,但與一般佇列的區別是,他們是環形的,即佇列頭部的上個元素是佇列尾部,通常是容

LeetCode189——Rotate Array兩解法(易讀,高效

Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,