软件系统分析与设计 | 软件的本质与软件工程科学

一、软件工程的定义

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

IEEE:软件工程是(1)将系统化的、规范的、可度量的方法应用与软件的开发、运行和维护,即将工程化方法应用于软件;(2)对(1)中所述方法的研究。

二、为什么会出现软件危机(software crisis)?其本质原因是什么?表现在哪些方面?并说明克服软件危机的方法。

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

软件危机的本质原因:

软件的本质特征:

  • complexity 复杂性
  • conformity 一致性
  • changeability 可变性
  • invisibility 不可视性

计算机的快速发展使得计算机应用范围迅速扩大,软件开发急剧增长,软件系统的规模越来越大,复杂程度越来越高,可靠性问题也越来越突出,原来的个人设计、个人使用的方式不再满足要求,软件生产方式迫切需要改变。又由于软件本身固有的特征导致软件开发难以满足需求,软件危机爆发。

软件危机的表现:

  • 项目运行超出预算。
  • 项目运行超过时间。
  • 软件质量低落。
  • 软件通常不匹配需求。
  • 项目无法管理,且代码难以维护。

克服软件危机:

  • 认清软件的本质特征、软件危机的内涵
  • 用现代工程的概念,原理,技术和方法进行计算机软件的开发,管理和维护

三、软件生命周期

软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。
生命周期的每一个周期都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。按照软件的生命周期,软件的开发不再只单单强调“编码”,而是概括了软件开发的全过程。软件工程要求每一周期工作的开始只能必须是建立在前一个周期结果“正确”前提上的延续;因此,每一周期都是按“活动 ── 结果 ── 审核 ── 再活动 ── 直至结果正确”循环往复进展的。
通常,软件生存周期包括:

  • 问题定义
  • 可行性研究
  • 需求分析
  • 开发阶段
  • 测试阶段
  • 软件维护

四、SWEBok的15个知识域

  • 软件要求 Software Requirements

关注软件需求的启发,协商,分析,规范和验证。软件需求表达对软件产品的需求和限制,这些需求和约束有助于解决一些现实问题。

  • 软件设计 Software Design

软件设计涵盖了设计过程和最终产品,软件设计的过程是软件工程生命周期活动,其中分析软件需求以产生软件内部结构及其行为的描述,其将作为其构造的基础。软件设计(结果)必须描述软件体系结构 - 即软件如何分解和组织成组件以及这些组件之间的接口。它还必须描述能够构建它们的详细程度的组件。

  • 软件构建 Software Construction

软件构建是指通过结合详细设计,编码,单元测试,继承测试,调试和验证来详细创建工作软件。软件构建包括与满足其要求和设计约束的软件程序开发相关的主题,涵盖了软件构建基础、管理软件建设、建筑技术、实际考虑和软件构建工具。

  • 软件测试 Software Testing

软件测试旨在评估产品质量并通过识别缺陷来改进产品质量的活动。软件测试涉及在有限的测试用例集上针对预期行为动态验证程序的行为。软件测试包括软件测试的基础知识、测试技术、人机界面测试与评估、与测试有关的措施和实际考虑。

  • 软件维护 Software Maintenance

软件维护包括增强现有功能,调整软件以在新的和修改的操作环境中运行,以及纠正缺陷。软件维护包括软件维护的基础知识(维护的性质和需求,维护类别,维护成本)、软件维护中的关键问题(技术问题,管理问题,维护成本估算,软件维护测量)、 维护过程、软件维护技术(程序理解,重新设计,逆向工程,重构,软件退役)、灾难恢复技术和软件维护工具。

  • 软件配置管理 Software Configuration Management

软件配置管理是在不同时间点识别系统配置的规则,用于系统地控制配置的改变,以及在整个软件生命周期中维持配置的完整性和可追溯性。软件配置管理涵盖SCM过程的管理、软件配置识别,控制,状态核算,审计、软件发布管理和交付;

  • 软件工程管理 Software Engineering Management

