©️ OverlookArt
首页 / SoftExam / 软件设计师 / 软件工程 / 软件工程概述

软件工程概述

软件工程概述

  • 软件工程:是计算机应用科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程,目的是提高软件生产率、提高软件质量、降低软件成本
  • 计算机软件:是计算机系统的程序及其文档。计算机在应用领域分为以下10类,1.系统软件;2.应用软件;3.工程/科学软件;4.嵌入式软件;5.产品线软件;6.Web应用软件;7.人工智能软件;8.开发计算;9.网络资源;10.开源软件。

基本原理

美国著名的软件工程专家 B.W.Boehm 于1983年提出了软件工程的七条原理

  • 用分阶段的生命周期计划严格管理
  • 坚持进行分段评审
  • 实现严格的产品控制
  • 采用现代的程序设计技术
  • 结果应能清楚的审查
  • 开发小组的人员应小而精
  • 承认不断改进软件工程实践的必要性

生存周期

同其他事物一样,一个软件产品或软件要经历孕育、诞生、成长、成熟、衰亡等阶段,一般称为软件生存周期。软件生存周期包括以下七个方面

  • 可行性分析与项目开发计划
    这个阶段主要确定软件的开发目标及其可行性。参与该阶段的人员有用户、项目负责人、系统分析师。产生的文档有可行性分析报告、项目开发计划。
  • 需求分析
    该阶段的任务不是具体的解决问题,而是要确定软件系统要做什么,确定软件的功能、性能、数据和用户界面等要求,从而确定系统的逻辑模型。参与该阶段的人员有用户、项目负责人、系统分析师。产生的文档主要是软件需求说吗。
  • 概要设计
    该阶段开发人员把确定的各项功能需求转换成需求的体系结构。概要设计就是设计软件的结构,明确软件由哪些模块组成,这些模块层次结构是怎样的,调用关系是怎样的,每个模块的功能是什么。参与该阶段的人员有系统分析师、软件设计师。产生的文档主要是概要设计说吗书
  • 详细设计
    该阶段的主要任务是对每个模块的功能进一步详细、具体的描述。参与人员有软件设计师、程序员,产生的文档主要是详细设计文档
  • 编码
    把每个模块的控制结构转换成计算机可接受的程序代码,即写成某种特定程序设计语言表示的原程序清单
  • 测试
    测试是保证软件质量的重要手段。参与测试的人员通常是另一部门(或单位)的软件设计师或系统分析师。产生的文档主要是软件测试计划、测试用例、测试报告
  • 维护
    软件维护是软件生存周期中时间最长的阶段。软件已交付且正式投入使用后,便进入维护阶段。对软件进行修改的原因包括:1.运行中发现隐含的错误需要修改;2.为了适应变化的修改;3.需要对软件进行扩充、增强而进行修改;4.为将来软件维护活动做预先准备

软件过程

软件开发中遵循一系列可预测的步骤(即路线图),该路线图称为软件过程。过程是活动的集合,活动是任务的集合。软件过程的能力成熟度模型有以下几种

  1. 能力成熟度模型(CMM)
    能力成熟度模型是对软件组织进化阶段的描述,随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力经过这些阶段逐步提高。软件过程的改进分为五个成熟度级别
    • 初始级:项目完成依靠于个人的努力和英雄式核心人物的作用
    • 可重复级:建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性
    • 已定义级:管理和工程两方面的软件过程已文档化、标准化
    • 已管理级:制定了软件过程和产品质量的详细度量标准
    • 优化级:通过质量反馈和来自新观念、新技术的反馈不断地改进软件过程
  2. 能力成熟度模型集成(CMMI)
    CMMI是若干过程模型的综合和改进,是支持多个工程学科和领域的、系统的、一致的过程改进框架。CMMI提供了两种表示方法:阶段式模型和连续式模型
    • 阶段式模型:结构类似于CMM,它关注组织的成熟度。CMMI-SE/SW/IPPD1.1版本中有五个成熟等级
      1. 初始级:过程不可预测且缺乏控制
      2. 已管理级:过程为项目服务
      3. 已定义级:过程为组织服务
      4. 定量管理级:过程已度量和控制
      5. 优化级:集中过程改进
    • 连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级(简称CL)。CMMI包括6个过程域能力等级
      1. CL0(未完成的):过程域未执行
      2. CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的工作产品
      3. CL2(已管理的):其共性目标集中于已管理的过程的制度化
      4. CL3(已定义级的):其共性目标集中于已定义的过程的制度化
      5. CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化
      6. CL5(优化的):使用量化手段改变和优化过程域

