首页 > 其他分享 >软件工程导论课程笔记与详解②

软件工程导论课程笔记与详解②

时间:2022-11-01 12:57:52浏览次数:45  
标签:生命周期 模型 导论 软件工程 文档 开发 软件 详解

第一章 软件工程概述②(下)

目录:

1、 软件工程介绍

2、 软件生命周期

3、 软件过程

 


 

1、 软件工程的介绍

① 软件工程的来源:1968年,北约组织NATO召开计算机科学会议。会议中首次提出了“软件工程”的概念和克服“软件危机”的策略,强调按照工程化原则和方法组织软件开发工作。软件工程技术领域由此应运而生。

 

②工程的含义

(1) 工程的含义:工程师将理论和所学的知识应用于实践的科学,一遍经济有效地解决实际问题。

(2) 工程的特征:平衡与决策、度量与验证、运用工具、团队协同工作、角色分工、最佳实践、强调重用(重复使用)

 

③ 软件工程的定义

(1) 典型定义:软件工程是指导计算机软件开发维护的一门工程学科,采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考研儿整明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

(2) 软件工程的本质特征:

  • 关注于大型程序的构造;
  • 软件工程的中心课题是控制复杂性;(将软件解决的复杂问题进行分解)
  • 软件经常变化;
  • 开发软件的效率非常重要;(寻求更好更有效的方法和工具)
  • 和谐地合作是软件开发的关键;
  • 软件必须有效地支持它的用户
  • 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品

(3) 软件工程的七条基本原则

  1. 分阶段的生命周期计划严格管理;
  2. 坚持进行阶段评审;(可以尽早在软件开发过程中发现错误)
  3. 实行严格的产品控制;(实行基准配置管理,即修改要有审查)
  4. 采用现代程序设计技术;
  5. 结果能清楚地审查;(根据目标规定组织责任和标准,便于审查)
  6. 开发小组的人员应该少而精;
  7. 承认不断改进软件工程实践的必要性。(主动采纳新的软件技术,不断总结经验)

 

④ 软件工程方法学

 

 

 技术:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(Methodology),也称为范型(Paradigm)。

管理:通过计算,组织和控制等一系列活动、合理地配置各种资源,以达到既定目标的过程。

方法:完成软件开发的各项任务的计划方法,回答“怎么做”的问题

工具:是为运用方法而提供的自动或半自动的软件工程支撑环境

过程:是为了获得高质量的软件所需要完成的一些列任务的框架,它规定了完成各项任务的工作步骤

 

(1) 传统方法学:这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。

  • 方法:结构化程序设计方法、瀑布模型、螺旋模型等
  • 编程语言:Fortran语言、Pascal语言、C语言等

 

(2) 面向对象方法学:把数据和对数据的操作紧密结合起来的方法,模拟人类认识世界解决问题的方法和过程;

 

⑤ 软件生命周期

定义:指软件从提出到最终被淘汰的这个存在其

过程:软件定义(需求分析:问题定义、可行性研究、需求分析)-->软件开发(总体设计、详细设计、编码和单元测试、综合测试) -->运行维护(主要任务是使软件持久地满足用户的需求)

 

(1) 软件生命周期八个阶段

  1. 问题定义:回答要解决的问题是什么
  2. 可行性研究:确定项目是否值得做,是否有好方案
  3. 需求分析:准确地确定目标系统必须做什么
  4. 总体设计(概要设计):概括的说应该怎样实现目标系统,确定程序由哪些模块组成及其之间的关系
  5. 详细设计(模块设计):应该怎样具体实现这个系统,确定实现模块功能所需要的算法和数据结构
  6. 编码与单元测试:写出正确容易理解、容易维护的程序模块、并仔细测试这些模块。
  7. 综合测试:通过各种类型的测试使软件达到预定的要求
  8. 维护:通过各种必要的维护活动使系统持久的满足用户需要。(分为:5%预防性维护、20%改正性维护、25%适应性维护、50%完善性维护)

⑥ 软件过程

为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

 

目标:开发出客户满意的软件

  • 什么人(who)
  • 什么时候(when)
  • 做什么事(what)
  • 怎么做(how)

 

(1) 软件过程定义:使用资源将输入转化为输出的活动所都成的系统。

过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各阶段任务完成的里程碑

 

(2) 过程模型简介

通常我们使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各阶段执行顺序,也叫过程模型,是对实际过程的抽象描述。

过程模型有:瀑布模型、快速原型模型、增量模型、螺旋模型等。

 

(3) 瀑布模型

特点:

  • 阶段间具有顺序性和依赖性。(前一阶段结束 后一阶段开始,前一个阶段输出文档,后一个阶段输入文档)
  • 推迟实现的观点。(推迟程序的物理实现)
  • 质量保证的观点(文档生成,文档评审)

