目录
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.专业工程师认证:
- 工程师认证的优势:
·认证使该领域更具竞争力,因为他们已经按照标准和法律培训,认证的来源可以确保软件- 工程师是值得信赖的。
·有了某种形式的认证,公众对工程职业的看法会更好。
·认证向潜在雇主表明了最低的能力水平,这使得他们可以轻松筛选出符合最低要求的工程师。
- 需要注意的是,认证并不能保证能力,但可以保证在认证时达到了最低标准。