Something about Software Engineering

软件工程

定义 Definition

Software engineering is “(1) the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, that is, the application of engineering to software,” and “(2) the study of approaches as in (1).” –– IEEE Standard 610.12
软件工程就是 “(1)一种用于软件的开发,操作和维护的,系统性的,符合一定规范的,可度量的方法,即,工程学在软件上的应用,” 以及“(2)对于(1)中所描述的方法的研究”——IEEE(电气电子工程师学会) 标准 610.12

软件危机 Software Crisis

Software crisis is a term used in the early days of computing science for the difficulty of writing useful and efficient computer programs in the required time. The software crisis was due to the rapid increases in computer power and the complexity of the problems that could not be tackled. With the increase in the complexity of the software, many software problems arose because existing methods were insufficient.
这个是wiki上面对软件危机的描述,软件危机产生的本质上的原因,其实是计算机领域迅速发展导致的必然结果,对于每一个软件而言,无论是多么先进的设计,(甚至这种设计在不久就会被淘汰),都会遭受到新的思想,新的技术理论的冲击,而对于一个庞大的软件来说,重构是一件非常费时并且困难的任务,并且重构完成之后我们还需要花费大量的时间去做testing,这会导致在这段真空期内,企业必然会受到巨大的冲击,而对于中小型企业来说是不堪设想的,我们能做到的就是尽量往前看,并且在软件的设计上,使得它具有很强的可扩展性,并且尽量做到模块之间解耦,使得在重构的时候有很多可以重用的代码,以缓冲软件危机带来的冲击。

软件生命周期

In software engineering, a software development process is the process of dividing software development work into distinct phases to improve design, product management, and project management. It is also known as a software development life cycle.
在软件工程中,一个软件的开发过程,指的就是将一个软件的开发工作切分成不同的阶段,实现设计,产品管理和项目管理的优化。也被称为软件生命周期。常见有瀑布模型、螺旋模型、敏捷的模型等。

软件工程知识体系 SWEBoK(Software Engineering Body of Knowledge)

15个知识领域

