计算机导论10-软件与软件工程

软件

软件的概念

  • 软件(software)是信息的载体,并且提供了对信息的处理能力,软件来反映用户特定的信息处理逻辑,从而由对信息增值来取得用户自身效益增值。
  • 软件运行在硬件之上,是硬件实施计算、控制等功能的工作步骤、流程及相关说明;硬件是软件运行的物质基础,硬件系统的协同工作完成用户通过软件定义的特定数据处理任务

软件的定义

  • 计算机软件是指与计算机系统操作有关的程序、规程、规则及任何与之有关的数据和文档资料。
    • 指令、程序和数据(硬件系统可以执行);
    • 文档、资料(软件开发、运行、维护、使用、培训等活动相关,硬件系统无法执行)

软件的特征

特征 表现
软件是无形产品 表现为程序及文档,电子化的脑力劳动的结果,非有形可见的物质产品
软件生产无明显制造过程 设计-开发过程的结果,没有物质产品的制造过程,可以大量复制
软件不会“磨损” 仪器、设备等物质产品在使用过程中会产生磨损、损耗-折旧,软件不会损耗,但可能需要“维护”以保持稳定性,“修改”以满足硬件系统的变化、或者实现新的功能
大多数软件是定制的 专用软件:面向特定的专业领域、完成指定范围、类型的数据处理任务-如图像处理软件,
通用软件:通用性不是绝对的,如操作系统、office
对计算机硬件依赖性 软件根植于硬件系统之上,并需操作系统支持才能运行
软件的复杂性 与软件设计、开发相关的人的因素、物的因素变化多端

软件的保护与授权

软件的法律保护

  • 根据《计算机软件保护条例》的规定,计算机软件著作权归属软件开发者。
  • 计算机软件作为一种知识产品,要获得法律保护,必须具备原创性、可感知性、可再现性。

软件许可

  • 专属软件
  • 自由软件
  • 共享软件
  • 免费软件
  • 公共软件

软件工程

软件危机

软件危机的概念

  • 软件危机(software crisis) 是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题。
  • 软件危机主要表现在
    • 对软件开发成本和进度的估计不准确;
    • 软件产品不能完全满足用户的需求;
    • 没有确保软件质量的体系和措施,开发的软件可靠性差;
    • 软件可维护性差;
    • 开发过程无完整、规范的文档资料;
    • 软件开发速度,落后于计算机应用的普及和发展速度;
    • 软件成本在计算机系统总成本中所占比例逐年上升。

产生软件危机的原因

  • 需求难以明确且频繁变更。
  • 软件开发的管理困难。
  • 软件开发独有特点造成开发困难。
  • 软件开发技术落后。
  • 文档的重要性往往被忽视。
  • 软件需求快速发展。

软件工程的概念

软件工程的定义

  • 软件工程是应用工程学、计算机科学、数学及管理科学等原理开发软件的工程。软件工程以提高质量,降低成本为目的,借鉴传统工程学的原则、方法完成软件设计、开发、制造的全过程。其中,计算机科学、数学用于构造模型和设计算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及权衡时间,管理科学用于计划、资源、质量、成本等管理。

软件工程基本原理

(1)用分阶段的生命周期计划严格管理开发过程
(2)坚持进行阶段评审
(3)实行严格的产品控制
(4)采用现代程序设计技术
(5)应能清楚地审查结果
(6)合理安排软件开发小组的人员
(7)必须灵活不断地改进软件工程实践

软件工程框架

  • 软件工程的框架可概括为目标、过程和原则。
条目 说明
软件工程目标 生产具有正确性、可用性和成本合宜的产品。
软件工程过程 指生产一个最终满足需求且达到工程目标的软件产品所需要的步骤。
软件工程原则 包括围绕工程设计、工程支持和工程管理所提出的基本规范。

1)采用合适的设计方法
2)选取适宜的开发模型
3)提供高质量的工程支撑
4)重视软件工程的管理

软件工程三要素

  • 软件工程的三要素包括 过程,方法,工具

软件工程方法学

软件工程方法

结构化方法

  • 其基本思想是:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。
