當前位置:首頁 » 編程軟體 » 工程編程率

工程編程率

發布時間: 2022-06-25 22:34:32

1. 軟體工程過於耗費時間並且妨礙開發人員的編程效率,你怎樣理解

7字班的吧 我是劉強 我記住你了

2. 測試工程師編程筆試題為什麼case通過率為0

軟體測試分為:功能測試、需求測試、性能測試、兼容性測試、穩定性測試等,這些類型的測試基本不需要有編程基礎。因為這些測試主要是從實現結果上去分析系統存在的問題,而不是過程。而對於分析代碼的白盒測試,以及開發測試工具才要求測試人員有較強的編程能力。其次,真正初、中級測試人員參與的都是第一類測試,也就是說與代碼實現過程的關系不是很緊密,他們所關注的主要是需求和流程方面。對於高級測試人員,才會涉及到具體的代碼,他們所關注的主要是測試工具的開發,以及對現有代碼進行單元測試等工作。再次,軟體測試工程師的未來職業發展至少兩條路線。一條是走技術加管理的路線,也就是說當你達到中級測試工程師的水平後,有了一定的行業背景及管理經驗,就可以從事管理類的工作,比如擔任測試經理的工作。這樣工作的重點就集中到項目管理及人員分配上,所以就更加弱化對編程的要求。另一條是走純技術路線,就是所謂的高級測試工程師,要求這類人有較強的編程能力,可以設計開發自動化測試工具。筆試測試工程師不需要編程的

3. 嵌入式C語言編程,約占所有招聘編程工程師的比例是多少

一般來說佔比30%左右,因為嵌入式編程,主要在於各種需要獨自計算機所帶的,因此相對其它的軟體開發或者各種開發來說,佔比較少。

4. 工程結算審減率一般為多少

這個要確定是一審的項目還是二審的項目,一般一審項目會有30%~20%左右的審核空間.二審的項目就很少了,因為一般一審項目合同會約定二審審減額的比率超過一定范圍,會追究一審審查不嚴格,規范的責任.
工程結算是指施工企業按照承包合同和已完工程量向建設單位(業主)辦理工程價清算的經濟文件。工程建設周期長,耗用資金數大,為使建築安裝企業在施工中耗用的資金及時得到補償,需要對工程價款進行中間結算(進度款結算)、年終結算,全部工程竣工驗收後應進行竣工結算。 在會計科目設置中,工程結算,為建造承包商專用的會計科目。 工程結算是工程項目承包中的一項十分重要的工作。全名為工程價款的結算,是指施工單位與建設單位之間根據雙方簽訂合同(含補充協議)進行的工程合同價款結算。工程結算又分為:工程定期結算、工程階段結算、工程年終結算、工程竣工結算。
工程結算是工程項目承包中的一項十分重要的工作,主要表現為以下幾方面:
(1)工程結算是反映工程進度的主要指標。在施工過程中,工程結算的依據之一就是按照已完的工程進行結算,根據累計已結算的工程價款占合同總價款的比例,能夠近似反映出工程的進度情況;
(2)工程結算是加速資金周轉的重要環節。施工單位盡快盡早地結算工程款,有利於償還債務,有利於資金回籠,降低內部運營成本。通過加速資金周轉,提高資金的使用效率;
(3)工程結算是考核經濟效益的重要指標。對於施工單位來說,只有工程款如數地結清,才意味著避免了經營風險,施工單位也才能夠獲得相應的利潤,進而達到良好的經濟效益。

5. 如何減少C++編寫程序的CPU使用率

優化是一個非常大的主題,本文並不是去深入探討性能分析理論,演算法的效率,況且我也沒有這個能力。我只是想把一些可以簡單的應用到你的C++代碼中的優化技術總結在這里,這樣,當你遇到幾種不同的編程策略的時候,就可以對每種策略的性能進行一個大概的估計。這也是本文的目的之所在。

一. 優化之前

在進行優化之前,我們首先應該做的是發現我們代碼的瓶頸(bottleneck)在哪裡。然而當你做這件事情的時候切忌從一個debug- version進行推斷,因為debug-version中包含了許多額外的代碼。一個debug-version可執行體要比release- version大出40%。那些額外的代碼都是用來支持調試的,比如說符號的查找。大多數實現都為debug-version和release- version提供了不同的operator new以及庫函數。而且,一個release-version的執行體可能已經通過多種途徑進行了優化,包括不必要的臨時對象的消除,循環展開,把對象移入寄存器,內聯等等。

