操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    語:本文作者從2015年開始進(jìn)入B類產(chǎn)品的打造,前后幾年時間進(jìn)行了行業(yè)內(nèi)容的探索,從概念產(chǎn)品的提出,到產(chǎn)品營收千萬以上,從產(chǎn)品1.0的兩三個功能到后續(xù)迭代二三十個功能的平臺產(chǎn)品,沉淀了一些個人觀點(diǎn)與經(jīng)驗,在此分享出來與大家討論交流,希望能與大家有更多討論。

    一、B端產(chǎn)品新定義

    1. B端產(chǎn)品與工具產(chǎn)品的差異性

    “Word、PPT、PS等軟件算是 B端產(chǎn)品嗎?”

    這個問題困擾我很久,以往對B端產(chǎn)品的定義大部分是“面向企業(yè)提供服務(wù)的產(chǎn)品”,但上列的軟件,即可以為企業(yè)服務(wù),同時也完全可以為個人使用,那么它們算是B端產(chǎn)品嗎?如果不是,那么什么是B端產(chǎn)品?

    如果對一個行業(yè)沒有精準(zhǔn)的定位,那么在產(chǎn)品設(shè)計過程中,做出預(yù)判與差異化是非常困難,于是便開始進(jìn)行了新定義的思考。

    “To B”產(chǎn)品大概從2016開始興起,在此之前大部分服務(wù)企業(yè)的線上產(chǎn)品被稱為“后臺”產(chǎn)品,2015年前后,釘釘?shù)纫苿愚k公軟件開始火熱,行業(yè)中開始興起與“To C”產(chǎn)品對應(yīng)的“To B”產(chǎn)品類別。

    至此,為企業(yè)提供服務(wù)的產(chǎn)品開始稱為B端產(chǎn)品。但經(jīng)歷了幾年發(fā)展以后,我們發(fā)現(xiàn)這個定義是存在模糊的,有些工具產(chǎn)品即可為個人服務(wù),也可以為企業(yè)服務(wù)。

    B端界定應(yīng)該與企業(yè)目標(biāo)與發(fā)展趨勢相匹配,而我個人認(rèn)為ToB產(chǎn)品,更清晰的定義應(yīng)該是針對“企業(yè)”的特性的來提取與界定出來,“企業(yè)”標(biāo)準(zhǔn)界定是如下描述的:“企業(yè)一般是指以盈利為目的,運(yùn)用各種生產(chǎn)要素(土地、勞動力、資本、技術(shù)和企業(yè)家才能等),向市場提供商品或服務(wù),實行自主經(jīng)營、自負(fù)盈虧、獨(dú)立核算的法人或其他社會經(jīng)濟(jì)組織。”

    其中,目標(biāo)是以盈利為目的,環(huán)境與對象是市場,手段是運(yùn)用各種要素。

    所以我們基于這個目的可以抽離出來,企業(yè)是必須要追求盈利的,并且會不斷的面臨市場競爭,也就需要不斷的拓展企業(yè)本身的產(chǎn)品或服務(wù)體系,以在競爭中站穩(wěn),最終這些發(fā)展都將帶來企業(yè)的人數(shù)變多、部門變多、職責(zé)變多的情況,所以最終會呈現(xiàn)出一個具備清晰組織形態(tài)的結(jié)果。

    我們以是否能支持組織形態(tài),來判斷一個產(chǎn)品是否為ToB產(chǎn)品,會更加的清晰,例如:Office套件中,個人使用時,是工具,而購買企業(yè)版后,具備了用戶數(shù)量的分配、權(quán)限的分配等功能,那么就是一個ToB產(chǎn)品。

    ToB產(chǎn)品界定標(biāo)準(zhǔn)分析框架

    “具備組織形態(tài)”,這個定義的實際作用主要為以下幾點(diǎn):

    1)能清晰預(yù)判ToB產(chǎn)品的基礎(chǔ)功能

    例如,權(quán)限、角色、部門等相關(guān)功能都是基礎(chǔ)內(nèi)容,需要提前開始建立,并且盡早考慮組件化、組織化。

    2)為預(yù)判產(chǎn)品業(yè)務(wù)發(fā)展提供基礎(chǔ)邏輯

    例如,基于業(yè)務(wù)與行業(yè)狀態(tài),核心功能有哪些是必須要做的,哪些是以后很可能需要做的衍生功能,哪些是未來可能合作的第三方功能。

    3)為建立業(yè)務(wù)關(guān)聯(lián)性提供預(yù)見性

    例如,建立產(chǎn)品框架與功能關(guān)聯(lián)流程時,能預(yù)判出哪些業(yè)務(wù)可能會產(chǎn)生關(guān)聯(lián),提前建立組件、模態(tài)設(shè)計形式。

    4)能為用戶研究體系構(gòu)建分析基礎(chǔ),提供有效的分析結(jié)果

    例如,不同職責(zé)關(guān)注信息不同,決策者看重數(shù)據(jù)統(tǒng)計,管理者關(guān)注權(quán)限與數(shù)據(jù)安全,執(zhí)行者關(guān)注業(yè)務(wù)問題解 決的效率。并且組織形態(tài)下,不同部門的用戶也對功能有著較大差異的述求。

    組織形態(tài)示例

    二、設(shè)計價值

    1. 視覺設(shè)計價值

    “為什么要投入那么多資源開發(fā)數(shù)據(jù)界面,甚至制作3D效果?”

    這個話題可以引導(dǎo)出視覺設(shè)計在B的核心價值之一,B類產(chǎn)品中的視覺設(shè)計價值,是一個備受討論的話題:

    一方面認(rèn)為B類產(chǎn)品中視覺設(shè)計的價值發(fā)揮較弱,不能像C類產(chǎn)品中一樣,可以與運(yùn)營深度結(jié)合,帶來流量,同時由于B端產(chǎn)品設(shè)計內(nèi)容量較大,使用時偏重效率為主,也較難在情感化設(shè)計方面發(fā)揮出高價值。

    而另一方面認(rèn)為,B類產(chǎn)品中視覺設(shè)計的難度不比C類的小,其中設(shè)計規(guī)范、設(shè)計體系、系統(tǒng)化設(shè)計方面,由于產(chǎn)品量級的問題,都相對會復(fù)雜很多。

    而我個人認(rèn)為,B端產(chǎn)品的視覺設(shè)計價值,核心應(yīng)該分為兩大方面:

    1)是針對決策輸出的內(nèi)容,目的是引流與體現(xiàn)企業(yè)示例,打造光環(huán)效應(yīng)

    例如數(shù)據(jù)大屏、數(shù)字化效果演示模塊,這塊是吸引決策者的核心內(nèi)容,可以理解為引流的設(shè)計,這方面的設(shè)計效果可以直接影響老板的購買決策,潛在體現(xiàn)出B類產(chǎn)品供應(yīng)商企業(yè)對產(chǎn)品質(zhì)量、業(yè)務(wù)理解、內(nèi)容設(shè)計的能力,能讓產(chǎn)品快速產(chǎn)生光環(huán)效應(yīng),引導(dǎo)老板等決策層產(chǎn)生購買意愿。

    2)是針對執(zhí)行層輸出的內(nèi)容,目的是降低認(rèn)知成本,提供使用效率,同時也降低設(shè)計研發(fā)成本

    例如管理模塊、權(quán)限體系模塊、流程審批與具體任務(wù)執(zhí)行模塊等,針對執(zhí)行層的內(nèi)容,細(xì)分到業(yè)務(wù)場景中,我們都可以理解為在設(shè)計一個工具,而工具強(qiáng)調(diào)“清晰、高效”,所以整體視覺的價值在引導(dǎo)用戶快速使用方面是具備重要價值的。

    再一方面,B類產(chǎn)品存在的業(yè)務(wù)模塊多、內(nèi)容量級大的情況,所以視覺設(shè)計在組件化、模塊化、復(fù)用性方面都能降低內(nèi)部的設(shè)計耗時,還有新產(chǎn)品構(gòu)建時的研發(fā)耗時,這也是視覺設(shè)計價值的一部分。

    總的來說,B類產(chǎn)品中,視覺設(shè)計價值主要在引流與降本兩方面,體現(xiàn)在以下三點(diǎn):

    1. 引流,即引導(dǎo)決策者對產(chǎn)品產(chǎn)生良好影響;
    2. 降低認(rèn)知成本,強(qiáng)化執(zhí)行層客戶的使用效率;
    3. 降低團(tuán)隊內(nèi)部設(shè)計與研發(fā)成本。

    展廳大屏效果示例 – 搞定決策者,體現(xiàn)出產(chǎn)品質(zhì)量,打造光環(huán)效應(yīng)

    2. 交互設(shè)計價值

    相對而言,B端產(chǎn)品中的交互設(shè)計價值更加直觀。

    一方面可以明顯的為提高用戶解決業(yè)務(wù)問題的效率做出價值;另一方面在預(yù)判產(chǎn)品發(fā)展,可以為產(chǎn)品避免高成本迭代。

    進(jìn)行長期框架制定上,可以盡力為產(chǎn)品在未來功能大幅增長后,提供依舊可用的框架,并且功能入口認(rèn)知成本低,且易于尋找,這可以為產(chǎn)品在長期發(fā)展中節(jié)省大量的迭代成本。

    一個發(fā)展了2年以上的B端產(chǎn)品,在2.0或3.0的版本下可能迭代一次需要研發(fā)投入1~3個月的時間,同時產(chǎn)品需求梳理與設(shè)計研究與落地也可能都要投入1~3個月,甚至以上。

    這對產(chǎn)品在與競品賽跑的過程中是即為不利的,一個適應(yīng)業(yè)務(wù)發(fā)展的交互框架,可以很好的解決這個問題。

    第三方面的價值是對企業(yè)內(nèi)而言的,主要是降本增效。

    利用中臺思維,建立基礎(chǔ)控件、業(yè)務(wù)組件、模塊組件等內(nèi)容,提高產(chǎn)品研發(fā)與定制化項目的效率,降低研發(fā)成本,提供為其他企業(yè)提供服務(wù)的效率,可以極好的提供產(chǎn)品的服務(wù)滿意度。

    總結(jié)而言,交互設(shè)計在B類產(chǎn)品的價值在降本與長期口碑兩方面,主要體現(xiàn)以下三個方向:

    1. 提高客戶解決業(yè)務(wù)問題的效率;
    2. 降低產(chǎn)品迭代成本,為產(chǎn)品在競爭賽道中贏得有利地位;
    3. 降低企業(yè)內(nèi)部定制化研發(fā)成本,為創(chuàng)新提供更多的時間。

    千牛商家后臺 – 針對實際使用,提高效率,建立良好的框架與組件內(nèi)容,讓產(chǎn)品走的更穩(wěn)、更遠(yuǎn)、更快

    三、設(shè)計難點(diǎn)與解決思路

    1. 難點(diǎn)1 – 用戶研究

    “C端用研方法為何在B端推進(jìn)時阻礙重重?”,這也是在B類產(chǎn)品設(shè)計經(jīng)常討論的一個問題。

    由于B端產(chǎn)品是為企業(yè)所提供的服務(wù)產(chǎn)品,而企業(yè)本身大部分都有其專屬的行業(yè)特性,并且這些行業(yè)差異性非常之大,例如醫(yī)療與物流、教育與企業(yè)服務(wù),這些行業(yè)中的用戶本身專業(yè)性、生活習(xí)慣、社會關(guān)系、消費(fèi)偏好都存在不同。

    同時每個行業(yè)的專業(yè)術(shù)語、技術(shù)背景也不同,還存在著信息需要保密等狀況,對做用戶研究帶來了巨大阻礙。那么從什么角度來做B端用戶研究會更加快速準(zhǔn)確?這里分享我們常用的方式,總的方向傾向使用定性類的測試與現(xiàn)象觀察分析類的思維。

    我們直觀看下B類與C類用戶的區(qū)別:

    從上圖中我們可以看到,C類產(chǎn)品受眾大部分是具備同質(zhì)性的,而大部分C類產(chǎn)品的策略也是優(yōu)先吸引的是同類人群。雖然他們在不同地點(diǎn)、不同的年齡,但有明顯共同喜好、習(xí)慣或述求。

    而B類場景中,我們經(jīng)常可以看到白發(fā)管理者與剛畢業(yè)的年青人在交流。企業(yè)中的客戶,除了同在一個企業(yè)共事是明顯的共性外,年齡、習(xí)慣、消費(fèi)水平基本都存在差異性,我們從觀察法的角度來嘗試進(jìn)行B端用戶的特性研究。

    其中主要是從本能與習(xí)慣兩個維度來分析,進(jìn)而得出用戶習(xí)慣與偏好,具體思路如下:

    對習(xí)慣的研究,我們可以稱為“認(rèn)知慣性”的研究,大部分人在一個陌生環(huán)境中,面臨選擇時,通常傾向選擇與日常生活環(huán)境相似的色彩、相似的行為順序、相似的語言語調(diào)。

    這是人類本能中的一個傾向,很多情況下,我們會選擇更具備安全感的方向,通常熟悉的內(nèi)容與環(huán)境能為我們提供較為安全的感覺。

    我們通過觀察用戶的企業(yè)環(huán)境、生活環(huán)境、該群體共同關(guān)注的消費(fèi)品領(lǐng)域,還有該群體對共同關(guān)注消費(fèi)品的認(rèn)知等,都能提取出非常重要的認(rèn)知習(xí)慣信息,從這些信息中,我們可以觀察出用戶對事物的認(rèn)知特性,基礎(chǔ)分析邏輯如下:

    基于實踐的意識形成過程

    我們以一個比較典型的案例來看,在政企行業(yè)的會議中,座位的等級是非常清晰明確的,并且流程極其規(guī)范。所以在很多政企內(nèi)產(chǎn)品中,流程化、標(biāo)準(zhǔn)化是必要的,然后再追求高效。

    并且這類人群對信息的正確性與安全性是非常看重的,在安全與效率中,遵循的基本尊則是安全、符合標(biāo)準(zhǔn)是第一位,此時設(shè)計產(chǎn)品時,體驗關(guān)注點(diǎn)需要關(guān)注在如何構(gòu)建一個安全的體系與標(biāo)準(zhǔn)流程上,完成后再去追求高效便捷的易用性指標(biāo)。

    如果違背了安全標(biāo)準(zhǔn)的規(guī)則,一味的以C類產(chǎn)品的體驗視角去推動,是容易受阻的。而在滿足安全標(biāo)準(zhǔn)的條件下,再去追求高效便捷,甚至情感化,是更好的一個產(chǎn)品迭代順序,也更利于產(chǎn)品被客戶所接受并營造更好的服務(wù)口碑。

    政企行業(yè)的會議示例(圖片來自網(wǎng)絡(luò))

    政務(wù)服務(wù)軟件 – 延續(xù)了政務(wù)體系中的認(rèn)知慣性,強(qiáng)調(diào)清晰、明確(圖片來自網(wǎng)絡(luò))

    在B類產(chǎn)品中,每個行業(yè)看重的指標(biāo)非常不同。每個行業(yè)都應(yīng)該要先建立指標(biāo)體系與指標(biāo)優(yōu)先級,再進(jìn)行產(chǎn)品設(shè)計規(guī)劃與迭代會更加容易。

    例如G端(服務(wù)政府產(chǎn)品)類的,一定要先遵循安全標(biāo)準(zhǔn),再追求易用性。而在智能硬件行業(yè)中,管理平臺更追求高效便捷,安全問題也重要,但由于安全相關(guān)問題不多,所以會將效率指標(biāo)放的更高。

    那么如何研究行業(yè)的業(yè)務(wù)特征,并且制定量化指標(biāo)與系統(tǒng)化思維也是B類產(chǎn)品的重要問題,這是B類產(chǎn)品的第二個難點(diǎn) – 研究業(yè)務(wù),接下來我們就來探討一下業(yè)務(wù)研究的方法。

    2. 難點(diǎn)2 – 業(yè)務(wù)研究方法

    “這個行業(yè)的典型特性是什么?”,相信這個問題在每一個B類系統(tǒng)的設(shè)計師與產(chǎn)品經(jīng)理面前都會呈現(xiàn)出來。前面提到B類產(chǎn)品一個很重要的目標(biāo)是為系統(tǒng)提升效率而服務(wù),而這個提升效率的對象是什么,需要有清晰的界定。

    大部分B類產(chǎn)品解決的問題,都是企業(yè)中的老問題、老流程,通過數(shù)字化的形式,提高以往線下溝通、對接、制作、審批等環(huán)節(jié)的效率問題,以提高解決業(yè)務(wù)問題的效率,降低人力成本,甚至完成以前人力投入量太大而導(dǎo)致無法解決的問題。

    了解業(yè)務(wù)場景與核心內(nèi)容,有以下兩種核心方式:

    1)收集業(yè)務(wù)以為在線下解決問題的路徑與方式

    進(jìn)行書面類文檔、人與人溝通節(jié)點(diǎn)與交付內(nèi)容的梳理,輸出核心目標(biāo)、關(guān)鍵節(jié)點(diǎn)、整體流程、呈現(xiàn)形式四種內(nèi)容。

    2)收集以往使用的平臺系統(tǒng)與專業(yè)工具

    由于我們針對的行業(yè)大部分已經(jīng)存在幾十年甚至上百年,所以他們也具備了一些舊的線上系統(tǒng)與對應(yīng)的專業(yè)工具,深入研究這些工具的構(gòu)架、流程、核心界面元素是非常有效的方式,研究完成后,需要輸出業(yè)務(wù)平臺與專業(yè)工具的布局框架布局、常見流程、特色功能、必備功能等內(nèi)容。

    通過這兩種方向的內(nèi)容收集與分析,可以幫助大家梳理出以下一些主要內(nèi)容:

    • 業(yè)務(wù)核心目標(biāo)
    • 業(yè)務(wù)標(biāo)準(zhǔn)流程
    • 業(yè)務(wù)關(guān)聯(lián)關(guān)系
    • 專業(yè)詞匯
    • 以往操作習(xí)慣
    • 工具認(rèn)知級別

    我們以表格的形式進(jìn)行梳理,會更加直觀的得出結(jié)果,給出一個大致的示例:

    在了解了業(yè)務(wù)后,通常就是對以往業(yè)務(wù)的流程、產(chǎn)品進(jìn)行優(yōu)化,已達(dá)到提升效率的方法。同時,為了驗證優(yōu)化的結(jié)果是有明顯作用的,也就要求要建立出具體的量化指標(biāo),接下來我們看如何基于業(yè)務(wù)建立量化指標(biāo)體系。

    建立量化指標(biāo)的方法:通過業(yè)務(wù)研究了解了關(guān)鍵發(fā)力方向后,需要對優(yōu)化效果進(jìn)行量化指標(biāo)建立。對于量化指標(biāo),可以分為內(nèi)、外兩個方向。內(nèi),指的是對產(chǎn)品本身而言,這個方面中,衡量效率與認(rèn)知成本是核心的指標(biāo)。

    由于B類產(chǎn)品邀請客戶參與實際測試的機(jī)會較少、門檻也較高,大部分也由于數(shù)據(jù)隱私問題無法采用埋點(diǎn)的形式收集數(shù)據(jù)。

    所以在與客戶實際溝通前,進(jìn)行一輪效率測試是困難,但卻必須的。針對效率計算方式我們先拆解出一個與用戶剝離的方式,直接計算步驟、使用頻率、功能使用者的決策影響力三個要素進(jìn)行測算,可以使用以下公式:

    效率優(yōu)先級=步驟 x 功能使用頻率 x 用戶數(shù)量 x 使用成員的決策影響力

    (注:使用成員的決策能力在業(yè)務(wù)來看,大部分是老板第一、管理人員第二,執(zhí)行層第三)

    計算示例(數(shù)據(jù)制作者 lili)

    但對于使用效率而言,單獨(dú)計算步驟本身不能代表實際的使用效率。

    在有了這部分效率計算維度,最終也是必須要實際用戶配合測試才能得出有效結(jié)果,這個結(jié)果的目的是測試易用性相關(guān)內(nèi)容,例如錯誤率、易學(xué)性、有效性等等,基本邏輯是與定性測試相同。

    但由于實測用戶的機(jī)會寶貴,并且還有B類用戶真實的實操者對業(yè)務(wù)可能述求不同,習(xí)慣也不同,所以基于他們的測試結(jié)果或者收集的建議會有很大偏差。

    為了保證測試結(jié)果的有效性,可以邀請行業(yè)中的三種特性人群進(jìn)行測試,會得出更好更全面的測試結(jié)果。

    1)業(yè)務(wù)專家

    他們對業(yè)務(wù)精通,如果行業(yè)內(nèi)有相關(guān)比賽,盡量邀請排名靠前的專家,他們可以提供前瞻性的建議,并且可以提供如何提高業(yè)務(wù)效率的具體思路,對行業(yè)中的人群認(rèn)知也能提供基礎(chǔ)信息。

    2)日常業(yè)務(wù)執(zhí)行者

    他們每日都會進(jìn)行日常的業(yè)務(wù)處理,可以提供對業(yè)務(wù)的慣性理解與認(rèn)知習(xí)慣。

    3)老板與管理層人員

    他們很多是產(chǎn)品或定制化產(chǎn)品的產(chǎn)品審核者,他們平時不經(jīng)常執(zhí)行業(yè)務(wù),所以對業(yè)務(wù)的具體建議可能會有所誤導(dǎo),這點(diǎn)需要注意。但他們對產(chǎn)品未來規(guī)劃,還有與競品的對比情況非常清晰,可以很好地反饋出目前設(shè)計的水準(zhǔn)。

    從這個三個角色能提供的信息特性如下:

    最后,再基于三種不同角色的用戶去建立細(xì)化的量化指標(biāo),即可完成,例如:

    1)日常業(yè)務(wù)執(zhí)行者

    關(guān)注效率,指標(biāo)為效率與認(rèn)知,得出的結(jié)果是數(shù)據(jù)測試的結(jié)果。

    2)管理層人員

    關(guān)注結(jié)果與規(guī)劃,指標(biāo)為認(rèn)知相關(guān)、數(shù)據(jù)密度相關(guān)指標(biāo),有條件也可以加入凈推薦值(NPS)的指標(biāo),針對管理層。得出的更多是定性指標(biāo),結(jié)果是分?jǐn)?shù)。

    3)業(yè)務(wù)專家

    關(guān)注效率,并能提供創(chuàng)新性的思維與指導(dǎo)。指標(biāo)為效率與認(rèn)知,最好再加入定性維度,與競品做對比分析,得出的結(jié)果是數(shù)據(jù)內(nèi)容與分?jǐn)?shù)。

    在了解完整體業(yè)務(wù),并且也建立了初步的指標(biāo)后,通常需要思考產(chǎn)品框架如何搭建、功能如何組合的問題,目的是希望能搭建一個不錯的框架,讓產(chǎn)品后面避免框架方面的大修改,降低團(tuán)隊的研發(fā)成本,同時也能更好的應(yīng)對多功能集成述求,并且保證產(chǎn)品體驗與效果不降低。解決這個問題的方法,我們可以使用“系統(tǒng)化思維”。

    應(yīng)用系統(tǒng)化思維,搭建穩(wěn)定包容的產(chǎn)品框架。“這個產(chǎn)品功能非常多,能不改就不要改”,類似情況在B類產(chǎn)品迭代中時經(jīng)常見到的。

    B類產(chǎn)品的迭代邏輯,大多都是由單一功能價值服務(wù)到平臺價值服務(wù)發(fā)展的。這與B類產(chǎn)品制造企業(yè),從小規(guī)模起家到大規(guī)模后具備客戶群體基礎(chǔ),有非常強(qiáng)的關(guān)聯(lián)。

    B類產(chǎn)品隨著企業(yè)的發(fā)展與增長,需要不停的添加新功能,為制造B類產(chǎn)品的企業(yè)尋找新的發(fā)展方向,以抵御市場競爭,構(gòu)建出有力的壁壘。

    由此原因,B類產(chǎn)品在較長時間內(nèi),都會不停的增加新的功能,并且會經(jīng)常出現(xiàn)三種常見情況:

    1. 集成其他產(chǎn)品的功能;
    2. 提供接口被其他產(chǎn)品集成;
    3. 為大型客戶提供定制化產(chǎn)品,自己打造一個基礎(chǔ)產(chǎn)品的標(biāo)準(zhǔn)平臺。

    這三種情況都意為著產(chǎn)品會與其他企業(yè)密切合作,并且自身也需要不停地增加功能。

    大部分B類產(chǎn)品的主功能有3或4個,衍生功能有10多個,甚至20多個。而發(fā)展2~3年后的B類產(chǎn)品,迭代成本異常高昂,產(chǎn)品內(nèi)部保證一致性也非常不容易,后期還需要集成其他企業(yè)的功能,并且為客戶提供一致的體驗。

    為了解決這一問題,中臺、組件等思維都開始應(yīng)用興起起來,它們都是為了解決功能太多、管理不易、調(diào)整太慢的問題。

    而解決業(yè)務(wù)發(fā)展與內(nèi)容調(diào)整效率的問題,主要也有三種思路:

    1. 全面了解業(yè)務(wù)情況,構(gòu)建高包容性產(chǎn)品框架;
    2. 建立高通用性的基礎(chǔ)控件與組件,還有高頻操作框架的認(rèn)知(例如確認(rèn)與關(guān)閉按鈕的位置等),給集成產(chǎn)品提供規(guī)范與標(biāo)準(zhǔn),同時面對要調(diào)整時能快速對組件、色彩進(jìn)行統(tǒng)一調(diào)整;
    3. 建立常用業(yè)務(wù)組件,并深入優(yōu)化業(yè)務(wù)組件性能與易用性,并與快速搭建定制化產(chǎn)品。

    B類產(chǎn)品的框架搭建,可以從OS系統(tǒng)的迭代邏輯中吸取很好的經(jīng)驗。OS系統(tǒng)也面臨需要建立用戶習(xí)慣認(rèn)知,并且大量接納各類APP或軟件制作商來制作各行業(yè)的軟件,同時要保證產(chǎn)品的一致性。

    OS系統(tǒng)從Windows98開始,已經(jīng)迭代了20多年,建立起來非常不錯的框架與接口邏輯,并且OS也是以提供基礎(chǔ)功能為主,例如我們常用的大部分是文件夾、Doc欄等,其他的文本編輯、繪圖等功能,經(jīng)常使用第三方企業(yè)提供的軟件。

    我們可以以下圖來對比OS與B類產(chǎn)品的發(fā)展情況:

    四、設(shè)計創(chuàng)新方向

    1. 視覺設(shè)計創(chuàng)新

    B端視覺設(shè)計創(chuàng)新是一個新興探索的方向,由于大部分產(chǎn)品都追求簡潔高效,所以大部分人認(rèn)為視覺難以發(fā)力,創(chuàng)新也較難。但其實在B類行業(yè)中,視覺創(chuàng)新是非常重要的一個部分,并且對核心決策者的決策影響非常大。

    視覺創(chuàng)新有三個方向:

    1)在數(shù)據(jù)可視化方向的創(chuàng)新

    這方面的創(chuàng)新都是針對核心決策者的創(chuàng)新,目的是讓產(chǎn)品的實際價值更加直觀,通常以數(shù)據(jù)可視化的形式呈現(xiàn),并且也體現(xiàn)出B類企業(yè)的產(chǎn)品研發(fā)設(shè)計水平,讓購買者放心,同時營造出光環(huán)效應(yīng)。

    數(shù)據(jù)可視化效果創(chuàng)新示例 – 體現(xiàn)質(zhì)量與效果 – 針對核心決策者

    2)在具體業(yè)務(wù)內(nèi)容方向的創(chuàng)新

    針對B類產(chǎn)品業(yè)務(wù)特性非常多的特性產(chǎn)生的,所以基于業(yè)務(wù)也需要優(yōu)化的視覺內(nèi)容,例如圖片展示樣式、大小。

    同時核心業(yè)務(wù)中的重點(diǎn)元素視覺優(yōu)化也是對提高產(chǎn)品使用效率有直接價值的,這個方向在工具產(chǎn)品中較為常見,例如Teambition采用的卡片任務(wù)與甘特圖形式關(guān)聯(lián)的方式,相對以往多個工具切換,要直觀方便很多。

    基于業(yè)務(wù)組件的創(chuàng)新 – 提高效率與降低認(rèn)知負(fù)擔(dān) – 針對實操人員,考慮流程可視化、入口清晰性、操作負(fù)擔(dān)等維度

    3)在核心業(yè)務(wù)的重點(diǎn)元素上創(chuàng)新

    基于核心業(yè)務(wù)后,還需要再進(jìn)行細(xì)分,針對核心的組件進(jìn)行創(chuàng)新,目的也在于提高解決業(yè)務(wù)問題的效率,通常通過降低認(rèn)知負(fù)擔(dān)或提高操作便捷新、信息閱讀便捷性來達(dá)成。

    依舊以Teambition為案例,在任務(wù)分配的場景下,進(jìn)行了任務(wù)卡片的創(chuàng)新,而這個創(chuàng)新來源于對任務(wù)責(zé)任人的表達(dá)形式、任務(wù)到期提醒信息的信息閱讀便捷型進(jìn)行了創(chuàng)新。

    重點(diǎn)元素優(yōu)化 – 降低認(rèn)知負(fù)擔(dān)并提高效率 – 針對實操人員,考慮動效、大小、圖形語義等維度

    2. 交互設(shè)計創(chuàng)新

    交互方向的創(chuàng)新,是圍繞著對團(tuán)隊內(nèi)部的研發(fā)設(shè)計效率、對客戶的業(yè)務(wù)問題效率兩方面進(jìn)行的,大致有三個方向:

    1)基于框架發(fā)展的創(chuàng)新

    這個創(chuàng)新的難度最大,需要對業(yè)務(wù)有深入的了解,并且能對行業(yè)發(fā)展與業(yè)務(wù)述求的發(fā)展有準(zhǔn)確的預(yù)判性(這個預(yù)判最好的來源是前面提到的專家與決策者用戶),基于準(zhǔn)確的預(yù)判,并且深入了解業(yè)務(wù)上下游產(chǎn)品的述求與功能聚合性后,才能建立起來一個穩(wěn)定的、具備包容性且清晰的框架。

    例如,釘釘在基于微信左中右結(jié)構(gòu)下,進(jìn)行了更多內(nèi)容集合、工作工具的框架創(chuàng)新,并且為了建立更強(qiáng)的擴(kuò)展性,在“工作”中采用了web的標(biāo)簽形式,便于進(jìn)行多功能切換操作。

    2)基于核心業(yè)務(wù)的組件創(chuàng)新

    具體是從現(xiàn)有產(chǎn)品中,抽離出具備共性的內(nèi)容,并且這些組件是要在業(yè)務(wù)流程中處于核心環(huán)節(jié)的高頻組件,這些組件的優(yōu)化對產(chǎn)品解決業(yè)務(wù)操作效率有明顯的價值,這樣的組件投入資源進(jìn)行創(chuàng)新才具備核心價值與競爭力。

    依舊以釘釘為例,代辦事項是工作中常用的一種提醒工具,對代辦事項組件的建立、查看與提醒流程的組件搭建,既可以有效解決辦公效率問題,也可以減少產(chǎn)研團(tuán)隊設(shè)計開發(fā)的成本。

    3)同樣是對核心業(yè)務(wù)的元素進(jìn)行創(chuàng)新

    這個創(chuàng)新主要是圍繞提高效率進(jìn)行的創(chuàng)新,通常需要先找到核心業(yè)務(wù)中最高頻的交互元素,然后進(jìn)行交互形式、交互動效、內(nèi)容操作形式的創(chuàng)新。

    這個方向在公開的產(chǎn)品中較少見到精準(zhǔn)有效的創(chuàng)新,我們以國外的郵箱工具Spark為例,在日常工作中,郵件溝通都是較為正式且重要的內(nèi)容。

    但由于每個人的事物都較多,有時在概覽完郵件信息后,希望稍晚處理,所以需要做稍后處理的標(biāo)記,SparkMail的基于這個高頻行為,在移動端與PC端都進(jìn)行快捷的交互優(yōu)化,移動端采用右滑標(biāo)記,Mac端采用右滑或右鍵標(biāo)記的方式。

    3. 技術(shù)效果創(chuàng)新

    技術(shù)效果創(chuàng)新,同樣也是圍繞產(chǎn)品價值體現(xiàn)的,其中核心的創(chuàng)新為兩個方向,一個是針對決策者的效果創(chuàng)新,另一個是針對實際產(chǎn)品效率的創(chuàng)新。

    1)針對決策者的創(chuàng)新 -Web3D與智慧大屏效果創(chuàng)新

    這類創(chuàng)新需要與視覺設(shè)計密切合作,視覺效果與數(shù)據(jù)信息的呈現(xiàn)是重點(diǎn)。現(xiàn)在通常使用的有兩種基礎(chǔ)技術(shù),一種是與web平臺直接結(jié)合的3D效果,這類大部分使用Threejs的邏輯進(jìn)行顯示,具體案例可以在ThreeJS官網(wǎng)進(jìn)行查看。

    基于這類技術(shù),國內(nèi)也退出了跟簡潔化的服務(wù),例如ThingJS,這類網(wǎng)站大家只需拖動模型就可以做出一定的效果,開發(fā)也比較便于使用,但效果大部分只能做到中等水準(zhǔn),對電腦的性能消耗也較大。

    這類創(chuàng)新建議使用在大型項目的數(shù)據(jù)可視化界面,同時建議作為配置項,針對設(shè)備性能不高的客戶,即時隱藏該功能,避免性能影響帶來使用效率的降低。這里我們以谷歌與Threejs合作的實驗為展示案例:

    還有一種效果創(chuàng)新,是針對在大屏展示的項目中的,目前大部分基于Unity進(jìn)行開發(fā),對顯卡性能的要求比較高,建議只在演示項目與展廳中使用。

    這類創(chuàng)新也非常依賴視覺效果,并且其中的開發(fā)流程與游戲開發(fā)較為類似,需要一名TA(技術(shù)美術(shù))進(jìn)行Shader的效果制作,大部分用于園區(qū)、城市級別、復(fù)雜樓宇的效果數(shù)據(jù)可視化展示。

    更全面的案例了解可以看下潘洛斯團(tuán)隊與騰訊大數(shù)據(jù)可視化項目組這篇總結(jié):《案例:大數(shù)據(jù)可視化 “靈鯤”態(tài)勢感知系統(tǒng)中的理論與實踐》

    這兩種技術(shù)效果,針對場景都可進(jìn)行不同選擇,重大演示場景,需要體現(xiàn)技術(shù)的數(shù)據(jù)結(jié)果,使用Unity進(jìn)行創(chuàng)新效果最佳。普通使用展示數(shù)據(jù)可視化,可以采用Web3D。如果對3D內(nèi)容沒有述求,可以進(jìn)行圖標(biāo)可視化的內(nèi)容創(chuàng)新。

    2)前端效果創(chuàng)新 – 針對的實際使用者

    由于B類產(chǎn)品中,產(chǎn)品要解決大量的認(rèn)知問題與效率問題,前端效果的創(chuàng)新同樣也是圍繞這兩個維度進(jìn)行的。表層效果的技術(shù)創(chuàng)新,以降低用戶認(rèn)知為目標(biāo),提高用戶使用效率,例如一些圖片相關(guān)產(chǎn)品中,圖片剪裁、拖動、放大等效果的創(chuàng)新。

    還有一些是為產(chǎn)品加載速度創(chuàng)新,例如大量的列表、大量的樹結(jié)構(gòu)等,這類控件的加載速度非常影響用戶解決業(yè)務(wù)問題,而進(jìn)行越多的創(chuàng)新就越好。這方面作者也不是內(nèi)行,只將通常關(guān)注的網(wǎng)站發(fā)出來與大家分享。

    AntDesign團(tuán)隊的一些新內(nèi)容發(fā)布,網(wǎng)址如下:

    3)工程化創(chuàng)新 – 面對的是團(tuán)隊內(nèi)部的穩(wěn)定性與效率

    工程化在前端開發(fā)中研究的太多,作者從設(shè)計師的角度也無法帶給大家深入的解讀,但可以以此為引子,為大家擴(kuò)展一些思路。

    基本的目標(biāo)是提高解決產(chǎn)品出問題后,查找相關(guān)問題的精準(zhǔn)度與速度,而設(shè)計經(jīng)常遇到的還原度問題也可以用工程化思維進(jìn)行解決,盡量將前端與設(shè)計最終效果、設(shè)計組件、設(shè)計靈活性的關(guān)系加強(qiáng),是解決產(chǎn)品質(zhì)量穩(wěn)定提升的一個有效思路。

    上半部分就到這里了,后面部分的內(nèi)容主要以具體方法、具體呈現(xiàn)結(jié)果的一些簡單示例為主要內(nèi)容,梳理好后繼續(xù)分享給大家,期待與大家的交流。

    本文由 @湯圓 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

    題圖來自Unsplash,基于CC0協(xié)議

    、地址概念和程序如何運(yùn)行

    在多道程序環(huán)境下,要使程序運(yùn)行,必須先為之創(chuàng)建進(jìn)程。而創(chuàng)建進(jìn)程的第一件事,便是將程序和數(shù)據(jù)裝入內(nèi)存。如何將一個用戶源程序變?yōu)橐粋€可在內(nèi)存中執(zhí)行的程序,通常都要經(jīng)過以下幾個步驟:

    首先是要編譯:

    由編譯程序(Compiler)將用戶源代碼編譯成cpu可執(zhí)行的目標(biāo)代碼,產(chǎn)生了若干個目標(biāo)模塊(Object Module)(即若干程序段)。形成的目標(biāo)代碼,每個目標(biāo)代碼都是以0為基址順序進(jìn)行編址,原來用符號名訪問的單元用具體的數(shù)據(jù)——單元號取代。這樣生成的目標(biāo)程序占據(jù)一定的地址空間,稱為作業(yè)的邏輯地址空間,簡稱邏輯空間。

    在邏輯空間中每條指令的地址和指令中要訪問的操作數(shù)地址統(tǒng)稱為邏輯地址 。很簡單,邏輯地址就是你源程序里使用的地址,或者源代碼經(jīng)過編譯以后編譯器將一些標(biāo)號,變量轉(zhuǎn)換成的地址。

    其次是鏈接

    由鏈接程序(Linker)將編譯后形成的一組目標(biāo)模塊(程序段),以及它們所需要的庫函數(shù)鏈接在一起,形成一個完整的裝入模塊(Load Module);

    最后是裝入(地址重定位)

    由裝入程序(Loader)將裝入模塊裝入物理內(nèi)存。物理內(nèi)存是真實存在的插在主板內(nèi)存槽上的內(nèi)存條的容量的大小。

    物理內(nèi)存內(nèi)存是由若干個存儲單元組成的,每個存儲單元有一個編號,這種編號可唯一標(biāo)識一個存儲單元,稱為內(nèi)存地址(或物理地址)。我們可以把內(nèi)存看成一個從0字節(jié)一直到內(nèi)存最大容量逐字節(jié)編號的存儲單元數(shù)組,即每個存儲單元與內(nèi)存地址的編號相對應(yīng)。

    裝入模塊雖然具有統(tǒng)一的地址空間,但它仍是以“0”作為參考地址,即是浮動的。要把它裝入內(nèi)存執(zhí)行,就要確定裝入內(nèi)存的實際物理地址,并修改程序中與 地址有關(guān)的代碼,這一過程叫做地址重定位。地址重定位主要是把邏輯地址轉(zhuǎn)換成物理內(nèi)存絕對地址,這個工作又稱為地址映射。

    圖4-2 對用戶程序的處理步驟

    二. 程序的鏈接

    源程序經(jīng)過編譯后,可得到一組目標(biāo)模塊,再利用鏈接程序?qū)⑦@組目標(biāo)模塊鏈接,形成裝入模塊。根據(jù)鏈接時間的不同,可把鏈接分成如下三種:

    (1) 、靜態(tài)鏈接。在程序運(yùn)行之前,先將各目標(biāo)模塊及它們所需的庫函數(shù),鏈接成一個完整的裝配模塊,以后不再拆開。我們把這種事先進(jìn)行鏈接的方式稱為靜態(tài)鏈接方式。

    (2)、 裝入時動態(tài)鏈接。這是指將用戶源程序編譯后所得到的一組目標(biāo)模塊,在裝入內(nèi)存時,采用邊裝入邊鏈接的鏈接方式。

    (3)、 運(yùn)行時動態(tài)鏈接。這是指對某些目標(biāo)模塊的鏈接,是在程序執(zhí)行中需要該(目標(biāo))模塊時,才對它進(jìn)行的鏈接。

    1.靜態(tài)鏈接方式(Static Linking)

    我們通過一個例子來說明在實現(xiàn)靜態(tài)鏈接時應(yīng)解決的一些問題。在圖 4-4(a)中示出了經(jīng)過編譯后所得到的三個目標(biāo)模塊A、B、C,它們的長度分別為 L、M和N。在模塊A中有一條語句CALL B,用于調(diào)用模塊B。在模塊B中有一條語句CALL C,用于調(diào)用模塊C。B和C都屬于外部調(diào)用符號,在將這幾個目標(biāo)模塊裝配成一個裝入模塊時,須解決以下兩個問題:

    (1) 對相對地址進(jìn)行修改。在由編譯程序所產(chǎn)生的所有目標(biāo)模塊中,使用的都是相對地址,其起始地址都為 0,每個模塊中的地址都是相對于起始地址計算的。在鏈接成一個裝入模塊后,原模塊B和 C在裝入模塊的起始地址不再是 0,而分別是 L和 L+M,所以此時須修改模塊B和C中的相對地址,即把原B中的所有相對地址都加上 L,把原 C中的所有相對地址都加上L+M。

    (2) 變換外部調(diào)用符號。將每個模塊中所用的外部調(diào)用符號也都變換為相對地址,如把B 的起始地址變換為 L,把 C 的起始地址變換為 L+M,如圖 4-4(b)所示。這種先進(jìn)行鏈接所形成的一個完整的裝入模塊,又稱為可執(zhí)行文件。通常都不再拆開它,要運(yùn)行時可直接將它裝入內(nèi)存。這種事先進(jìn)行鏈接,以后不再拆開的鏈接方式,稱為靜態(tài)鏈接方式。

    圖 4-4 程序鏈接示意圖

    2.裝入時動態(tài)鏈接(Load-time Dynamic Linking)

    用戶源程序經(jīng)編譯后所得的目標(biāo)模塊,是在裝入內(nèi)存時邊裝入邊鏈接的,即在裝入一個目標(biāo)模塊時,若發(fā)生一個外部模塊調(diào)用事件,將引起裝入程序去找出相應(yīng)的外部目標(biāo)模塊,并將它裝入內(nèi)存,還要按照圖4-4所示的方式來修改目標(biāo)模塊中的相對地址。裝入時動態(tài)鏈接方式有以下優(yōu)點(diǎn):

    (1) 、便于修改和更新。對于經(jīng)靜態(tài)鏈接裝配在一起的裝入模塊,如果要修改或更新其中的某個目標(biāo)模塊,則要求重新打開裝入模塊。這不僅是低效的,而且有時是不可能的。若采用動態(tài)鏈接方式,由于各目標(biāo)模塊是分開存放的,所以要修改或更新各目標(biāo)模塊是件非常容易的事。

    (2)、便于實現(xiàn)對目標(biāo)模塊的共享。在采用靜態(tài)鏈接方式時,每個應(yīng)用模塊都必須含有其目標(biāo)模塊的拷貝,無法實現(xiàn)對目標(biāo)模塊的共享。但采用裝入時動態(tài)鏈接方式,OS則很容易將一個目標(biāo)模塊鏈接到幾個應(yīng)用模塊上,實現(xiàn)多個應(yīng)用程序?qū)υ撃K的共享。

    3.運(yùn)行時動態(tài)鏈接(Run-time Dynamic Linking)

    在許多情況下,應(yīng)用程序在運(yùn)行時,每次要運(yùn)行的模塊可能是不相同的。但由于事先無法知道本次要運(yùn)行哪些模塊,故只能是將所有可能要運(yùn)行到的模塊都全部裝入內(nèi)存,并在裝入時全部鏈接在一起。顯然這是低效的,因為往往會有些目標(biāo)模塊根本就不運(yùn)行。比較典型的例子是作為錯誤處理用的目標(biāo)模塊,如果程序在整個運(yùn)行過程中都不出現(xiàn)錯誤,則顯然就不會用到該模塊。 近幾年流行起來的運(yùn)行時動態(tài)鏈接方式,是對上述在裝入時鏈接方式的一種改進(jìn)。這種鏈接方式是將對某些模塊的鏈接推遲到程序執(zhí)行時才進(jìn)行鏈接,亦即,在執(zhí)行過程中,當(dāng)發(fā)現(xiàn)一個被調(diào)用模塊尚未裝入內(nèi)存時,立即由OS去找到該模塊并將之裝入內(nèi)存,把它鏈接到調(diào)用者模塊上。凡在執(zhí)行過程中未被用到的目標(biāo)模塊,都不會被調(diào)入內(nèi)存和被鏈接到裝入模塊上,這樣不僅可加快程序的裝入過程,而且可節(jié)省大量的內(nèi)存空間。

    三. 程序的裝入(地址的變換)

    為了闡述上的方便,我們先介紹一個無需進(jìn)行鏈接的單個目標(biāo)模塊的裝入過程。該目標(biāo)模塊也就是裝入模塊。在將一個裝入模塊裝入內(nèi)存時,可以有絕對裝入方式、可重定位裝入方式和動態(tài)運(yùn)行時裝入方式,下面分別簡述之。

    1.絕對裝入方式(Absolute Loading Mode)

    在編譯時,如果知道程序?qū)Ⅰv留在內(nèi)存的什么位置,那么,編譯程序?qū)a(chǎn)生絕對地址的目標(biāo)代碼。即按照物理內(nèi)存的位置賦予實際的物理地址。例如,事先已知用戶程序(進(jìn)程)駐留在從R處開始的位置,則編譯程序所產(chǎn)生的目標(biāo)模塊(即裝入模塊)便從R處開始向上擴(kuò)展。絕對裝入程序按照裝入模塊中的地址,將程序和數(shù)據(jù)裝入內(nèi)存。裝入模塊被裝入內(nèi)存后,由于程序中的邏輯地址與實際內(nèi)存地址完全相同,故不須對程序和數(shù)據(jù)的地址進(jìn)行修改。程序中所使用的絕對地址,既可在編譯或匯編時給出,也可由程序員直接賦予。

    這個方式的優(yōu)點(diǎn):是CPU執(zhí)行目標(biāo)代碼快。

    缺點(diǎn):1)是由于內(nèi)存大小限制,能裝入內(nèi)存并發(fā)執(zhí)行的進(jìn)程數(shù)大大減少

    2)編譯程序必須知道內(nèi)存的當(dāng)前空閑地址部分和其地址,并且把進(jìn)程的不同程序段連續(xù)地存放起來,編譯非常復(fù)雜。由于程序

    因此,通常是寧可在程序中采用符號地址,然后在編譯或匯編時,再將這些符號地址轉(zhuǎn)換為絕對地址。

    如何把虛擬內(nèi)存地址空間變換到內(nèi)存唯一的一維物理線性空間?涉及到兩個問題:

    • 一是虛擬空間的劃分問題。
    • 二是把虛擬空間中已經(jīng)鏈接和劃分好的內(nèi)容裝入內(nèi)存,并將虛擬空間地址映射內(nèi)存地址的問題。即地址映射。

    地址映射就是建立虛擬地址與內(nèi)存地址的關(guān)系。

    2.靜態(tài)地址重定位(可重定位裝入方式 Relocation Loading Mode)

    絕對裝入方式只能將目標(biāo)模塊裝入到內(nèi)存中事先指定的位置。在多道程序環(huán)境下,編譯程序不可能預(yù)知所編譯的目標(biāo)模塊應(yīng)放在內(nèi)存的何處,因此,絕對裝入方式只適用于單道程序環(huán)境。在多道程序環(huán)境下,所得到的目標(biāo)模塊的起始地址通常是從 0 開始的,程序中的其它地址也都是相對于起始地址計算的。此時應(yīng)采用可重定位裝入方式,根據(jù)內(nèi)存的當(dāng)前情況,將裝入模塊裝入到內(nèi)存的適當(dāng)位置。

    靜態(tài)地址重定位:即在程序裝入對目標(biāo)代碼裝入內(nèi)存的過程中完成,是指在程序開始運(yùn)行前,程序中指令和數(shù)據(jù)的各個地址均已完成重定位,即完成虛擬地址到內(nèi)存地址映射。地址變換通常是在裝入時一次完成的,以后不再改變。

    值得注意的是, 在采用可重定位裝入程序?qū)⒀b入模塊裝入內(nèi)存后, 會使裝入模塊中的所有邏輯地址與實際裝入內(nèi)存的物理地址不同,圖4-3示出了這一情況。

    圖4-3 作業(yè)裝入內(nèi)存時的情況

    例如,在用戶程序的 1000 號單元處有一條指令LOAD 1,2500,該指令的功能是將 2500 單元中的整數(shù) 365 取至寄存器 1。但若將該用戶程序裝入到內(nèi)存的 10000~15000號單元而不進(jìn)行地址變換, 則在執(zhí)行11000號單元中的指令時,它將仍從 2500 號單元中把數(shù)據(jù)取至寄存器1而導(dǎo)致數(shù)據(jù)錯誤。由圖4-3 可見,正確的方法應(yīng)該是將取數(shù)指令中的地址 2500 修改成 12500,即把指令中的相對地址 2500 與本程序在內(nèi)存中的起始地址 10000 相加,才得到正確的物理地址12500。除了數(shù)據(jù)地址應(yīng)修改外,指令地址也須做同樣的修改,即將指令的相對地址 1000 與起始地址 10000 相加,得到絕對地址 11000。

    優(yōu)點(diǎn):無需硬件支持

    缺點(diǎn):1)程序重定位之后就不能在內(nèi)存中搬動了;

    2)要求程序的存儲空間是連續(xù)的,不能把程序放在若干個不連續(xù)的區(qū)域中。

    3.動態(tài)地址重地位(動態(tài)運(yùn)行時裝入方式 Dynamic Run-time Loading)

    可重定位裝入方式可將裝入模塊裝入到內(nèi)存中任何允許的位置,故可用于多道程序環(huán)境;但這種方式并不允許程序運(yùn)行時在內(nèi)存中移動位置。因為,程序在內(nèi)存中的移動,意味著它的物理位置發(fā)生了變化, 這時必須對程序和數(shù)據(jù)的地址(是絕對地址)進(jìn)行修改后方能運(yùn)行。然而,實際情況是,在運(yùn)行過程中它在內(nèi)存中的位置可能經(jīng)常要改變,此時就應(yīng)采用動態(tài)運(yùn)行時裝入的方式。

    動態(tài)地址重定位:不是在程序執(zhí)行之前而是在程序執(zhí)行過程中進(jìn)行地址變換。更確切的說,是把這種地址轉(zhuǎn)換推遲到程序真正要執(zhí)行時才進(jìn)行,即在每次訪問內(nèi)存單元前才將要訪問的程序或數(shù)據(jù)地址變換成內(nèi)存地址。動態(tài)重定位可使裝配模塊不加任何修改而裝入內(nèi)存。為使地址轉(zhuǎn)換不影響指令的執(zhí)行速度,這種方式需要一個重定位寄存器的支持,

    優(yōu)點(diǎn):1)目標(biāo)模塊裝入內(nèi)存時無需任何修改,因而裝入之后再搬遷也不會影響其正確執(zhí)行,這對于存儲器緊縮、解決碎片問題是極其有利的;

    2)一個程序由若干個相對獨(dú)立的目標(biāo)模塊組成時,每個目標(biāo)模塊各裝入一個存儲區(qū)域,這些存儲區(qū)域可以不是順序相鄰的,只要各個模塊有自己對應(yīng)的定位寄存器就行。

    缺點(diǎn):需要硬件支持。

    四. Windows NT動態(tài)鏈接庫

    5.1. 構(gòu)造動態(tài)鏈接庫

    DLL是包含函數(shù)和數(shù)據(jù)的模塊,它的調(diào)用模塊可為EXE或DLL,它由調(diào)用模塊在運(yùn)行時加載;加載時,它被映射到調(diào)用進(jìn)程的地址空間。在VC中有一類工程用于創(chuàng)建DLL。

    • 庫程序文件 .C:相當(dāng)于給出一組函數(shù)定義的源代碼;
    • 模塊定義文件 .DEF:相當(dāng)于定義鏈接選項,也可在源代碼中定義;如:DLL中函數(shù)的引入和引出(dllimport和dllexport)。
    • 編譯程序利用 .C文件生成目標(biāo)模塊 .OBJ
    • 庫管理程序利用 .DEF文件生成DLL輸入庫 .LIB和輸出文件 .EXP
    • 鏈接程序利用 .OBJ和 .EXP文件生成動態(tài)鏈接庫 .DLL。

    5.2. DLL的裝入方法

    1)裝入時動態(tài)鏈接(load-time):

    在編程時顯式調(diào)用某個DLL函數(shù),該DLL函數(shù)在可執(zhí)行文件中稱為引入(import)函數(shù)。

    鏈接時需利用 .LIB文件。在可執(zhí)行文件中為引入的每個DLL建立一個IMAGE_IMPORT_DESCRIPTOR結(jié)構(gòu)。

    在裝入時由系統(tǒng)根據(jù)該DLL映射在進(jìn)程中的地址改寫Import Address Table中的各項函數(shù)指針。Hint是DLL函數(shù)在DLL文件中的序號,當(dāng)DLL文件修改后,就未必指向原先的DLL函數(shù)。在裝入時,系統(tǒng)會查找相應(yīng)DLL,并把它映射到進(jìn)程地址空間,獲得DLL中各函數(shù)的入口地址,定位本進(jìn)程中對這些函數(shù)的引用

    裝入時動態(tài)鏈接過程:

    (注:Import Address Table是在裝入時依據(jù)DLL模塊的加載位置確定)。

    DLL函數(shù)的調(diào)用過程:

    2)運(yùn)行時動態(tài)鏈接(run-time):

    在編程時通過LoadLibrary(給出DLL名稱,返回裝入和鏈接之后該DLL的句柄), FreeLibrary, GetProcAddress(其參數(shù)包括函數(shù)的符號名稱,返回該函數(shù)的入口指針)等API來使用DLL函數(shù)。這時不再需要引入庫(import library)。

    • LoadLibrary或LoadLibraryEx把可執(zhí)行模塊映射到調(diào)用進(jìn)程的地址空間,返回模塊句柄;
    • GetProcAddress獲得DLL中特定函數(shù)的指針,返回函數(shù)指針;
    • FreeLibrary把DLL模塊的引用計數(shù)減1;當(dāng)引用計數(shù)為0時,拆除DLL模塊到進(jìn)程地址空間的映射;

    運(yùn)行時動態(tài)鏈接的例子:

    HINSTANCE hInstLibrary;//模塊句柄定義
    DWORD (WINAPI *InstallStatusMIF)(char*, char*, char*, char*, char*, char*, char*, BOOL);//函數(shù)指針定義
    if (hInstLibrary=LoadLibrary("ismif32.dll"))//映射
    	 {
    	   InstallStatusMIF=(DWORD (WINAPI *)(char*,char*,char*, char*, char*, char*, char*, BOOL)) 
    GetProcAddress(hInstLibrary, "InstallStatusMIF");//獲得函數(shù)指針
    		if (InstallStatusMIF)
    		{
            if (InstallStatusMIF(“office97”, “Microsoft”, “Office 97”, “999.999”, “ENU”, 
    “1234”, ”Completed successfully”, TRUE) !=0)//調(diào)用DLL模塊中的函數(shù)
    			{
    			}
    		}
    		FreeLibrary(hInstLibrary);//拆除映射
    	 }

    領(lǐng)取大禮包后臺私信我【大禮包】,前100名額外贈送一份價值1699的內(nèi)核資料包(含視頻教程、電子書、實戰(zhàn)項目及代碼)


    是否曾經(jīng)參與過缺少重要質(zhì)量保證措施的軟件項目?您并不孤單。這種情況發(fā)生在數(shù)量驚人的公司和項目中。即使他們知道有 QA 并且我們應(yīng)該這樣做,但所有的努力通常都會導(dǎo)致在發(fā)布前進(jìn)行大規(guī)模 QA 沖刺。緊張的時刻只會讓軟件勉強(qiáng)工作。當(dāng)然,所有這些混亂都會在下一個發(fā)布周期中重復(fù)出現(xiàn)。沒有任何改進(jìn)。

    大學(xué)教你什么

    問題是,如果你學(xué)習(xí)計算機(jī)科學(xué),你就不會學(xué)習(xí)如何確保軟件的質(zhì)量標(biāo)準(zhǔn)。大部分時間都花在算法、計算機(jī)的工作原理、一些語言和概念的歷史等方面。此外,至少在我的學(xué)習(xí)中,有一個學(xué)期是關(guān)于項目管理方法和 Scrum 的。所有這些都很棒,但 QA 完全缺失。忽視 QA 是一種恥辱,因為 90% 以上的學(xué)生在完成學(xué)位后都在公司環(huán)境中工作。及時交付沒有錯誤的軟件是必要的。

    企業(yè)如何難以按時交貨

    我已經(jīng)無數(shù)次看到這種情況了。首先,由于預(yù)算原因,QA 標(biāo)準(zhǔn)和措施會被從項目中剔除。這通常是在項目結(jié)束時計劃的,但如果開發(fā)時間更長(通常如此)或出現(xiàn)范圍蔓延(總是會發(fā)生),就沒有足夠的時間進(jìn)行 QA。我們最終只能進(jìn)行最低限度的非結(jié)構(gòu)化測試,并交付一座墻壁脆弱的數(shù)字紙牌屋。

    在一些公司或團(tuán)隊中,存在特定的 QA 標(biāo)準(zhǔn)。通常由團(tuán)隊的高級成員向團(tuán)隊其他成員強(qiáng)制執(zhí)行這些標(biāo)準(zhǔn)。他們很可能從慘痛的經(jīng)歷中吸取了教訓(xùn),沒有 QA,一切都會變得更加困難。不幸的是,即使有標(biāo)準(zhǔn)也不夠。團(tuán)隊只是編寫測試來滿足項目管理指標(biāo),這種情況屢見不鮮。

    如何擺脫倉鼠輪

    我花了數(shù)年時間才積累了經(jīng)驗和信心,敢于直言項目中缺失的 QA 措施。與經(jīng)理爭論,度過發(fā)布的關(guān)鍵時刻,處理失敗的生產(chǎn)系統(tǒng),尋找缺失的監(jiān)控。這并不好玩。對于代碼庫或項目的其他改進(jìn),情況也類似,這些改進(jìn)對經(jīng)理來說并不直接可見,例如重構(gòu)。但對于 QA 來說,這總是特別困難,因為如果我們不實施任何措施,我們也永遠(yuǎn)不會學(xué)會如何正確地做到這一點(diǎn)。

    當(dāng)您的單元測試通過但集成測試沒有通過時。

    只有不斷發(fā)表意見并提出討論,才有助于找到走出倉鼠輪的第一步。

    談?wù)摻疱X

    在某個時候,我意識到我也沒有使用正確的論點(diǎn)。對于那些不參與代碼庫工作的人來說,解釋軟件將“更穩(wěn)定”或“使維護(hù)更容易”是難以理解的。我們需要談?wù)撳X。作為開發(fā)人員,我們需要談?wù)摬蛔?QA 的成本。這是商業(yè)和一般管理人員的語言。到目前為止,我總是試圖用這樣的例子來構(gòu)建 QA 措施:“如果我們現(xiàn)在不做,開發(fā)工作(以及成本)將在 4 個月內(nèi)增加 15%。”或“我們需要為所有功能實施單元測試,否則我們的發(fā)布穩(wěn)定階段每次都會花費(fèi)越來越長的時間。與我們構(gòu)建的所有功能直接相關(guān),因為我們每次都需要手動測試所有副作用。這將導(dǎo)致我們每次發(fā)布時取得的進(jìn)展更少。”

    根據(jù)我的經(jīng)驗,這種轉(zhuǎn)變有助于讓人們明白這一點(diǎn)。最終,你在這方面的努力將使每個人的生活變得更好。盡管不是每個人都知道這一點(diǎn)。

    最小有效劑量

    現(xiàn)實地說,重要的是不要在前期投入大量資金的情況下過度設(shè)計 QA 措施。我們不應(yīng)該阻礙整個項目的進(jìn)展,而且我們也不會通過這種方法獲得所有利益相關(guān)者的必要支持。我建議始終尋找應(yīng)用程序中最重要的部分。通常,整個應(yīng)用程序都是圍繞某個用例、功能或某些東西構(gòu)建的。一些核心功能必須正常工作,才能使軟件對客戶有價值。測試一下。想出措施和方法來確保它始終按預(yù)期工作。

    我喜歡“最小有效劑量”(MED)這個術(shù)語。產(chǎn)生預(yù)期結(jié)果的最小劑量。在 QA 中,這可以是手動測試計劃、管道中的自動測試或其他不同的東西。這是開始的正確地方。如果核心功能得到保證,您可以逐步擴(kuò)展穩(wěn)定性。即,對于所有新功能,您都添加單元測試。此外,考慮您無法控制的信息來源。比如外部 API 或用戶輸入。找到驗證它們的方法,因為這些是您的軟件可能因誤用而崩潰的更明顯的地方。迭代和增量。在 QA 上也是如此。

    我關(guān)注的事情

    對于我啟動或加入的每個新項目,我都會留意 QA 概念。無論它有多小,團(tuán)隊都應(yīng)該考慮它。

    • 我們要運(yùn)送什么?
    • 我們需要確保什么正在發(fā)揮作用?
    • 我們該怎么做呢?
    • 我們故意選擇不采取哪些措施以及為什么?

    有一份關(guān)于此問題的書面文件以及一份測試計劃,是軟件進(jìn)步的良好基礎(chǔ)。這表明我們作為一個團(tuán)隊思考了如何進(jìn)行。再次,從 MED 的角度思考。此外,我建議定期審查所選方法。即每季度一次。

    在編寫新代碼時,我不會使用 TDD,但我強(qiáng)烈建議在編寫軟件時編寫測試。編寫測試是最佳時機(jī)。如果在實現(xiàn)功能時編寫測試,那么您的代碼結(jié)構(gòu)將變得易于測試。為現(xiàn)有軟件編寫測試通常會發(fā)現(xiàn)給定的代碼過于相互依賴,或者違反了單一責(zé)任原則。通過測試,您可以描述自己理解了所需的行為,并確保一切都按預(yù)期運(yùn)行。如果您愿意,它甚至可以作為代碼文檔的一種形式。

    項目效益

    當(dāng)你暢所欲言時,你周圍的人會意識到你關(guān)心這個項目。提出有關(guān)質(zhì)量的討論并提出可能的解決方案甚至可以擴(kuò)大你作為開發(fā)人員的影響力。它既能讓你個人受益,也能讓項目受益。開發(fā)人員和經(jīng)理的生活質(zhì)量會提高。這肯定會被注意到。

    只有有了 QA 措施,項目才能健康地發(fā)展。

    改善項目

    您是否已經(jīng)在項目中使用 QA 措施,還是一切都非常脆弱?您是否想擴(kuò)展您的開發(fā)人員技能并成為以編寫高質(zhì)量軟件而聞名的人?

    從小事做起。考慮項目中的 MED。承擔(dān)責(zé)任,在團(tuán)隊中發(fā)聲,讓事情變得更好。不是每個人都需要成為 QA 大使,但你可以通過以身作則,向周圍的人傳授必要的方法。引發(fā)討論。

    去做就對了。



    作者:Florian Bellmann

    出處:https://www.florianbellmann.com/blog/never-taught-qa

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有