目錄
1.專業名詞定義
1.1計算機軟件的定義
1.2軟件系統的定義
1.3軟件工程的定義
2.軟件的失敗與成功
2.1?失敗
2.2?成功
3.軟件開發?Professional software development
3.1?分類
3.2?專業軟件開發?professional software development
3.3專業軟件開發產品特性
3.4開發的軟件產品類型
3.4.1本質區別
3.5.軟件開發所面臨的挑戰 ??
3.5.1軟件退化?Software Deterioration
3.6軟件開發風險?Software development risk
4..軟件工程?Software Engineering
4.1軟件工程方法?Software Engineering Approaches
4.2軟件工程基本原理?Software engineering fundamentals
4.3影響大多數軟件的一般問題?General issues that affect most software?
4.4軟件工程的重要性
4.5?基于網絡的軟件工程?Web-BASED software engineering
4.6?軟件工程倫理?Software Engineering Ethics
?4.7軟件工程vs計算機科學?Software Engineering vs Computer Science
5.專業工程師認證:
1.專業名詞定義
1.1計算機軟件的定義
-?計算機軟件是用于運行機器和執行特定活動的指令、數據或計算機程序的集合。軟件產品可能是為特定客戶開發的,也可能是為一般市場開發的。Computer Software?is a collection of instructions, data, or computer programs that are used to run machines and carry out particular activities. Software products may be developed for a particular customer or may be developed for a general market.
1.2軟件系統的定義
-?軟件系統是由多個獨立的計算機軟件、配置文件、系統文件和用戶文檔組成的系統。(維基百科,軟件系統)?A software system is a system that consists of a number of separate?computer software, configuration files, system documentation and user documentation. (“Wikipedia, Software system”)
-?軟件系統是抽象的、無形的。Software systems are abstract and intangible.
????????·它們不受材料特性的限制,不受物理定律或制造工藝的制約。They are not constrained by the properties of materials, governed by physical laws, or?by manufacturing processes.?
? ? ? ? ·優缺點?
????????????>這簡化了軟件工程,因為軟件的潛力沒有自然限制。This simplifies software engineering, as there are no natural limits to the potential of?software.?
????????????????>由于缺乏物理限制,軟件系統很快就會變得極其復雜、難以理解,而且更改成本高昂。However, because of the lack of physical constraints, software systems can quickly?become extremely complex, difficult to understand, and expensive to change.
-?開發軟件系統時的活動(部分)
????????·測試軟件Test the software:確保軟件按預期工作,發現并修復缺陷。
????????·編寫程序?Test the software:開發實際的代碼,以實現系統的功能。
????????·估計完成程序所需的時間Estimate the time needed to complete the program:開發和管理項目計劃,以預測所需資源和時間。
????????·編寫用戶文檔Write a user documentation:為用戶提供操作軟件所需的指導和說明。
-?軟件系統?“一詞應與?”計算機軟件?"一詞區分開來。計算機軟件?"一般是指執行特定任務的一組指令。然而,軟件系統通常指的是一個包含更多組件的概念。The term "software system" should be distinguished from the terms “computer software". The term computer software generally refers to a set of instructions that perform a specific task. However, a software system generally refers to a more encompassing concept with many more components.?
-?軟件系統一詞的使用有時與軟件工程中系統理論方法的應用有關The use of the term software system is at times related to the application of system theory approaches in the context of software engineering
1.3軟件工程的定義
-?軟件工程是一門工程學科,涉及軟件生產的方方面面。Software engineering is an engineering discipline that is concerned with all aspects of software production.?
????????·工程學科?-?工程師使事物運轉。他們在適當的地方應用理論、方法和工具。不過,他們會有選擇性地使用這些理論、方法和工具,即使在沒有適用理論和方法的情況下,他們也會努力探索解決問題的方法。工程師還認識到,他們的工作必須受到組織和資金的限制,因此他們要在這些限制范圍內尋找解決方案。Engineering discipline - Engineers make things work. They apply theories, methods, and tools where these are appropriate. However, they use them selectively and always try to discover solutions to problems even when there are no applicable theories and methods. Engineers also recognize that they must work to organizational and financial constraints so they look for solutions within these constraints.
????????·軟件生產的方方面面--軟件工程不僅涉及軟件開發的技術過程。它還包括軟件項目管理和開發支持軟件生產的工具、方法和理論等活動。All aspects of software production - Software engineering is not just concerned with the technical processes of software development. It also includes activities such as software project management and the development of tools, methods, and theories to support software production.
-?作為一名軟件工程師,在開發軟件系統時要應用軟件開發流程。As a software engineer, you apply software development process when developing a software system
2.軟件的失敗與成功
2.1?失敗
-?軟件工程被批評為不適合現代軟件開發。Software engineering is criticized as inadequate for modern?software development.
-?軟件失敗有兩個原因:?
????????·需求不斷增加?Increasing demands
????????·期望值過低(你不會期望軟件成長為一頭巨獸)Low expectations (you don’t expect the software to grow into a giant beast)
2.2?成功
-?我們在開發復雜軟件方面仍然存在問題,但是,如果沒有軟件工程,我們就不會探索太空,就不會有互聯網或現代電信。we still have problems developing complex software?but, without software engineering, we would not have explored space, would not have the Internet or modern telecommunications.
-?軟件工程已經做出了巨大貢獻,它在?21?世紀的貢獻將更大。Software engineering has contributed a great deal and its contributions in the 21st century will be even greater.
3.軟件開發?Professional software development
3.1?分類
-?業余愛好者?Amateur?
????????·商務人士編寫電子表格程序以簡化工作?People in business write spreadsheet programs to simplify their jobs?
????????·科學家和工程師編寫處理實驗數據的程序?scientists and engineers write programs to process their experimental data
????????·業余愛好者為自己的興趣和樂趣編寫程序?hobbyists write programs for their own interest and enjoyment
-?專業人員?Professional?
????????·為特定商業目的而開發,用于其他設備,或作為軟件產品?developed for specific business purposes, for inclusion in other devices, or as software products
????????·供開發者以外的人使用?intended for use by someone apart from its developer
????????·通常由團隊而非個人開發??is usually developed by teams rather than individuals
???????·在其整個生命周期內都要進行維護和更改。It is maintained and changed throughout its life.
3.2?專業軟件開發?professional software development
-?軟件工程旨在支持專業軟件開發,而不是個人編程。Software engineering is intended to support professional software development, rather than individual programming.
-?它包括支持程序規范、設計、驗證和演進的技術。It includes techniques that support program specification, design, validation, and evolution.?
-?專業軟件通常具有以下特性:?-?
????????·嚴格的用戶要求?Strict user requirements
????????·所需的準確性和數據完整性?Required accuracy and data integrity
????????·更高的安全標準?Higher security standard
????????·重負荷時性能穩定?Stable performance for heavy load
????????·所需的技術支持等?Required technical support, etc.
3.3專業軟件開發產品特性
-?可維護性?Maintainability
????????·軟件的編寫方式應使其能夠不斷發展,以滿足客戶不斷變化的需求.這是一個關鍵屬性,因為軟件的變化是不斷變化的業務環境的必然要求。Software should be written in such a way so that it can evolve to meet the changing needs of customers. This is a critical attribute because software change is an inevitable requirement of a changing business environment.
-?可靠性和安全性?Dependability and security
????????·軟件的可靠性包括可靠性、安全性和安全性等一系列特征。可靠的軟件不應在系統發生故障時造成物理或經濟損失。惡意用戶應無法訪問或破壞系統。Software dependability includes a range of characteristics including reliability,?security, and safety. Dependable software should not cause physical or?economic damage in the event of system failure. Malicious users should not be?able to access or damage the system.
-?效率?Efficiency
????????·軟件不應浪費系統資源,如內存和處理器周期。因此,效率包括響應速度、處理時間、內存利用率等。Software should not make wasteful use of system resources such as memory?and processor cycles. Efficiency therefore includes responsiveness,?processing time, memory utilization, etc.
-?可接受性Acceptability
????????·軟件必須能為用戶所接受.這意味著軟件必須易懂、可用,并與用戶使用的其他系統兼容Software must be acceptable to the type of users for which it is designed. This?means that it must be understandable, usable, and compatible with other?systems that they use.
-?另外四個有時可能重要的屬性:?
????????·正確性Correctness、
????????·可重用性reusability、
????????·可移植性portability、
????????·可用性usability、
????????·互操作性interoperability
3.4開發的軟件產品類型
-?通用軟件產品?Generic software products
????????·這些系統由開發機構生產,在公開市場上出售給任何有能力購買的客戶。These are systems that are produced by a development organization and sold on the open market to any customer who is able to buy them.?
-?定制軟件產品?Customized software products
????????·這是由特定客戶委托開發的系統。軟件承包商專門為該客戶開發軟件。These are systems that are commissioned by a particular customer. A software contractor develops the software especially for that customer.
3.4.1本質區別
-?在通用軟件產品開發中,規格由產品開發者擁有。而在定制產品開發中,規格由客戶擁有和控制。這種區別的影響非常顯著——開發者可以快速決定對規格進行更改以應對某些外部變化(例如,競爭產品),但當客戶擁有規格時,更改必須在客戶和開發者之間進行協商,且可能涉及合同方面的影響
-?對于通用產品的用戶,這意味著他們無法控制軟件規格,因此無法控制產品的演變。開發者可能會決定包含/排除功能并更改用戶界面。這可能對用戶的業務流程產生影響,并在系統安裝新版本時增加額外的培訓成本。此外,這也可能限制客戶更改自身業務流程的靈活性。
3.5.軟件開發所面臨的挑戰 ??
-?開發時間長?Long development time
????????·大多數軟件都有一些用戶需求,每個需求都需要仔細研究和理解。對于某些軟件工程方法,文檔編寫可能會耗費大量精力。需求變更會延長開發進度。一項變更可能會影響軟件的許多其他部分
-?成本高 ?High cost
????????·軟件開發需要大量具有技能和經驗的人員。他們受過高等教育,是昂貴的勞動力。軟件開發不僅需要仔細研究用戶需求,還需要設計解決方案并將設計實現為軟件。實現之后,還需要對生成的軟件進行測試。可以看出,軟件開發是一個漫長的過程,耗費了大量昂貴的人力。
-?無法在交付前發現所有錯誤?
????????·軟件評估技術無法發現所有潛在錯誤。有些錯誤僅在輸入某些特定數據或特定情況下發生,而這些情況可能僅在生產環境中出現。此外,由于生產環境的變化而導致的軟件錯誤無法在開發環境中模擬(例如,硬件變化)
-?需要花費高成本與精力維護現有程序?
????????·如果現有系統已經使用了一段時間,替換為另一個系統會很困難(高風險且昂貴)。如果存在錯誤或新的需求,更可行的選擇是維護和升級現有系統
-?無法衡量軟件開發和維護過程的進度?
????????·與土木工程不同,軟件工程構建的是無形的軟件。很難衡量仍在開發中的虛擬產品的進度。與建造摩天大樓不同,當你說已經建成20層時,其他人可以計算并驗證確實有20層。在軟件開發中,有時無法驗證完成一半的軟件,因為未完成的軟件無法執行。即使有半成品軟件,它也可能包含嚴重的錯誤,修復這些錯誤所需的時間未知。
3.5.1軟件退化?Software Deterioration
-?軟件是一種邏輯元素,而非物理系統元素。因此,軟件有一個基本特征使其與硬件大不相同: 軟件不會 “磨損”。Software is a logical rather than a?physical system element. Therefore, software has one fundamental characteristic that makes it considerably different from hardware:?Software doesn’t?“wear out.”
-?因此,從理論上講,軟件的故障率曲線應該是如圖所示的 “理想化曲線”。In theory, therefore, the failure rate curve for software should take the form of the “idealized curve” shown in Figure
-?軟件不會磨損。但它確實會退化?Software doesn’t wear out. But it does deteriorate
-?軟件在其生命周期內會發生變化。在進行更改時,很可能會引入錯誤,從而導致故障率曲線出現 “實際曲線”圖所示的峰值。During its life, software will undergo change. As changes are made, it is likely that errors will be introduced, causing the failure rate curve to spike as shown in the “actual curve” .
-?在曲線恢復到原來的穩態故障率之前,又會要求進行另一次更改,導致曲線再次出現尖峰。Before the curve can return to the original steady-state failure rate, another change is requested, causing the curve to spike again.
-?解決方法
????????·減少軟件更改?To reduce software changes:
????????????????>與利益相關者密切合作,確保正確定義需求????Work closely with the stakeholder to ensure requirements are correctly?defined?
????????????????>改進需求研究方法,實現更好的需求研究 Improve requirement study approach to achieve better requirements study
????????·減少變更后的副作用?To reduce side effects after changes?
????????????????>軟件應是模塊化的,這樣變更不會對軟件的其他部分產生很多副作用?The software should be modular so that changes will not have a lot of side effects to other part of the software
????????????????>軟件必須具有可維護性?The software must be maintainable
????????????????>應進行全面測試以減少錯誤 Comprehensive testing should put in place to reduce errors
-?預防此問題的軟件構建方法
????????·軟件應是模塊化的,這樣更改不會對軟件的其他部分產生較多的副作用。
????????·軟件必須具備可維護性。
????????·應進行全面的測試以減少錯誤。
????????·與利益相關者密切合作,以確保需求被正確定義。
????????·改進需求研究方法,以實現更好的需求分析
3.6軟件開發風險?Software development risk
-?許多軟件開發項目都會遇到困難?Many software development projects run into difficulties
????????·無法按預期運行?Does not work as expected
????????·超出預算?Over budget
????????·延遲交付?Late delivery
-?軟件中的大部分功能被浪費?Much of the functionalities in the software is wasted
????????·需求錯誤?Wrong requirement
????????·用戶不喜歡?User dislike it
????????·沒有客戶?There are no customer
-?許多軟件項目之所以失敗,是因為軟件開發人員構建了錯誤的軟件。軟件開發團隊必須
Many software projects fail because the software developers build the wrong software. The software development team must
????????·充分理解需求?Fully understand requirement
????????·驗證需求?Validate requirement
-?開發人員通常會提出技術見解和建議,但請記住,客戶滿意度是衡量軟件項目成功與否的首要標準。The developer will often add technical insights and suggestions, but remember the client satisfaction is the primary measurement of success in software project.
4..軟件工程?Software Engineering
-?軟件工程是一種生產軟件的系統方法,它考慮到實際成本、進度和可靠性問題,以及軟件客戶和生產商的需求。Software engineering is a systematic approach to the production?of software that takes into account practical cost, schedule, and dependability issues, as well as the needs of software customers and producers.?
-?這種系統化方法的實際實施方式因以下因素而有很大不同
????????·開發軟件的組織?The organization developing the software
????????·軟件的類型?The type of software
????????·參與開發過程的人員。The people involved in the development process.
-?要確定哪些軟件工程方法和技術最重要,最重要的因素可能是開發的應用程序類型。Perhaps the most significant factor in determining which software?engineering methods and techniques are most important is the type of application that is being developed.?
????????·獨立應用程序?Stand-alone applications
????????·基于事務的交互式應用程序?Interactive transaction-based applications????????
????????·嵌入式控制系統?Embedded control systems
????????·批處理系統?Batch processing systems
????????·娛樂系統??Entertainment systems
????????·建模和模擬系統?Systems for modeling and simulation
????????·數據收集系統?Data collection systems
4.1軟件工程方法?Software Engineering Approaches
-?軟件工程中使用的系統方法有時被稱為軟件過程/流程。The systematic approach that is used in software engineering is?sometimes called a software process
-?軟件過程是生產軟件產品的一系列活動。A software process is a sequence of activities that leads to the production of a software product.
-?有四種基本活動是所有軟件過程所共有的: ??There are four fundamental activities that are common to all software processes:
????????·軟件規格?Software specification
????????·軟件開發?Software development
????????·軟件驗證?Software validation
????????·軟件演進?Software evolution
-?不同類型的系統需要不同的開發流程。?Different types of systems need different development processes.
-?例如,飛機的嵌入式控制系統必須在開發開始前制定完整的規范。在電子商務系統中,規范和程序通常是一起開發的。For example, embedded control system in an aircraft has to be completely specified before development begins. In e-commerce systems, the specification and the program are usually developed together.?
4.2軟件工程基本原理?Software engineering fundamentals
-?無論使用何種開發技術,一些基本原則都適用于所有類型的軟件系統:?Some fundamental principles apply to all types of software system, irrespective of the development techniques used:
????????·系統的開發應采用管理有序、易于理解的開發流程。Systems should be developed using a managed and understood development process.
????????·可靠性和性能對所有類型的系統都很重要。Dependability and performance are important for all types of system
????????·理解和管理軟件規格和要求(軟件應該做什么)非常重要。Understanding and managing the software specification and requirements (what the software should do) are important.
????????·在適當的情況下,應重復使用已開發的軟件,而不是編寫新的軟件。Where appropriate, you should reuse software that has already been developed rather than write new software.?
4.3影響大多數軟件的一般問題?General issues that affect most software?
-?異構性?Heterogeneity
????????·?越來越多的系統需要作為分布式系統跨網絡運行,其中包括不同類型的計算機和移動設備。Increasingly, systems are required to operate as distributed systems across networks that include different types of computer and mobile devices.
-?商業和社會變革?Business and social change
????????·隨著新興經濟體的發展和新技術的出現,商業和社會正在發生令人難以置信的快速變化。他們需要能夠改變現有軟件并快速開發新軟件。Business and society are changing incredibly quickly as emerging economies develop and new technologies become available. They need to be able to change their existing software and to rapidly develop new software.
-?安全與信任 ?Security and trust
????????·軟件與我們生活的方方面面息息相關,因此我們必須信任軟件。As software is intertwined with all aspects of our lives, it is essential that we can trust that software.
4.4軟件工程的重要性
-?個人和社會越來越依賴于先進的軟件系統。我們需要能夠經濟、快速地生產出可靠、值得信賴的系統。More and more, individuals and society rely on advanced software systems. We need to be able to produce reliable and trustworthy systems economically and quickly.
-?從長遠來看,在軟件系統中使用軟件工程方法和技術,而不是像個人編程項目那樣編寫程序,通常會更省錢。對于大多數類型的系統來說,大部分成本是軟件投入使用后的修改成本。It is usually cheaper, in the long run, to use software engineering methods andtechniques for software systems rather than just write the programs as if it was a personal programming project. For most types of systems, the majority of costs are the costs of changing the software after it has gone into use.
4.5?基于網絡的軟件工程?Web-BASED software engineering
-?軟件工程與網絡?Software engineering and the web
????????·網絡現已成為運行應用程序的平臺,越來越多的組織機構開始開發基于網絡的系統,而不是本地系統。The Web is now a platform for running application and?organizations are increasingly developing web-based systems rather than local systems.
????????·網絡服務允許通過網絡訪問應用程序功能。Web services allow application functionality to be accessed over the web.
????????·云計算是一種提供計算機服務的方法,應用程序可在 “云 ”上遠程運行。Cloud computing is an approach to the provision of computer services where?applications run remotely on the ‘cloud’.
????????·用戶不購買軟件,而是根據使用情況付費。Users do not buy software buy pay according to use.?
-?基于網絡的軟件工程?Web-BASED software engineering
????????·軟件重用是構建網絡系統的主流方法。Software reuse is the dominant approach for constructing web-?based systems.?
????????????????>在構建這些系統時,你需要考慮如何將已有的軟件組件和系統組裝起來。When building these systems, you think about how you can assemble them from pre-existing software components and systems.?
????????·網絡系統應逐步開發和交付。Web-based systems should be developed and delivered incrementally
????????????????>現在人們普遍認為,事先明確此類系統的所有要求是不切實際的。It is now generally recognized that it is impractical to specify all the requirements for such systems in advance
????????·用戶界面受到網絡瀏覽器功能的限制。User interfaces are constrained by the capabilities of web browsers.
????????????????>?AJAX?等技術允許在網絡瀏覽器中創建豐富的界面,但仍然難以使用。使用本地腳本的網絡表單更為常見Technologies such as AJAX allow rich interfaces to be created within a web browser but are still difficult to use. Web forms with local scripting are more commonly?
Web-based software engineering?
????????·基于網絡的系統是復雜的分布式系統,但前面討論過的軟件工程基本原則與其他類型的系統一樣適用于這些系統。Web-based systems are complex distributed systems but the?fundamental principles of software engineering discussed previously are as applicable to them as they are to any other types of system.?
4.6?軟件工程倫理?Software Engineering Ethics
-?與其他工程學科一樣,軟件工程也是在社會和法律框架內進行的,該框架限制了在該領域工作的人員的自由。Like other engineering disciplines, software engineering is carried?out within a social?and legal framework that limits the freedom of people working in that area.
-?作為一名軟件工程師,你必須承認,你的工作不僅僅是應用技術技能,還涉及更廣泛的責任。As a software engineer, you must accept that your job involves wider responsibilities?than simply the application of technical skills.
-?這里所說的道德,是指任何對他人的生活和價值觀產生消極或積極影響的有意行為。Ethics, as understood here, addresses any intentional action that?impacts negatively or positively the lives and values of others
-?技術決策中涉及的道德活動應基于對這些決策的影響的理解。The ethical activity involved in technical decisions should be based on an understanding of the impact of those decisions.?
-?軟件工程師對其產品的用戶負有義務,這些產品不僅包括已實施的系統,還包括其他產品,如需求、軟件項目管理計劃、規范、設計、文檔、測試套件、程序、用戶手冊和培訓材料。(軟件工程倫理》,2002?年,唐納德-戈特巴恩)Software engineers have obligations to the users of their products, which include not only the implemented system but also includes other products such as requirements, software project management plans, specifications, designs, documentation, test suites, programs, user manuals, and training materials. (Software Engineering Ethics, 2002, Donald Gotterbarn)
-?如果你想成為一名受人尊重的專業工程師,你還必須以符合倫理道德的方式行事。You must also behave in an ethical and morally responsible way if you are to be respected as a professional engineer.?
-?你不應該利用自己的技能和能力做出不誠實的行為,也不應該做出有損軟件工程專業聲譽的行為。You should not use your skills and abilities to behave in a dishonest way or in a way that will bring disrepute to the software engineering profession.
-?在某些領域,可接受的行為標準不受法律約束,但卻受更脆弱的職業責任概念的約束。其中包括?There are areas where standards of acceptable behavior are not bound by laws but by the more tenuous notion of professional responsibility. Some of these are:
????????·保密?Confidentiality?
????????·能力?Competence?
????????·知識產權?Intellectual property rights
????????·計算機濫用?Computer misuse
?4.7軟件工程vs計算機科學?Software Engineering vs Computer Science
-?軟件工程?Software Engineering
????????·關注開發和交付專業軟件系統的實際問題?Concerned with the practicalities of developing and delivery professional software system
-?計算機科學?Computer Science
????????·側重于理論和基礎知識 Focuses on the theory and fundamentals
5.專業工程師認證:
-?工程師認證的優勢:
????????·認證使該領域更具競爭力,因為他們已經按照標準和法律培訓,認證的來源可以確保軟件-?工程師是值得信賴的。
????????·有了某種形式的認證,公眾對工程職業的看法會更好。
????????·認證向潛在雇主表明了最低的能力水平,這使得他們可以輕松篩選出符合最低要求的工程師。
-?需要注意的是,認證并不能保證能力,但可以保證在認證時達到了最低標準。