软件工程管理涉及规划,协调,测量,报告和控制项目或程序,以确保软件的开发和维护是系统化的,规范化的和量化的。软件工程管理涵盖了启动和范围定义(确定和协商要求,可行性分析以及要求的审查和修订)、软件项目计划(过程计划,工作量估算,成本和进度,资源分配,风险分析,质量计划)、软件项目制定(计量,报告和控制;收购和供应商合同管理)、产品验收、审查和分析项目绩效、项目结束和软件管理工具。

  • 软件工程过程 Software Engineering Process

软件工程过程关注软件生命周期过程的定义,实施,评估,测量,管理和改进,其涵盖的主题包括流程实施和变更(流程基础架构,流程实施和变更模型以及软件流程管理)、流程定义(软件生命周期模型和流程,流程定义,流程适应和流程自动化的符号)、过程评估模型和方法、测量(过程测量,产品测量,测量技术和测量结果的质量)和软件处理工具

  • 软件工程模型和方法 Software Engineering Models and Methods

涵盖的主题包括建模、 模型类型、分析、和软件开发方法。

  • 软件质量 Software Quality

软件质量包括软件质量的基础知识(软件工程文化,软件质量特性,软件质量的价值和成本以及软件质量改进)、软件质量管理流程(软件质量保证,验证和确认,审核和审核和实际考虑(缺陷表征,软件质量测量和软件质量工具)

  • 软件工程专业实践 Software Engineering Professional Practice

关注软件工程师必须具备的专业,负责和道德的软件工程知识,技能和态度,涵盖专业性、道德准则、小组动态和够通技巧

  • 软件工程经济学 Software Engineering Economics

关注的是在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。涵盖的主题包括软件工程经济学的基本原理(提案,现金流量,货币时间价值,计划视野,通货膨胀,折旧,替代和退休决策);非营利性决策(成本效益分析,优化分析); 估计,经济风险和不确定性(估算技术,风险决策和不确定性); 和多属性决策(价值和衡量尺度,补偿和非补偿技术)。

  • 计算基础 Computing Foundations

提供软件工程实践所需的计算背景的基础主题。涵盖的主题包括问题解决技术,抽象,算法和复杂性,编程基础,并行和分布式计算的基础知识,计算机组织,操作系统和网络通信。

  • 数学基础 Mathematical Foundations

提供软件工程实践所必需的数学背景的基础主题。涵盖的主题包括集合,关系和功能;基本命题和谓词逻辑;证明技术;图形和树木;离散概率;语法和有限状态机;以及数论。

  • 工程基础 Engineering Foundations

提供软件工程实践所必需的工程背景的基础主题。涵盖的主题包括经验方法和实验技术; 统计分析; 测量和指标; 工程设计; 仿真与建模; 和根本原因分析。

五、CMMI的五个级别

  • 初始级(Initial)
    软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
  • 可管理级(Managed)
    建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
  • 已定义级(Defined)
    已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
  • 量化管理级(Quantitatively Managed)
    分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
  • 优化管理级别(Optimizing)
    过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。

六、简述SWEBok、CMMI

CMMI
CMMI全称是Capability Maturity Model Integration,即能力成熟度模型集成(也有称为:软件能力成熟度集成模型),一种改进过程的方法,其目的是协助提升组织的绩效,可用来引导一整个项目、一整个部门乃至一个完整的组织的过程改进。CMMI能够协助集成传统独立的组织功能,设置过程改进目标和优先级,为质量过程提供指引,并为评价当前过程提供一个参考点。CMMI是世界公认的软件产品进入国际市场的通行证,它不仅仅是对产品质量的认证,更是一种软件过程改善的途径。通过CMM的评估认证不是目标,它只是推动软件企业在产品的研发、生产、服务和管理上不断成熟和进步的手段,是一种持续提升和完善企业自身能力的过程。
SWEBok
SWEBok(software engineering body of knowledge),软件工程知识领域。SWEBoK是IEEE计算机学会职业实践委员会支持的一个项目,其主要目标为促进世界范围内对软件工程的一致观点以及阐明软件工程相对其他学科(如计算机科学、项目管理、计算机工程和数学等)的位置,并确立它们的分界。它将软件工程领域的知识系统地划分为15个知识域,即为条目四中所讲述的15个知识域。

猜你喜欢

转载自blog.csdn.net/liuyh73/article/details/88617801