优点:

  • 迫使开发人员采用规范的方法
  • 每个阶段必须提交文档(文档驱动)
  • 每个极端的产品都必须质量验证

缺点:

  • 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。(文档多,写的多)
  • 开发过程中很难响应客户的变更要求。(流程是死的)
  • 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

适用范围:

  • 需求稳定,变化小且开发人员能够一次性获取全部需求的项目。(要提前规划好进度)
  • 软件开发人员有丰富经验,对于应用领域非常熟悉。(要保证质量)
  • 软件项目本身的风险很低
  • 适用于功能、性能明确、完整无变化的软件系统开发。(和第一点类似)

 

(4) 快速模型

简介:快速建立原型,原型的功能是最终产品功能的子集(也就是部分功能)。用户对该模型所展示的部分功能和性能进行评定与意见,开发人员后续修改直至完成所有功能且获得用户满意。

特点:

  • 线性开发模型,不带反馈环开发的系统能够满足用户真实的需求。

优点:

  • 快速构建,容易修改(从名字就能看出来)
  • 容易适应需求的变化;
  • 用户参与(用户驱动
  • 能够处理模糊需求

缺点:

  • 原型系统的内部结构可能不好;
  • 开发人员需要掌握建立快速原型的开发技术和工具。

适用范围:

  • 适用于需求快速变化(可以后续增加)
  • 小型或中等规模的交互式系统
  • 大型系统的某些部分,例如用户界面
  • 生命周期较短的系统(比较快)
    (5) 增量模型 简介:每次开发一点点,把软件产品作为一系列的增量构件来设计、编码、继承和测试。每个构建分别开发再合在一起。 特点:
  • 系统模块化和构件化(构件驱动

优点:

  • 将待开发的软件系统模块化,可以分批次地提交软件产品。
  • 以构件为单位进行开发,降低了软件开发的风险。
  • 开发顺序灵活

缺点:

  • 新的模块集成时,必须不能破坏已经开发出来的产品。

适用范围:

  • 待开发系统能够被模块化(前提)
  • 软件产品可以分批次交付(看甲方爸爸要求)
  • 软件开发人员对应用领域不熟悉,或一次性开发的难度很大
  • 项目管理人员把握全局的水平不高

 

 

标签:生命周期,模型,导论,软件工程,文档,开发,软件,详解
From: https://www.cnblogs.com/qichengxiaoqi/p/16846748.html

相关文章

  • 算法导论(第24章 单源最短路径)
    目录问题描述最短路径的几个变体最短路径的最优子结构负权重的边环路最短路径的表示松弛操作最短路径和松弛操作的性质本章概要24.1\(Bellman-Ford\)算法24.2有向无环图......
  • 注解用法详解——@SuppressWarnings
    作为一名有强迫症的程序员最见不得的事情之一就是程序里有警告出现,还有一大困扰就是在eclipseIDE中,起码前面有警告时会无法加入断点。一般来讲大多数警告是代码不规范或安......
  • 【转】Android之Spinner下拉列表 使用详解
    原文网址:(56条消息)Android之Spinner使用详解_浪漫主义码农的博客-CSDN博客_androidspinnerSpinner(列表选择框)的基本使用当我们的app需要用户输入数据时,除了让用户自......
  • git checkout命令详解 git checkout feature/test123
    gitcheckout命令详解gitcheckoutfeature/test123//切换到feature/test123分支保证当前分支没有修改提交,否则回提示error:Yourlocalchangestothefollowing......
  • Kafka 架构和原理机制 (图文全面详解)
    目录一:Kafka简介二:Kafka基本架构三:Kafka基本原理四:Zookeeper在kafka的作用五:Kafka的特性六:Kafka的应用场景一:Kafka简介ApacheKafka是分布式发布......
  • nvidia-smi命令详解
    nvidia-smi命令用来查看GPU利用率和显存占用情况。在命令行直接输入nvidia-smi命令,得到如下界面:  界面介绍如下所示:    具体参考自如下博客:https://blog......
  • HashMap详解
    HashMap详解HashMap相关介绍HashMap是Java中的比较常见的集合,主要存放的是键值对,以key-value的形式存储,不是线程安全的。它里面的存储的key和value可以为null值,但是key......
  • matlab最小二乘法数据拟合函数详解
    定义:最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与......
  • [Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例
    目录一、背景知识二、SimPy讲解2.1SimPy概述2.2基本概念2.3一个汽车开开停停的例子2.4在走走停停过程中增加充电过程(过程交互)2.5共享资源三、后续参考链接附录二......
  • 软件工程师的核心竞争力是什么?
    最近星球里有很多同学在讨论职场发展和个人竞争力相关的话题,以前一直觉得大家在职场大多数时候受困于技术成长,但今年逐渐认识到构建自己的核心竞争力才是职场发展的核心。......