Knowledge Areas Characterizing the Practice of Software Engineering 描述软件工程实践的知识领域

  • Software Requirements 软件需求
    The Software Requirements KA is concerned with the elicitation, negotiation, analysis, specification, and validation of software requirements. It is widely acknowledged within the software industry that software engineering projects are critically vulnerable when these activities are performed poorly. Software requirements express the needs and constraints placed on a software product that contribute to the solution of some real-world problems.
    软件需求知识领域它所关注的是软件需求的启发,协商,分析,说明制定,以及验证。一般在软件行业中广泛认为当这些活动没有得到有效的开展的时候,软件工程项目将会是非常脆弱的。软件需求阐释了一个软件产品一些基于一系列现实问题的需要和约束。

  • Software Design 软件设计
    Design is defined as both the process of defining the architecture, components, interfaces, and other characteristics of a system or component and the result of [that] process (IEEE 1991). The Software Design KA covers the design process and the resulting product. The software design process is the software engineering life cycle activity in which software requirements are analyzed in order to produce a description of the software’s internal structure and its behavior that will serve as the basis for its construction. A software design (the result) must describe the software architecture – that is, how software is decomposed and organized into components and the interfaces between those components. It must also describes the components at a level of detail that enables their construction.
    软件设计由对系统或者是模块的架构,组建,接口以及其他特性的定义的过程和这个过程的结果这两部分来定义的。软件工程设计知识领域包括了过程的设计和最终产品。软件设计过程是软件工程生命周期活动,在这个过程中,通过分析软件需求,得出一个对于软件的内部结构和软件的行为的描述,用于作为软件构建的基础。软件设计(结果)必须能够描述软件的结构,即,软件是如何分解,组织成一系列模块以及这些模块之间的接口。此外,软件设计还必须在更多有助于这些模块构建的细节的层面上对他们进行描述。

  • Software Construction 软件构建
    Software construction refers to the detailed creation of working software through a combination of detailed design, coding, unit testing, integration testing, debugging, and verification. The Software Construction KA includes topics related to the development of software programs that will satisfy their requirements and design constraints. This KA covers software construction fundamentals; managing software construction; construction technologies; practical considerations; and software construction tools.
    软件构件涉及到覆盖详细设计,代码编写,单元测试,整合测试,错误排除以及验证的一系列组合。软件构件知识领域包括和满足他们的需求和设计约束的软件编程的开发相关的课题。这个知识领域涵盖了软件构件的基础,软件构件管理,构建技术,实际考虑以及软件构建工具。

  • Software Testing 软件测试
    Testing is an activity performed to evaluate product quality and to improve it by identifying defects. Software testing involves dynamic verification of the behavior of a program against expected behavior on a finite set of test cases. These test cases are selected from the (usually very large) execution domain. The Software Testing KA includes the fundamentals of software testing; testing techniques; human-computer user interface testing and evaluation; test-related measures; and practical considerations.
    测试是对产品质量进行评估并通过识别缺陷来改进产品质量的活动。软件测试涉及到在一组有限的测试用例上根据预期行为动态地验证程序的行为。这些测试用例是从(通常非常大的)执行域中选择的。软件测试知识领域包括软件测试的基础知识;测试技术;人机界面测试与评价;任何跟考试有关的措施;和实际的考虑。

  • Software Maintenance 软件维护
    Software maintenance involves enhancing existing capabilities, adapting software to operate in new and modified operating environments, and correcting defects. These categories are referred to as perfective, adaptive, and corrective software maintenance. The Software Maintenance KA includes fundamentals of software maintenance (nature of and need for maintenance, categories of maintenance, maintenance costs); key issues in software maintenance (technical issues, management issues, maintenance cost estimation, measurement of software maintenance); the maintenance process; software maintenance techniques (program comprehension, re-engineering, reverse engineering, refactoring, software retirement); disaster recovery techniques, and software maintenance tools.
    软件维护包括增强现有的功能,使软件适应新的和修改的操作环境,以及纠正缺陷。这些类别被称为完善的、自适应的和纠正的软件维护。软件维修KA包括软件维修的基本知识(维修的性质和需要、维修的类别、维修费用);软件维护中的关键问题(技术问题、管理问题、维护成本估算、软件维护度量);维护过程;软件维护技术(程序理解、再工程、逆向工程、重构、软件退役);灾难恢复技术和软件维护工具。

  • Software Configuration Management 软件布署管理
    The configuration of a system is the functional and/or physical characteristics of hardware, firmware, software, or a combination of these. It can also be considered as a collection of specific versions of hardware, firmware, or software items combined according to specific build procedures to serve a particular purpose. Software configuration management (SCM) is thus the discipline of identifying the configuration of a system at distinct points in time for the purposes of systematically controlling changes to the configuration, as well as maintaining the integrity and traceability of the configuration throughout the software life cycle. The Software Configuration Management KA covers management of the SCM process; software configuration identification, control, status accounting, auditing; software release management and delivery; and software configuration management tools.
    系统的配置是硬件、固件、软件或它们的组合的功能和/或物理特征。它还可以看作是硬件、固件或软件项目的特定版本的集合,这些版本根据特定的构建过程组合在一起,以服务于特定的目的。因此,软件配置管理(SCM)是在不同的时间点识别系统配置的规程,以便系统地控制配置的更改,并在整个软件生命周期中维护配置的完整性和可追溯性。软件配置管理KA包括单片机过程的管理;软件配置识别、控制、状态核算、审计;软件发布管理和交付;以及软件配置管理工具。

  • Software Engineering Management 软件工程管理
    Software engineering management involves planning, coordinating, measuring, reporting, and controlling a project or program to ensure that development and maintenance of the software is systematic, disciplined, and quantified. The Software Engineering Management KA covers initiation and scope definition (determining and negotiating requirements, feasibility analysis, and review and revision of requirements); software project planning (process planning, estimation of effort, cost, and schedule, resource allocation, risk analysis, planning for quality); software project enactment (measuring, reporting, and controlling; acquisition and supplier contract management); product acceptance; review and analysis of project performance; project closure; and software management tools.
    软件工程管理包括计划、协调、测量、报告和控制一个项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。软件工程管理KA包括初始化和范围定义(确定和协商需求、可行性分析以及需求的评审和修订);软件项目规划(过程规划、工作量、成本和进度的估计、资源分配、风险分析、质量规划);软件项目制定(测量、报告和控制;采购和供应商合同管理);产品验收;项目绩效的评审与分析;项目关闭;以及软件管理工具。

    扫描二维码关注公众号,回复: 5735843 查看本文章
  • Software Engineering Process 软件工程执行
    The Software Engineering KA is concerned with definition, implementation, assessment, measurement, management, and improvement of software life cycle processes. Topics covered include process implementation and change (process infrastructure, models for process implementation and change, and software process management); process definition (software life cycle models and processes, notations for process definition, process adaptation, and process automation); process assessment models and methods; measurement (process measurement, products measurement, measurement techniques, and quality of measurement results); and software process tools.
    软件工程知识领域涉及软件生命周期过程的定义、实现、评估、度量、管理和改进。所涵盖的主题包括过程实现和变更(过程基础结构、过程实现和变更的模型以及软件过程管理);过程定义(软件生命周期模型和过程,过程定义、过程适应和过程自动化的符号);过程评估模型和方法;测量(过程测量、产品测量、测量技术、测量结果质量);以及软件过程工具。

  • Software Engineering Models and Methods 软件工程模型和方法
    The Software Engineering Models and Methods KA addresses methods that encompass multiple life cycle stages; methods specific to particular life cycle stages are covered by other KAs. Topics covered include modeling (principles and properties of software engineering models; syntax vs. semantics vs. invariants; preconditions, post-conditions, and invariants); types of models (information, structural, and behavioral models); analysis (analyzing for correctness, completeness, consistency, quality and interactions; traceability; and tradeoff analysis); and software development methods (heuristic methods, formal methods, prototyping methods, and agile methods).
    软件工程模型和方法知识领域解决了包含多个生命周期阶段的方法;针对特定生命周期阶段的方法由其他知识领域覆盖。所涵盖的主题包括建模(软件工程模型的原理和属性;语法、语义、不变量;(前置条件、后置条件和不变量);模型的类型(信息、结构和行为模型);分析(对正确性、完整性、一致性、质量和交互进行分析;可追溯性;和权衡分析);以及软件开发方法(启发式方法、正式方法、原型方法和敏捷方法)。

  • Software Quality 软件质量
    Software quality is a pervasive software life cycle concern that is addressed in many of the SWEBOK V3 KAs. In addition, the Software Quality KA includes fundamentals of software quality (software engineering cultures, software quality characteristics, the value and cost of software quality, and software quality improvement); software quality management processes (software quality assurance, verification and validation, reviews and audits); and practical considerations (defect characterization, software quality measurement, and software quality tools).
    软件质量是一个普遍存在的软件生命周期问题,在许多软件工程知识体系第三版 知识领域中都得到了解决。此外,软件质量知识领域还包括软件质量的基础(软件工程文化、软件质量特征、软件质量的价值和成本、软件质量改进);软件质量管理过程(软件质量保证、验证和验证、评审和审计);以及实际的考虑(缺陷特性、软件质量度量和软件质量工具)。

  • Software Engineering Professional Practice 软件工程专业实践
    Software engineering professional practice is concerned with the knowledge, skills, and attitudes that software engineers must possess to practice software engineering in a professional, responsible, and ethical manner. The Software Engineering Professional Practice KA covers professionalism (professional conduct, professional societies, software engineering standards, employment contracts, and legal issues); codes of ethics; group dynamics (working in teams, cognitive problem complexity, interacting with stakeholders, dealing with uncertainty and ambiguity, dealing with multicultural environments); and communication skills.
    软件工程专业实践是指软件工程师必须具备的知识、技能和态度,以一种专业、负责和道德的方式来实践软件工程。软件工程专业实践知识领域涵盖专业(专业行为、专业协会、软件工程标准、雇佣合同、法律问题);伦理准则;团队动态(在团队中工作,认知问题的复杂性,与利益相关者的互动,处理不确定性和模糊性,处理多元文化环境);和沟通能力。

Knowledge Areas Characterizing the Educational Requirements of Software Engineering 描述软件工程教育需求的知识领域

  • Software Engineering Economics
    The Software Engineering Economics KA is concerned with making decisions within the business context to align technical decisions with the business goals of an organization. Topics covered include fundamentals of software engineering economics (proposals, cash flow, the time-value of money, planning horizons, inflation, depreciation, replacement and retirement decisions); not for-profit decision-making (cost-benefit analysis, optimization analysis); estimation, economic risk and uncertainty (estimation techniques, decisions under risk and uncertainty); and multiple attribute decision making (value and measurement scales, compensatory and non-compensatory techniques).
    软件工程经济学KA关注于在业务上下文中做出决策,以使技术决策与组织的业务目标保持一致。所涵盖的主题包括软件工程经济学的基本原理(建议、现金流量、金钱的时间价值、规划期限、通货膨胀、折旧、重置和退休决定);非营利性决策(成本效益分析、优化分析);评估、经济风险和不确定性(评估技术、风险和不确定性下的决策);以及多属性决策(值和度量尺度、补偿和非补偿技术)。

  • Computing Foundations
    The Computing Foundations KA covers fundamental topics that provide the computing background necessary for the practice of software engineering. Topics covered include problem solving techniques, abstraction, algorithms and complexity, programming fundamentals, the basics of parallel and distributed computing, computer organization, operating systems, and network communication.
    计算基础知识领域涵盖了为软件工程实践提供必要的计算背景的基本主题。主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算的基础、计算机组织、操作系统和网络通信。

  • Mathematical Foundations
    The Mathematical Foundations KA covers fundamental topics that provide the mathematical background necessary for the practice of software engineering. Topics covered include sets, relations, and functions; basic propositional and predicate logic; proof techniques; graphs and trees; discrete probability; grammars and finite state machines; and number theory.
    数学基础知识领域涵盖了为软件工程实践提供必要数学背景的基本主题。主题包括集合、关系和函数;基本命题逻辑和谓词逻辑;证明技术;图表和树木;离散型概率;语法和有限状态机;和数论。

  • Engineering Foundations
    The Engineering Foundations KA covers fundamental topics that provide the engineering background necessary for the practice of software engineering. Topics covered include empirical methods and experimental techniques; statistical analysis; measurements and metrics; engineering design; simulation and modeling; and root cause analysis.
    工程基础知识领域涵盖了为软件工程实践提供必要的工程背景的基本主题。所涵盖的主题包括实证方法和实验技术;统计分析;测量和度量;工程设计;仿真和建模;以及根本原因分析。

CMMI

软件能力成熟度模型(Capability Maturity Model for Software / CMM)或 CMMI,是一种软件能力成熟度的判断标准,迎合和企业发展的需求,通过使用知识(能力)的不同,用不同级别表示开发企业的成熟性,不仅给出了企业能力提升的路径,也给出了企业能力评估的事实标准。
一下为CMMI对于所有目标领域的17个核心过程领域
在这里插入图片描述
P.S. All from Wikipedia

猜你喜欢

转载自blog.csdn.net/Lyn_B/article/details/88235435