系统分析与设计(一)

软件工程的定义

在软件的开发、运行和维护中应用的一种系统的、可量化的方法,同时包含了对这一方法的研究,与软件生产的所有方面相关的工程学科。

解释导致 software crisis 本质原因、表现,述说克服软件危机的方法

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

  • 本质原因

    1. 硬件的快速发展导致计算能力的极大提高,超过了开发软件有效利用这些计算性能的能力。
    2. 软件的复杂度不断增加,但由于现有方法不足,对大型、复杂软件存在无法解决问题,即软件开发方法没有跟上越来越复杂的软件开发。
  • 具体表现

    • 项目运行超过预算
    • 项目运行超时
    • 软件的使用效率较低
    • 软件质量过差
    • 软件不能满足用户需求
    • 项目无法管理,代码难以维护
    • 软件无法交付
  • 克服方法

    1. 因为面临的不仅仅是技术问题,还有管理问题,所以可以从应用现代工程的概念、原型、技术、方法进行计算机软件的开发、管理、和维护。如使用一些优秀的代码管理软件等等。
    2. 软件工程从硬件工程和其他人类工程中吸收成功的经验,明确提出了软件生命周期的模型,发展软件开发与维护阶段适用的技术和方法,并应用于软件工程实践。

软件生命周期

在软件工程中,软件开发过程是将软件开发工作划分为不同阶段以改进设计,产品管理和项目管理的过程。软件生命周期是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,常见有瀑布模型、螺旋模型、敏捷的模型等。

SWEBoK 的 15 个知识域

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

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

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

  • 软件测试
    测试是一项旨在评估产品质量并通过识别缺陷来改进产品质量的活动。软件测试涉及在有限的测试用例集上针对预期行为动态验证程序的行为。这些测试用例是从(通常非常大的)执行域中选择的。软件测试包括软件测试的基础知识;测试技术;人机界面测试与评估;与测试有关的措施;和实际考虑。

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

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

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

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

  • 软件工程模型和方法
    软件工程模型和方法解决了涵盖多个生命周期阶段的方法;其他涵盖特定生命周期阶段的特定方法。涵盖的主题包括建模(软件工程模型的原理和属性;语法与语义与不变量;前置条件,后置条件和不变量);模型类型(信息,结构和行为模型);分析(分析正确性,完整性,一致性,质量和相互作用;可追溯性;以及权衡分析);和软件开发方法(启发式方法,形式方法,原型方法和敏捷方法)。

  • 软件质量
    软件质量是许多SWEBOK V3 KAs中普遍存在的软件生命周期问题。此外,软件质量KA还包括软件质量的基础知识(软件工程文化,软件质量特性,软件质量的价值和成本以及软件质量改进);软件质量管理流程(软件质量保证,验证和确认,审核和审核);和实际考虑(缺陷表征,软件质量测量和软件质量工具)。

  • 软件工程专业实践
    软件工程专业实践关注软件工程师必须具备的专业,负责和道德的软件工程知识,技能和态度。软件工程专业实践涵盖专业性(专业行为,专业协会,软件工程标准,雇佣合同和法律问题);道德准则;小组动态(团队合作,认知问题复杂性,与利益相关者互动,处理不确定性和模糊性,处理多元文化环境);和沟通技巧。

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

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

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

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

简单解释 CMMI 的五个级别

  • Maturity Level 1 - Initial 初始级
    软件工程是无序的,自发生产模式,对过程没有定义,管理是反应式的

  • Maturity Level 2 - Managed 可管理级
    建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。

  • Maturity Level 3 - Defined 已定义级
    已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。

  • Maturity Level 4 - Quantitatively Managed 量化管理级
    分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。

  • Maturity Level 5 - Optimizing 优化管理级
    过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。

用自己语言简述 SWEBok 或 CMMI

SWEBok 即软件工程知识体系指南,描述现在普遍接受的一些关于软件工程方面的知识,促进全球关于软件工程观点的统一,因为现在的硬件发展速度加快,为了加强软件开发的技术,克服软件危机,所以IEEE Computer Society 构建了这个软件生产的最佳实践与相关知识的框架,用来指导软件工程的人才培养和学科建设。
SWEBok 也在随着实践发展不断变化,收录广泛接受的实践知识,根据其它知识体系不同观点,进行重新修订。

CMMI 即软件能力成熟度模型,它的目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。也可以用作来评估组织过程成熟度的框架。CMMI提供一个单一的集成化框架,来消除组织在各个过程中模型的不一致,减少重复,试图通过管理的实践和过程改进来克服软件开发的困难。