① 論軟體項目的質量管理
一、基於對軟體質量管理的認識與分析
我認為,影響軟體質量的因素有很多,通常有:人的因素、軟體需求、質量問題可能出現在開發過程的各個環節上、測試的局限性、質量管理的困難、質量管理未能給予足夠的重視、軟體人員的傳統習慣、開發規范、開發工具的支持不夠等。對於象石化加油卡工程的核心軟體之類的大型軟體,涉及平台多,開發環境多,開發人員龐大,在全國尚無大規模的同行業省級應用模式可以參考。因此,我認為軟體要能夠恰合需求是最為首要的質量因素;其次,對於龐大的開發人員,對他們培養和樹立軟體質量意識,按軟體工程標准規范開發流程,因此,質量管理和開發過程式控制制也十分重要;再次,該核心軟體龐大、復雜、功能多、子系統多、介面多,我認為,要在軟體開發生命周期內重視軟體測試也至為關鍵。
目前,在業界影響較深的McCALL質量模型、ISO軟體質量評價模型以飢攜局及SSC軟體質量度量模型,都比較共同地列舉了軟體的質量特性,如正確性、可靠性、完整性、優化與效率、可維護性、可測試性、容錯性、文檔完備性、復用性、健壯性等等,要想使提交的軟體在各項指標方面具有較高的性能和度量指標,在軟體開發過程中,須採用切實可行和有針對性的措施方可達到要求。以下結合我工作中針對提高石化加油卡核心軟體質量談談具體的管理策略、思維和做法。
二、具體實施的管理策略及做法
1、質量管理策略的展開與實施
首先,我向公司的決策層強調了軟體質量的重要性,並提交了具體的實施辦法。從組織上,我公司成立了軟體質理管理領導小組,下設辦公室,有2名專職質量管理人員,我作為辦公室主任。最主要開展了公司的集成資質認證和ISO9001軟體開發質量認證的取證工作,並最終獲得成功,同時開展了全體開發人員的軟體質量意識教育,對開發人員進行了系統的軟體工程軟體工程開發規范和相關標准教育。這些工作都是全員行動,涉及到的每個部門、每個開發小組以及個人,都要按照質量管理規范要求開展各自的工作,這也是開發工作的基礎准備工作。
2、高素質軟體人才戰略
我始終認識到軟體行業中人才的重要性以及人才在軟體質量的重要作用,通過各種渠道,我們招聘了大量高素質人員,但要使其發揮工作積極性,激發其工作熱情和責任感,通過我的努力和建議,人事部門制定了比較公平、公正、有效率的薪金激勵體系,例如建立了將開發人員分為系統分析員、高級程序員、程序員等五檔次十個級差的工資體系,人員可達月薪25000元/月,最底為2600元/月,同時給予人員以晉升和發展的空間,由於軟體開發行業的特殊性,我們還十分重視人員素質提高與技術學習和交流,積極提倡和鼓勵人員參與中軟考和各類認證考試以及職稱評審,這樣在公司內形成了十分良好的積極進取向上的科研與學習氣氛。
3、系統分析方法與模型選擇、開發平台的選擇以及中間件開發平台的引入
對於石油銷售行業,需求並不經常變動,只是各地的需求和銷售策略有所不用,我認為宜採用傳統的結構化分析方法為主,結合面向對象的分析方法,在需求分析前期,以結構化分析方法,摸清系統的原有業務流程以及數據流,在設計階段,在充分理解需求規格說明書的基礎上,應採用面向對象的分析與設計方法,這樣方可提高軟體的可靠性、復用性、可維護性等,也就提高了軟體的質量。在開發平台的選擇上,由於加油卡清費數據量巨大,首先是基本大型關系資料庫的應用,我們選擇了SYBASE,開發工具採用了DELPHI6、cylix分別用於WINDOWS平台和LINUX平台的開發,由於整個系統是採用集中式基於網路的應用,充值發卡為聯機交易而加油站加油卡數據是在油站產生通過撥號上傳的。為了保證操作事務的完整性,解決異構和跨平台的困難爛讓,採用了現今流行的中間件(BEA TUXEDO)開發技術,利用交易中間件實現聯機交易,利用通訊中間件解決加油站數據上傳,通過隱謹中間件中的兩階段提交技術,合理地利用了網路帶寬,不至於與聯機交易相沖突,也保證了網路不易擁塞而使數據不能上傳。
另外,我們還採用了各類CASE工具,用於軟體的建模、文檔管理、版本管理、方案演示等。
4、收集需求的多種做法
在軟體從分析到編碼設計以及測試的全過程,我們反復採用了"請進來、走下去"的做法,即分析和開發人員一定要親臨業務現場,切身體會其中的業務操作,我們甚至要求與他們與業務人員打成一片,我們稱之為走下去,目的就是為了更准確地把握需求。在開發時系統有了初步的軟體原型後,我們又將各地石油分公司的專業人員、業務人員請過來,請他們談談對新原型的看法和意見,並按照他們的意見再次對開發工作進行修正,我們稱之?quot;請進來",目的是使確保軟體提交後能盡快地獲得用戶方滿意。這個過程,是循環反復,螺旋演進的,通過這個過程,我們的軟體逐步達到了功能豐富、操作簡便易用、運行效率高、速度快的高質量要求。據我們不完全統計,我們採用的"請進來,走下去"的做法涉及到數百個人次,參與分析與開發的人員不但結交了很多朋友,而且也切身體會到這種做法對保證軟體質量的重要之處。
5、基於"應用微內核"模塊的可擴展開發模式和思維的全面貫徹
雖然系統龐大,我們認為軟體中最為基礎的是加油IC卡的核心支付模塊,是整個系統核心的核心,我稱之為大系統的"應用微內核",是其他系統的數據源,其他模塊如清算結運算元系統、油站零售管理與數據分析子系統,都是基於其上的擴展開發。因此,我要求,在核心級應用內核採用最為嚴格的軟體工程開發規范,並在其中留有足夠的資料庫的表中的數據元(欄位),以便應付多需求情況以及將來需求的可變性,這樣,可使應用內微具有較大的靈活性。例如,加油站累計消費優惠,在各市公司採用不用的優惠措施,有的是累計積分獎勵禮品,有的是累計現金,各地分公司由於經營上的需要,還執行了不同的油品價格政策,利用應用內核中的擴展欄位很方便即可解決這個各地不同需求問題。應用微內核的採用還為其他系統提供了清晰的介面,例如,石化系統目前是正在作ERP軟體的試點,該軟體作為ERP底層數據源,十分方便地溶入了ERP系統中。微內核還提高了系統的運行效率,微內核代碼經過了系統中最為嚴格的測試,有的模塊和代碼段一般都經歷了四版以上才定稿,有的甚至在經歷了十次以上的版本。我們還在開發前開展了較為有趣的編程優化大賽,誰的程序效率高、演算法優、速度快,就選其中的人員參與到微內核開發組,並在薪水和獎金給予這些人員適當的上浮。
6、加強測試
為了提高軟體質量,我們還十分重視軟體的測試工作,成立了專業的測試小組,用於測試開發的軟體和廠商提交的加油機卡機聯動樣機、消費POS、充值POS等,由於為全行業工程,中國石化統一了加油IC卡卡規范、重新修訂了加油機通訊協議,這些都需要進行測試,方可准予廠商進場作業,為此開發部門還編制了相關的測試軟體,通過測試後,方可發證與廠商。對核心軟體,除了我們內部進行單元測試和集成測試和初步系統α測試外,我們還委託中國計算機軟體測評中心這樣的專業測評機構進行最終確認測試。在試用版投入試點過程中,我們還與各地石油分司共同建立了測試維護制度與維護操作辦法,落實了具體人員,收集了大量測試數據,全面地進行了β版測試,此舉也從運行現場發現了很多開發環境下所沒有發現的問題,對提高軟體質量起到了重要的作用。
三、完成的效果與評價
加強軟體質量管理的做法還有很多,對其中的一些細節本文也不再討論。如上所述,其做法基本上源於我參與多年的軟體開發項目和項目管理的經驗所得,當然在這個項目中我們也有所創新,如"應用微內核"的開發思想和思維的實施。這些做法從總體上保證了軟體的高質量。當然,質量管理的內容與做法也要與時俱進。
但由於自己不是公司的決策層,僅負責軟體技術方面的工作,對部分骨幹人員的出走以及因項目各方利益的關系,從而影響了軟體的開發和進度也無能為力。從這個項目來看,軟體的開發仍然是整個工程推進的瓶頸,其開發進度與提交對整體加油卡工程進度影響很大,傳統的軟體開發問題在這個項目中也依然遇到。近些年來,軟體行業的CMM認證較為流行,可使公司軟體過程能力成熟度得到較大提高,我想這也是將來在軟體質量方面的努力之處。總之,對於軟體項目開發,人的作用和質量管理的作用都十分的重要,我也期待著在將來能不斷提高自已的技術與管理水平,也能夠希望更多的專業人員投入到軟體質量管理的研究中來,為提高我國軟體產業的軟體質量而奮斗。
② 現在的軟體開發崗位分哪幾類,它們之間又有什麼區別和聯系
現在市場上的軟體開發主要分為前端開發工程師、後端開發工程師、測試開發工程師、數據分析工程師、演算法工程師、運維工程師。當然還有一些嵌入式和網路安全相關的崗位等等。想問下這些崗位之間有什麼區別和聯系?
單純從開發上講,大致分為了前端開發,後端開發
這里包含了UI設計(單獨拿出來分類也可以,畢竟摳圖,調樣式,改效果也是很費勁的)
這里分為了 後端開發 和 資料庫開發 (這里的資料庫開發指的旦彎絕是專業人員,進行資料庫設計,存儲過程,函數,腳本,資料庫優化和問題解決)
演算法工程師: 在我看來這是低級程序員進擊高級程序員甚至是架構師的必經之路,尤其是在面向業務流程的演算法設計上,能大大減少代碼量和提高軟體執行效率
數據分析工程師: 建數據分析體系,數據分析工具化,產品化,基本都是做大數據的,需要精通大資料庫的操作和可以進行數據分析語言,比如Python(實現方式,各個語言都可以,只是那種更簡單的問題,勿噴)
嵌入式工程師: 開發一些與硬體關系最密切的最底層軟體,技能需要軟硬體結合,不僅僅需要軟體基礎,也需要一定的硬體基礎
然後下面就要說的是 測試工程師 ,和 運維工程師 了
簡述一下就是: 對軟體質量負責,進行各種測試,確保工程交付的准確,確保軟體流程安全,編寫測試用例,編寫性能,自動化測試等
簡述就是: 負責伺服器的配置,維護,監控,調優,故障排除以及部署方案的制定及實施,哦,還包括資料庫管理員(DBA)職能
中小型公司基本都沒有的崗位 - -
負責預防網頁篡改、計算機病毒、系統非法入侵、數據泄密、網站欺騙、服務癱瘓、漏模姿洞非法利用鬧談等信息安全事件
③ 軟體工程 程序員保證代碼質量的手段的先後順序是怎樣的
保證代碼質量的順序如下:
1)代碼風格
在項目開發之初,往往會制定一個代碼編寫的規范,實際上,這個代碼規范就包含了整個項目組的代碼風格。由於軟體開發人員的設計習慣不同,如果不統一代碼風格,一個項目中的代碼將五花八門,如變數和常量的命名、介面與實現類的注釋、何時回車、怎樣縮進等等。一個五花八門的設計風格,必將為日後的維護與改進帶來困難。
通過代碼復查,一方面督促開發人員按照規范編寫代碼,另一方面也使開發人員自身形成良好的編程習慣。代碼風格的審查,由於內容比較單一,常常可以通過一些代碼復查的工具來自動完成,提高復查的效率。
2)重大缺陷
在一些關於代碼復查的文章中,列出了一個常常的單子,描述了代碼復查應當著重注意的重大缺陷,它們包括:存在SQL注入、易受跨站點腳本攻擊、緩存區溢出、託管代碼等等。項目組可以不斷積累重大缺陷的審查項目,並在每次審查中逐一檢查。重大缺陷審查是一個繁瑣而細致的工作,如果能編寫或使用一些審查軟體,可以大大提高審查效率。
3)設計邏輯與思路的審查
審查是代碼復查中最核心、最有價值的部分。代碼風格與重大缺陷的審查,雖然重要但簡單而機械,可以通過軟體自動檢查;而設計邏輯與思路的審查,卻是復雜而有深度的審查,需要有一定理論深度和編碼經驗的人才能完成,而且對新手尤其重要。前面提到,新手是任何項目組不可避免的問題。
通過代碼復查,讓老手去指導新手,讓團隊整體素質得到提高。具體辦法就是,在新手完成編碼以後,讓老手去進行代碼復查,指出新手的問題,指導新手設計。這樣的過程最初可能需要重構,甚至重新編碼。但經過這樣的過程,新手將逐漸熟練,迅速成為老手,使整體團隊素質提高。
④ 對於程序員,提高軟體開發的質量和效率該從那些方面努力
1.提高代碼的規范性。編碼規范 可以提高代碼的可讀性,並且在代碼修改的時候很容易。
2.對功能進行分類,並拆分。分析出幾種處理邏輯。編寫代碼時,部分代碼可以。可以提編碼速度。
3.對功能進行分類,並合並。提出共通類。
4.不同的package對應不同的功能。
簡單的說,每天寫幾百行代碼。堅持半年或者1年,就知道什麼方式是適合你的了。 不寫代碼,光想,十年也還是那個水平。每個人的邏輯思維是不一樣的,寫代碼的方式也是不一樣的。有時間問,還不如多寫寫。或者,自己模擬現實個場景(或公司管理制度之類的),然後實現。寫幾個,很自然的就知道自己該怎麼寫了。
⑤ 提高軟體質量的決定性因素
決定軟體可維護性的因素,主要有以下幾個方面:
1.系統代碼的質量。例如:軟體的架構、代碼的框架及程序員代碼的規范問題。代碼中結構是否合理,變數命名是否規范,代碼中注釋是否詳細,這些都會影響到系統的維護成本。
2.系統文檔是否完善。例如:概要設計文檔、詳細設計文檔、數據字典、介面文檔等。文檔的有無及詳細程度,這些都直接影響到軟體的維護成本。
3.團隊人員的穩定性。如果團隊的人員流動比較大,新人接手項目,中間有個熟悉原有系統代碼的成本,同時編碼風格的差異,也會造成系統維護成本的變化。於整個飼料加工生產線來說,要想在成品庫中得到混合均勻度達到標准要求的配合飼料,除了必須要配備一台結構和技術參數符合工藝要求,能在較短的時間內獲得滿意的混合均勻度的混合機外,前後工序的合理安排及混合機本身的合理使用均是決定性的因素。
1、物料的充滿系數
不論哪種類型的混合機,適宜的裝料狀況,是混合機能正常工作,並且得到預期的混合效山備搭果的前提條件。在分批逗拿混合機中,卧式螺帶混合機的充滿系數在0.6~0.8較為適宜,料位最高不能超過轉子頂部平面;分批立式混合機的充滿系數,一般控制在0.8~0.85;單軸或雙軸槳葉高效混合機充滿系數為0.8~1。物料容重>0.6時,按每批混合量計算;物料容重≤0.6時,可按容重范圍。
他們說你高冷,卻沒發現只不過是思想的不同
廣告
2、物料的混合時間
對於連續式混合機不存在這個問題,但對於分批式混合機,確定好混合時間對於混合物料的質量是非常重要的。混合時間過短,物料在混合機中沒有得到充分混合便被卸出,產品的混合質量肯定會受到影響;混合時間過長,物料在混合機中被長時間混合,不但造成能耗增加、產量下降,並且會因為過度混合,造成組分的分離積聚,使混合均勻度反而降低。決定軟體可維護性的因素有:
1)可理解性2)可測試性3)可修滾簡改性4)可移植性5)可重用性
應該採取哪些措施:
1)提高可理解性:模塊化·詳細的設計文檔·結構化設計·程序內部的文檔和良好的高級程序設計語言
2)提高可測試性:良好的文檔對於診斷和測試是至關重要的,此外,軟體結構·可用的測試工具和調試工具,以及以前設計的測試過程也都是非常重要的
3)提高可修改性;模塊結構良好,高內聚,低耦合。信息隱藏·局部化·控制域與作用域的關系等也影響軟體的可修改性
4)提高可移植性:把因環境變化而必須修改的程序局限在少數程序模塊中,從而降低修改難度
⑥ 程序和軟體的關系是
軟體—程序—演算法之間的關系與區別
首先,要明白 軟體 = 程序+
文檔 = 數據結構+演算法+文檔(如右
圖所示)
另外,軟體是包含程序的有機
集合體,程序是軟體的必要元素。
任何軟體都有可運行的程序,至少
一個。比如:操作系統給的工具軟
件計算器等,很多都只有一個可運
行程序。而Office是一個辦公軟體
包,卻包含了很多可運行程序...... 嚴格來說程序指用編程語言編制的完成特定功能的軟體.程序從屬於軟體.軟體除包含程序外,一般把各種資料文檔等也包括在內。 軟體是程序以及開發、使用和維護所需要的所有文檔的總稱,而程序是軟體的一部分。 演算法就是程序的靈魂,一個需要實現特定功能的程序,實現它的演算法可以有很多種,所以演算法的優劣決定著程序的好壞。程序員很熟練的掌握了程序設計語言的語法,進行程序設計,軟體開發的時候就是設計好的演算法,加上軟體工程的 理論才能做出較好的系統。
軟體是包含程序的有機集合體,程序是軟體的必要元素。任何軟體都有可運行的程序,至少一個。比如:操作系統給的工具軟體,很多都只有一個可運行程序。而Office是一個辦公軟體包,卻包含了很多可運行程序
軟體是程序以及開發、使用和維護所需要的所有文檔的總稱,而程序是軟體的一部分。 一般一款軟體具有起自身的各種各樣的功能,而程序一般執行專一的命令。軟體一般都是由很多程序組成的,每條程序在其中做著比較固定的工作。軟體就好比是工程,程序就好比是工人
程序是通過計算機語言寫出來的具有許多演算法的摸板,是實現軟體功能的底層推手(推手的意思可以理解為動力)。所以,程序是軟體的內在因子,而軟體是一個或多個程序通過編譯器編譯出來的成品。
打個比方,軟體是一件衣服,那程序就是材料。軟體是由許多能實現某些固定任務的程序的集合
也就是說,軟體是由許許多多的程序組合而成的。程序是由編程人員通過某種編程語言,編寫出來能實現某些固定任務的代碼。
可這么說,編程人員能過 通過C語言或其他某種語言,編寫出一些能實現任務某些固定任務的函數,再把這些函數集合起來,通過編譯程序編成軟體,也就是我們通常在電腦上用的各種軟體了。
⑦ 程序員,軟體工程師,系統分析員與開發者有什麼聯系嗎
程序員(英文Programmer)是從事程序開發、維護的專業人員。一般將程序員分為程序設計人員和程序編碼人員,但兩者的界限並不非常清楚,特別是在中國。軟體從業人員分為初級程序員、中級程序員、高級程序員、系統分析員,系統架構師,測試工程師六大類
軟體工程師英文是Software Engineer,是從事軟體職業的人員的一種職業能力的認證,通過它說明具備了工程師的資格。軟體工程師是從事軟體開發相關工作的人員的統稱。
它是一個廣義的概念,包括軟體設計人員、軟體架構人員、軟體工程管理人員、程序員等一系列崗位,工作內容都與軟體開發生產相關。軟體工程師的技術要求是比較全面的,除了最基礎的編程語言(C語言/C++/JAVA等)、資料庫技術(SQL/ORACLE/DB2等)等,還有諸多如JAVASCRIPT、AJAX、HIBERNATE、SPRING等前沿技術。此外,關於網路工程和軟體測試的其他技術也要有所涉獵。
系統分析員(system analyst)是 對大型、復雜的信息系統建設任務中,承擔分析、設計和領導實施的領軍人物。 要做好與客戶之間的關系,同時對客戶的需求要正確的理解,要選擇合適的開發技術,同時做好與客戶間溝通交流,學會說服對方。
開發者這個定義就比較廣泛了,字面上上意思是創建者
⑧ 軟體工程師和程序員到底有多大的區別
程序員主要是指寫代碼的人。
工程師著重在於設計。
程序員和軟體工程師的區別是:軟體工程師不但要有編寫程序代碼的能力而且更重要的是要懂得如何去開發一個軟體,怎樣去學習實際的UI的觀念。
就是工廠裡面技術員和工程師的區別。技術員是熟練工人,工程師是設計者。
⑨ 軟體工程師和程序員的區別
軟體工程師是從事軟體開發相關工作的人員的統稱。它是一個廣義的概念,包括軟體設計人員、軟體架構人員、軟體工程管理人員、程序員等一系列崗位。這些崗位的分工不同,職位和/或級別不同,但工作內容都是與軟體開發生產相關的。軟體工程師是IT行業需求量最大的職位,穩居IT行業職位需求TOP10的第一位(第二位是高級軟體工程師)。
軟體工程師的技術要求是比較全面的,除了最基礎的編程語言(C語言/C++/JAVA等)、資料庫技術(SQL/ORACLE/DB2等)、.NET平台技術、C#、C/S
B/S程序開發,還有諸多如JAVA
SCRIPT、AJAX、HIBERNATE、SPRING、J2EE、WEB
SERVICE、STRUCTS等前沿技術。除此之外,關於網路工程和軟體測試的其他技術也要有所涉獵,以利於操控全局。
軟體工程師可謂是軟體項目開發的掌舵者。一名優秀的軟體工程師應當具有較強的邏輯思維能力,對於技術的發展有敏銳的嗅覺。雖然要求技術全面,但無須偏執於門門技術都精通,任何軟體工程師都有自己的技術特長和偏向,對於自己手中的技術,可有精通-掌握-熟悉-了解之分,根據工作需要和職業發展的具體情況來劃分。 程序員(英文Programmer)是從事程序開發、維護的專業人員。一般我們將程序員分為程序設計人員和程序編碼員,但兩者的界限並不非常清楚,特別是在中國。
知道了嗎?小林凡