另外,我們要把調試和優化區分開來,它們是在完成不同的任務。 debug-version 是用來追捕bugs以及檢查程序是否有邏輯上的問題。release-version則是用來做一些性能上的調整以及進行優化。

下面就讓我們來看看有哪些代碼優化技術吧:

二. 聲明的放置

程序中變數和對象的聲明放在什麼位置將會對性能產生顯著影響。同樣,對postfix和prefix運算符的選擇也會影響性能。這一部分我們集中討論四個問題:初始化v.s 賦值,在程序確實要使用的地方放置聲明,構造函數的初始化列表,prefix v.s postfix運算符。

(1)請使用初始化而不是賦值

在C語言中只允許在一個函數體的開頭進行變數的聲明,然而在C++中聲明可以出現在程序的任何位置。這樣做的目的是希望把對象的聲明拖延到確實要使用它的時候再進行。這樣做可以有兩個好處:1. 確保了對象在它被使用前不會被程序的其他部分惡意修改。如果對象在開頭就被聲明然而卻在20行以後才被使用的話,就不能做這樣的保證。2. 使我們有機會通過用初始化取代賦值來達到性能的提升,從前聲明只能放在開頭,然而往往開始的時候我們還沒有獲得我們想要的值,因此初始化所帶來的好處就無法被應用。但是現在我們可以在我們獲得了想要的值的時候直接進行初始化,從而省去了一步。注意,或許對於基本類型來說,初始化和賦值之間可能不會有什麼差異,但是對於用戶定義的類型來說,二者就會帶來顯著的不同,因為賦值會多進行一次函數調用----operator =。因此當我們在賦值和初始化之間進行選擇的話,初始化應該是我們的首選。

(2)把聲明放在合適的位置上

在一些場合,通過移動聲明到合適的位置所帶來的性能提升應該引起我們足夠的重視。例如:

bool is_C_Needed();
void use()
{
C c1;
if (is_C_Needed() == false)
{
return; //c1 was not needed
}
//use c1 here
return;
}

上面這段代碼中對象c1即使在有可能不使用它的情況下也會被創建,這樣我們就會為它付出不必要的花費,有可能你會說一個對象c1能浪費多少時間,但是如果是這種情況呢:C c1[1000];我想就不是說浪費就浪費了。但是我們可以通過移動聲明c1的位置來改變這種情況:

void use()
{
if (is_C_Needed() == false)
{
return; //c1 was not needed
}
C c1; //moved from the block's beginning
//use c1 here
return;
}

怎麼樣,程序的性能是不是已經得到很大的改善了呢?因此請仔細分析你的代碼,把聲明放在合適的位置上,它所帶來的好處是你難以想像的。

(3) 初始化列表

我們都知道,初始化列表一般是用來初始化const或者reference數據成員。但是由於他自身的性質,我們可以通過使用初始化列表來實現性能的提升。我們先來看一段程序:

class Person
{
private:
C c_1;
C c_2;
public:
Person(const C& c1, const C& c2 ): c_1(c1), c_2(c2) {}
};

當然構造函數我們也可以這樣寫:

Person::Person(const C& c1, const C& c2)
{
c_1 = c1;
c_2 = c2;
}

那麼究竟二者會帶來什麼樣的性能差異呢,要想搞清楚這個問題,我們首先要搞清楚二者是如何執行的,先來看初始化列表:數據成員的聲明操作都是在構造函數執行之前就完成了,在構造函數中往往完成的只是賦值操作,然而初始化列表直接是在數據成員聲明的時候就進行了初始化,因此它只執行了一次 constructor。再來看在構造函數中賦值的情況:首先,在構造函數執行前會通過default constructor創建數據成員,然後在構造函數中通過operator =進行賦值。因此它就比初始化列表多進行了一次函數調用。性能差異就出來了。但是請注意,如果你的數據成員都是基本類型的話,那麼為了程序的可讀性就不要使用初始化列表了,因為編譯器對兩者產生的匯編代碼是相同的。

(4)postfix VS prefix 運算符

prefix運算符++和—比它的postfix版本效率更高,因為當postfix運算符被使用的時候,會需要一個臨時對象來保存改變以前的值。對於基本類型,編譯器會消除這一份額外的拷貝,但是對於用戶定義類型,這似乎是不可能的。因此請你盡可能使用prefix運算符

三. 內聯函數

內聯函數既能夠去除函數調用所帶來的效率負擔又能夠保留一般函數的優點。然而,內聯函數並不是萬能葯,在一些情況下,它甚至能夠降低程序的性能。因此在使用的時候應該慎重。