软件过程模型

软件过程模型习惯上称为软件开发模型,它是软件开发全部过程、活动和任务的结构框架。典型的软件过程模型有瀑布模型增量模型演化模型(原型模型、螺旋模型)喷泉模型基于构建的开发模型形式化方法模型统一过程模型

  • 瀑布模型:将软件生命周期中的各个活动规定为依据线性顺序连续的若干阶段的模型,包括需求分析、设计、编码、测试、运行于维护。如瀑布流水逐级下落,瀑布模型以项目的阶段性评审和文档控制为手段有效的对整个开发过程进行指导,所以它是以文档作为驱动、适合软件需求很明确的软件项目开发
    • 优点: 容易理解、成本低、强调开发的阶段性早期计划需求调查和产品测试
    • 缺点:客户必须完整、正确和清晰的表达需求;难以评估项目进度状态,项目快结束时出现大量的集成于测试工作;需求或设计的错误往往只有到了项目后期才能被发现,对项目风险的控制能力弱,通常会导致项目延期,开发费用超出预算。
  • 增量模型:将需求分段为一系列产品,每一个增量都可以分别开发
    • 优点:第一个可交付的版本和时间很少,开发由增量表示的小系统所承担的风险不大,由于很快发布第一个版本,因此可减少用户需求的变更,同时它具有瀑布模型的所有优点
    • 缺点:若没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定,若需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发或重新发布,管理发生成本、进度和配置的复杂性可能会超出组织的能力
  • 演化模型:典型的演化模型由原型模型和螺旋模型,演化模型适用于软件需求不够明确的情况
    • 原型模型:原型是预期系统的可执行版本。原型模型开始于沟通,目的是定义软件的总体目标、标识需求,然后快速构建原型并交付用户使用,收集客户反馈意见,并在下一轮中对原型进行改进。原型模型适用于用户需求不明确、需求经常变化且系统规模不太大、不太复杂的软件项目
    • 螺旋模型:螺旋模型将瀑布模型和原型模型结合起来,加入两种模型均忽略的风险分析,螺旋模型强调风险分析,与瀑布模型相比支持用户需求的动态变化,螺旋模型适合用于庞大、复杂且有高风险的系统
  • 喷泉模型:以用户需求为动力、以对象为驱动模型,适用于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性
    • 优点:各个阶段没有明确的界限,开发人员可以同步进行,可以提高软件项目的开发效率,节省开发时间
    • 缺点:由于在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理,要求严格管理文档,使审核难度加大
  • 基于构件的开发模型:利用预先包装的构件来构造应用系统。构件是面向软件体系架构的可复用模块,基于构件的开发模型具有许多螺旋模型的特点,它本质上是演化模型,需要以迭代方式构建软件。其不同之处在于基于构件的开发模型采用预先打包的软件构件开发应用系统
  • 形式化方法模型:是建立在严格的数学基础上的一种软件开发方法,主要活动是生成计算机软件形式化的数学规格说明
  • 统一过程模型(UP):是一种用例和风险驱动,以框架为中心,迭代并增量的开发过程,由方法和工具支持,统一过程定义了4个技术阶段及其主要工作产品
    1. 起始阶段:专注项目的初创活动,主要工作产品有构想文档、初始用例模型、初始项目术语表、初始业务用例、初始风险评估、项目计划、业务模型及多个原型
    2. 精化阶段:主要工作产品有用例模型、补充需求、分析模型、整体体现结构描述、可执行的软件体系结构原型、初步设计模型、修订的风险列表、项目计划和初始用户手册
    3. 构建阶段:关注系统的构建,产生实现模型、主要工作产品有设计模型、软件构件、集成软件增量、测试计划及步骤、测试用例及支持文档
    4. 移交阶段:关注软件提交方面的工作,产生软件增量,主要工作产品有提交的软件增量、测试报告和综合用户反馈。
      统一过程的典型代表是RUP(Rational Unified Process), RUP 是 UP 的商业扩展,完全兼容UP,比UP更完整更详细
  • 敏捷方法:敏捷方法的总体目标是通过尽可能早的、持续的对有价值的软件进行交付,使客服满意。
    1. 极限编程(XP):四大价值观 沟通、简单性、反馈和勇气
    2. 水晶法(Crystal):人对软件质量有重要影响,随着项目质量和开发人员素质的提高,项目和过程的质量也随之提高
    3. 并列争球法(Scrum):使用迭代方法,其中把每30天一次迭代称为一个冲刺,并按需求的优先级别来实现产品