方面 表现
问题的规模上 由大到小
问题的复杂程度上 由繁到简
解决问题的策略方面 分而治之
数学模型 大问题划分为若干性质相同的小问题,由若干相同或类似的小问题的解决方案形成原始大问题的解决方案,小问题的解决方案由若干功能独立的模块构成
  • 结构化方法将软件生命周期的全过程依次划分为若干个阶段,采用结构化技术来完成每个阶段的任务。其特点是强调自顶向下顺序地完成软件开发的各阶段任务。

面向对象方法

  • 面向对象方法在概念和表示方法上的一致性,保证了各项开发活动之间的平滑过渡。
  • 面向对象开发方法主要有Booch方法、Coad方法、OMT方法以及UML等。

形式化方法

  • 形式化方法以数学为基础,其目标是建立精确的、无二义性的语义,对系统开发的各个阶段进行有效的描述,使系统的结构具有先天的合理性、正确性和良好的维护性,能较好地满足用户需求。

软件工程工具

  • 软件工程工具为软件工程方法提供了自动的或半自动的软件支撑环境。软件设计与开发的不同阶段对应不同的工具,包括需求分析工具、设计工具、实现工具、测试工具、维护工具、配置工具等。软件工具的功能是在软件开发各个阶段帮助开发者控制开发中的复杂性,提高工作质量和效率。

软件工程过程

  • 软件工程过程是指开发软件产品的一组活动及其结果,即人们用于开发和维护软件及其相关过程的一系列活动,包括软件工程活动和软件管理活动。

软件生命周期

软件生命周期概念

  • 软件生命周期指的是从软件思想萌芽到软件产品消亡的整个时间阶段;软件产品从形成概念开始,经过开发、运行和维护,直到最终被废弃的全过程,称为软件生命周期(Software-Life-Cycle,SLC)。

软件定义阶段

  • 软件定义阶段的任务是**确定软件开发工程必须完成的总目标,确定工程的可行性,导出实现工程目标应该采用的策略方案及系统必须完成的功能,估计完成该项工程需要的资源和成本,并且制定工程进度表。**这个阶段的工作通常由系统分析员和用户共同完成。
  • 软件定义阶段集中于解决“做什么”,通常包括三个步骤,即问题定义、可行性研究和需求分析。

(用户提出软件需求,系统分析人员根据用户需求归纳出若干问题-建模,模型求解方案)

软件开发阶段

  • 软件开发阶段集中于“如何做”,通常包括四个步骤:
    1. 概要设计
    2. 详细设计
    3. 软件实现
    4. 软件测试(软件开发是按照需求分析的要求,由抽象到具体,逐步生成软件的过程。

软件支持阶段

  • 软件支持阶段关注于“变化”(用户需求变化,软件随之变化),其主要任务是使软件持久地满足用户的需要。具体地说,当软件在运行过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件以满足用户的新需要。软件支持阶段通常包括软件运行、软件维护。

软件生命周期模型

瀑布模型

  • 瀑布模型(waterfall model)是一种线性顺序模型,也称为“传统生命周期”

在这里插入图片描述

特点 说明
阶段间具有顺序性和依赖性 每阶段都有明确的前驱及后继,顺序不可颠倒,前驱阶段的输出直接影响后继阶段的输入,而后继阶段的工作依赖于前驱阶段的成果
推迟实现的观点 高度重视编码之前各阶段的工作质量,在时间允许的情况下尽可能推迟软件实现阶段的工作,否则可能会因前期工作遗留问题导致大量的返工性重复劳动
质量保证的观点 各阶段相对独立,阶段性成果责任明确,质量可控

演化模型

  • 演化模型(evolutionary model)又称原型模型,主要针对事先不能完整定义需求的软件项目开发。(具有明显的周期性迭代特征)

在这里插入图片描述

增量模型

  • 增量模型(incremental model)融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。

螺旋模型

  • 螺旋模型(spiral model)是瀑布模型与演化模型相结合,并增加两者所忽略的风险分析而产生的一种模型。螺旋模型将开发划分为制定计划、风险计划、实施开发和客户评估四类活动。

在这里插入图片描述

喷泉模型

  • 喷泉模型(fountain model)是一种以用户需求为动力、以对象为驱动的模型,主要用于描述面向对象的软件开发过程。

微软公司软件开发周期

阶段 工作
规划阶段 在产品的规划阶段要做三件事:拟定基于客户数据的目标描述、基于目标描述的规格/特性说明和基于规格说明和特性优先级制定的进度表
设计阶段 在设计阶段,程序经理根据产品远景目标,完成产品的功能特性的规格说明书的设计,并确定产品开发的主要进度表。
开发阶段 在产品开发阶段,开发人员负责根据产品功能特性规格说明书的要求,完成产品的开发工作。
开发阶段的主要工作是完成产品中所有组件的开发工作(包括代码和文档),此外还包括审核设计文档、安装并配置开发环境、代码检入工作、每日产品生成以及管理Bug(漏洞))数据库等。
稳定阶段 稳定阶段也称为测试阶段,或QA阶段。
发布阶段 项目组发布产品或解决方案,稳定发布过程,并将项目移交到运营和支持人员手中,以获得最终用户对项目的认可。