1.我們先來看看內聯函數給我們帶來的好處:從一個用戶的角度來看,內聯函數看起來和普通函數一樣,它可以有參數和返回值,也可以有自己的作用域,然而它卻不會引入一般函數調用所帶來的負擔。另外,它可以比宏更安全更容易調試。

當然有一點應該意識到,inline specifier僅僅是對編譯器的建議,編譯器有權利忽略這個建議。那麼編譯器是如何決定函數內聯與否呢?一般情況下關鍵性因素包括函數體的大小,是否有局部對象被聲明,函數的復雜性等等。

2.那麼如果一個函數被聲明為inline但是卻沒有被內聯將會發生什麼呢?理論上,當編譯器拒絕內聯一個函數的時候,那個函數會像普通函數一樣被對待,但是還會出現一些其他的問題。例如下面這段代碼:

// filename Time.h
#include
#include
using namespace std;
class Time
{
public:
inline void Show() { for (int i = 0; i<10; i++) cout< };

因為成員函數Time::Show()包括一個局部變數和一個for循環,所以編譯器一般拒絕inline,並且把它當作一個普通的成員函數。但是這個包含類聲明的頭文件會被單獨的#include進各個獨立的編譯單元中:

// filename f1.cpp
#include "Time.hj"
void f1()
{
Time t1;
t1.Show();
}

// filename f2.cpp
#include "Time.h"
void f2()
{
Time t2;
t2.Show();
}
結果編譯器為這個程序生成了兩個相同成員函數的拷貝:

void f1();
void f2();
int main()
{
f1();
f2();
return 0;
}

當程序被鏈接的時候,linker將會面對兩個相同的Time::Show()拷貝,於是函數重定義的連接錯誤發生。但是老一些的C++實現對付這種情況的辦法是通過把一個un-inlined函數當作static來處理。因此每一份函數拷貝僅僅在自己的編譯單元中可見,這樣鏈接錯誤就解決了,但是在程序中卻會留下多份函數拷貝。在這種情況下,程序的性能不但沒有提升,反而增加了編譯和鏈接時間以及最終可執行體的大小。

但是幸運的是,新的C++標准中關於un-inlined函數的說法已經改變。一個符合標准C++實現應該只生成一份函數拷貝。然而,要想所有的編譯器都支持這一點可能還需要很長時間。

另外關於內聯函數還有兩個更令人頭疼的問題。第一個問題是該如何進行維護。一個函數開始的時候可能以內聯的形式出現,但是隨著系統的擴展,函數體可能要求添加額外的功能,結果內聯函數就變得不太可能,因此需要把inline specifier去除以及把函數體放到一個單獨的源文件中。另一個問題是當內聯函數被應用在代碼庫的時候產生。當內聯函數改變的時候,用戶必須重新編譯他們的代碼以反映這種改變。然而對於一個非內聯函數,用戶僅僅需要重新鏈接就可以了。

這里想要說的是,內聯函數並不是一個增強性能的靈丹妙葯。只有當函數非常短小的時候它才能得到我們想要的效果,但是如果函數並不是很短而且在很多地方都被調用的話,那麼將會使得可執行體的體積增大。最令人煩惱的還是當編譯器拒絕內聯的時候。在老的實現中,結果很不盡人意,雖然在新的實現中有很大的改善,但是仍然還是不那麼完善的。一些編譯器能夠足夠的聰明來指出哪些函數可以內聯哪些不能,但是,大多數編譯器就不那麼聰明了,因此這就需要我們的經驗來判斷。如果內聯函數不能增強行能,就避免使用它.

6. 土木工程要學編程嗎

土木工程要學編程嗎
土木工程一般要學編程的。
編程(biān chéng)是編定程序的中文簡稱,就是讓計算機代為解決某個問題,對某個計算體系規定一定的運算方式,使計算體系按照該計算方式運行,並最終得到相應結果的過程。

為了使計算機能夠理解(understand)人的意圖,人類就必須將需解決的問題的思路、方法和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。這種人和計算體系之間交流的過程就是編程。

編程:設計具備邏輯流動作用的一種"可控體系"【注:編程不一定是針對計算機程序而言的,針對具備邏輯計算力的體系,都可以算編程。】

編程語言
機器語言
在計算機系統中,一條機器指令規定了計算機系統的一個特定動作。一個系列的計算機在硬體設計製造時就用了若干指令規定了該系列計算機能夠進行的基本操作,這些指令一起構成了該系列計算機的指令系統。在計算機應用的初期,程序員使用機器的指令系統來編寫計算機應用程序,這種程序稱為機器語言程序。使用機器語言編寫的程序,由於每條指令都對應計算機一個特定的基本動作,所以程序佔用內存少、執行效率高。缺點也很明顯,如:編程工作量大,容易出錯;依賴具體的計算機體系,因而程序的通用性、移植性都很差。

匯編語言
為了解決使用機器語言編寫應用程序所帶來的一系列問題,人們首先想到使用助記符號來代替不容易記憶的機器指令。這種助記符號來表示計算機指令的語言稱為符號語言,也稱匯編語言。在匯編語言中,每一條用符號來表示的匯編指令與計算機機器指令一一對應;記憶難度大大減少了,不僅易於檢查和修改程序錯誤,而且指令、數據的存放位置可以由計算機自動分配。用匯編語言編寫的程序稱為源程序,計算機不能直接識別和處理源程序,必須通過某種方法將它翻譯成為計算機能夠理解並執行的機器語言,執行這個翻譯工作的程序稱為匯編程序。

匯編程序
匯編程序。使用匯編語言編寫計算機程序,程序員仍然需要十分熟悉計算機系統的硬體結構,所以從程序設計本身上來看仍然是低效率的、繁瑣的。但正是由於匯編語言與計算機硬體系統關系密切,在某些特定的場合,如對時空效率要求很高的系統核心程序以及實時控製程序等,迄今為止匯編語言仍然是十分有效的程序設計工具。

但它有不可替代的特性,比如一些單片機或者一些直接控制硬體的程序就一定要用匯編語言

高級語言
高級語言是一類接近於人類的自然語言和數學語言的程序設計語言的統稱。按照其程序設計的出發點和方式不同,高級語言分為了面向過程的語言和面向對象的語言,如Fortran語言、C語言、漢語程序設計語言等都是面向過程的語言;而以C++、Smalltalk等為代表的面向對象的語言與面向過程語言有著許多不同,這些語言支持"程序是相互聯系的離散對象集合",這樣一種新的程序設計思維方式,具有封裝性、繼承性和多態性等特徵。

高級語言按照一定的語法規則,由表達各種意義的運算對象和運算方法構成。使用高級語言編寫程序的優點是:編程相對簡單、直觀、易理解、不容易出錯;高級語言是獨立於計算機的,因而用高級語言編寫的計算機程序通用性好,具有較好的移植性。用高級語言編寫的程序稱為源程序,計算機系統不能直接理解和執行,必須通過一個語言處理系統將其轉換為計算機系統能夠認識、理解的目標程序才能被計算機系統執行。

執行原理
計算機對除機器語言以外的源程序不能直接識別、理解和執行,都必須通過某種方式轉換為計算機能夠直接執行的。

這種將高級程序設計語言編寫的源程序轉換到機器目標程序的方式有兩種:解釋方式和編譯方式。

解釋方式下,計算機對高級語言書寫的源程序一邊解釋一邊執行,不能形成目標文件和執行文件。

編譯方式下,首先通過一個對應於所用程序設計語言的編譯程序對源程序進行處理,經過對源程序的詞法分析、語法分析、語意分析、代碼生成和代碼優化等階段將所處理的源程序轉換為用二進制代碼表示的目標程序,然後通過連接程序處理將程序中所用的函數調用、系統功能調用等嵌入到目標程序中,構成一個可以連續執行的二進制執行文件。調用這個執行文件就可以實現程序員在對應源程序文件中所指定的相應功能。

7. 工程上的編程與科學上的編程有什麼區別

前者是應用性質的,比如開發一個理財軟體之類的;

後者是科研性質的,做深入研究的

8. 從軟體工程觀點來說,用什麼編寫程序,軟體開發效率最高

用你最熟悉的語言,和你最熟悉的工具,還有你的大腦。

9. 有人認為"軟體工程過於耗費時間,並且妨礙開發人員的編程效率」,你是否認同這種觀點請闡述理由。

這一觀點是不正確的,首先他混淆了一個概念,軟體工程並不僅僅包括程序開發,還包括很多比如需求分析、資料庫設計、項目綜合管理等,而程序開發只是軟體工程的一個子過程,工作重復,交流不暢、用戶反復修改需求都是造成開發降低的原因。
其次,.雖然直接編程在開發前期看來效率高,但是不完整的,不清晰的或錯誤的需求和設計將導 致在開發後期反復地修改程序,反而降低了整個開發效率,其質量也無法保證,甚至導致軟體開發最 終失敗的結果. 軟體工程是幫助人們在有限的時間,金錢預算和人力,物力資源的約束下開發出質量盡量高的軟體的 一系列理論和工具,雖然它在編程之外的工作上花費了大量時間,但所耗費的時間與精力並不像其表 面上所看起來的那樣冗餘與低效,而是從總體上做好整個體系的設計與把握,全方位地規劃開發過程, 對節省成本,提高效率,保證最終產品質量起到了事半功倍的作用.

10. 如何提升PLC的編程效率

1:根據工程實際需求,進行功能塊規劃,編寫子程序
在PLC中,子程序是為一些特定的控制目的編制的相對獨立的程序。執行子程序調用指令CALL等,如果條件不滿足子程序調用時,程序的掃描就僅在主程序中進行,不再去掃描這段子程序,這樣就減少了不必要的掃描時間。
2:用字或雙字數據傳送給DO點方法來控制輸出
在PLC的應用中通常都會有大量的輸出控制,用字或雙字數據傳送給DO點方法來控制輸出可以提高速度,只要根據實際應用的要求,合理分配輸出地址,變換控制輸出控制字,可以大大減少西門子plc程序執行的步數,從而加快PLC的程序運行速度。
3:脈沖觸發SET、RESET
PLC中,使用SET指令只執行一次即可,不必每次掃描都執行這個指令,很適合與脈沖輸出(PLS/PLF)指令配合使用。有些工程人員忽視了這個問題,使用了常規的方法來驅動SET指令,無意中增加了PLC程序掃描運行時間
4:避免了類型轉換,方法如下:
以S7-200為例,它的內存格式與我們常用的PC機正好相反,它是高字在前,低字在後的。所以我們可以將字變數放在後兩個位元組,在程序初始化時將前兩個位元組清零(程序的其它地方不得使用這兩個位元組)。
如我們定義符號時將字變數定義在VW2,同時保持VW0的值為零。則程序中可以用VW2以字型訪問該變數,同時也可以VD0以雙字型訪問,避免了類型轉換。為了避免使用時混淆,最好以明確的符號定義來區分字類型和雙字類型。在此強烈推薦類匈牙利命名法:以前綴指示變數類型,用首字母大寫的有意義的英文單詞的組合作變數名。
本人習慣用以下綴:b----位元組型變數(byte)w----字型變數(word)d----雙字變數(double)r----實型變數(real)f----位變數(flag)btn---自復位按鈕式輸入(button)sw----切換開關或自鎖按鈕輸入(switch)sig---感測器、編碼等電平信號輸入(signal)rly---輸出繼電器位(relay)……
當然,這個根據個人習慣來,沒有定則,主要是利於自己區分。
假如有一個字類型變數名為VarName,為使用前面的轉換技巧,我們可以這樣定義:wVarName----VW2dVarName----VD0在程序初始化時將VW0清零(如果是不需要記憶的變數,直接將dVarName清零也可)或者在數據塊中將VW0設置為零。則以後需要以字類型訪問變數時就用wVarName,需要以雙字類型訪問變數時就用dVarName。完全不需要類型轉換。
本方法可以極大的減少程序語句數,使程序更簡潔、可讀性更好,由於不需要做耗時的類型轉換,程序運行效率也得到提高。且數學運算量越大,效率提高越明顯。
缺點是要多佔用兩位元組的內存,以後程序中不能使用VW0。但S7-200的RAM空間很大,一般是用不完的,以226為例,有多達10K的RAM,偶從來沒有超過1K。這些RAM都是花錢買來的,不用白不用,不用也是浪費了。
同理,如果有位元組型變數經常需要與字類型變數相互轉換,讓位元組變數佔用一個字的內存寬度浪費一個位元組,避免類型轉換。

熱點內容
高級語言都要編譯解析型語言 發布:2025-02-13 15:06:32 瀏覽:304
openwrt源碼下載 發布:2025-02-13 15:01:59 瀏覽:644
linux刪除一個目錄 發布:2025-02-13 15:00:29 瀏覽:539
螞蟻存儲 發布:2025-02-13 15:00:25 瀏覽:918
腳本師傳奇 發布:2025-02-13 14:45:48 瀏覽:481
我的世界lce伺服器剪輯 發布:2025-02-13 14:40:50 瀏覽:625
phpsftp上傳 發布:2025-02-13 14:35:43 瀏覽:274
c學生管理系統資料庫 發布:2025-02-13 14:21:41 瀏覽:123
傳奇添加會員腳本 發布:2025-02-13 14:20:50 瀏覽:206
微信開發平台源碼 發布:2025-02-13 14:14:20 瀏覽:614