补充题

  • 软件工程的出现主要是由于( 软件危机的出现
  • 软件工程的提出起源于软件危机,而其目的应该是最终解决软件的( 生产工程化 ) 问题
  • 在软件研制过程中,CASE是指( 计算机辅助软件工程
  • 在结构化方法中,软件功能分解属于软件开发中的( 总体设计
  • 结构化分析方法就是面向( 数据流 ) 的自顶向下逐步求精进行需求分析的方法,其基本思想是软件功能的分解和抽象
  • 软件开发的结构化分析方法,常用的描述软件功能需求的工具是(数据流图、数据字典
  • 在软件生命周期中,耗费时间最长的是(维护阶段
  • 软件工程经验证明软件开发中要掌握40-20-40规则,它强调了软件开发中( 分析、设计和测试 )的比重
  • 概要设计的结果是提供一份( ** 模块说明书**)
  • 螺旋模型是在瀑布模型和演化模型的基础上增加了风险分析活动
  • 软件的生产经历了程序设计、程序系统和 (软件工程) 3个阶段
  • 软件文档是软件工程实施中的重要成分,它不仅是软件开发的各阶段的重要依据,而且也影响软件的 (可维护性) 。
  • 若网络中很多用户都需要安装使用同一软件时,则应购买该软件的(许可证
  • 软件工程的目的是成功地建造大型的软件系统,主要内容是软件开发技术和 (软件工程管理) 两方面
  • 软件开发方法学的主要目的是克服软件手工生产,使软件开发能进入工程化和(规范化) 的环境
  • (问题定义)阶段的任务是确定软件系统所要解决的问题
  • 软件概要设计的成果是(软件设计说明书
  • 详细设计)阶段主要完成的任务是确定每个模块的具体执行过程
  • 基本的软件测试包括单元测试、(集成测试) 和验收测试。
  • 软件设计包括 (概要设计) 和详细设计两个阶段
  • 在演化模型中,通常把第一次试验性开发出的软件称为(原型
  • 增量模型与原型实现不一样的是其 (可操作性) ,强调每一个增量均发布一个产品
  • 常见的软件开发模型中, (喷泉) 模型主要用来描述面向对象的软件开发过程
  • UML是 (统一建模语言
  • CMM模型是指(软件能力成熟度模型
  • CMM模型提供了5个级别,分别是 (初始级,可重复级,确定级,管理级,优化级
  • 为了保护软件开发者的权益,我国已制定了一些与计算机软件相关的法律,目前计算机软件的法律保护手段主要有3种,其中包括(专利法 著作权法 商业秘密法

相关推荐

  1. 软件工程软件质量

    2024-01-17 10:00:09       8 阅读
  2. 软件工程-第二章 计算机系统工程

    2024-01-17 10:00:09       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-17 10:00:09       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-17 10:00:09       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-17 10:00:09       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-17 10:00:09       20 阅读

热门阅读

  1. Docker容器运行多个php,一个正常另一个报502

    2024-01-17 10:00:09       37 阅读
  2. 快速了解spring boot中的@idempotent注解

    2024-01-17 10:00:09       30 阅读
  3. GPT实战系列-实战Qwen在Cuda 12+24G部署方案

    2024-01-17 10:00:09       36 阅读