5.1 软件工程概述

5.1.1、计算机软件:

(1)系统软件
(2)应用软件
(3)工程、科学软件
(4)嵌入式软件
(5)产品线软件
(6)Web应用
(7)人工智能软件
(8)开放计算
(9)网络资源
(10)开源软件

5.1.2、软件工程基本原理

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

5.1.3、软件生存周期

(1)可行性分析和项目开发计划
(2)需求分析

  • 需求的分类:
    1)功能需求-考虑系统要做什么,在何时做,在何时以及如何修改或升级。
    2)非功能需求:考虑软件开发的技术性指标,例如存储容量限制、执行速度、 响应时间及吞吐率等。
    3)设计约束:除了功能需求和非功能需求以外的需求,例如操作系统限制、开 发语言限制等。

(3)概要设计
(4)详细设计
(5)编码
(6)测试
(7)维护

5.1.4、软件过程 ❤❤❤❤

(1)能力程度模型(CMM)
(2)能力成熟度模型集成(CMMI)

  • 1)阶段式模型

  • 2)连续式模型

5.2 软件过程模型 ❤❤❤❤❤

5.2.1、瀑布模型(Waterfall Model)

瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、运行与维护。
瀑布模型的特点是容易理解,管理成本低,每个阶段都有对应的成果产物,各个阶段有明显的界限划分和顺序要求,一旦发生错误,整个项目推倒重新开始。
适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目

5.2.2、增量模型(incremental Model)

融合了瀑布模型的基本成分和原型实现的迭代特征,可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试。强调每一个增量均发布一个可操作的产品。

5.2.3、演化模型(Evolutionary Model)

(1)原型模型(Prototype Model)
典型的原型开发方法模型。适用于需求不明确的场景,可以帮助用户明确需求。【适用于需求不明确的情况,开发人员快速构造,不能用来指导代码优化】

(2)螺旋模型(Spiral Model)
典型特点是引入了风险分析。结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。属于面向对象开发模型,强调风险引入。适合庞大、复杂且高风险的项目。

5.2.4、喷泉模型(Water Fountain Model)

典型的面向对象的模型。特点是迭代、无间隙。会将软件开发划分为多个阶段,但各个阶段无明显界限,并且可以迭代交叉。【对文档要求高】

5.2.5、基于构件的开发模型(Component-based Development Model)

利用预先包装的构件来构造应用系统,本质是演化模型,以迭代方式来构建软件。
用户至上,严格区分工作阶段,每阶段有任务和结果,强调系统开发过程的整体性和全局性,系统开发过程工程化,文档资料标准化,自顶向下,逐步分解(求精)。

5.2.6、形式化方法模型(Formal Method Model)

建立在严格的数学基础上。

5.2.7、统一过程(UP)模型

典型特点是用例驱动、以架构为中心、迭代和增量。统一过程把一个项目分为四个不同的阶段:
1)构思阶段 :包括用户沟通和计划活动两个方面,强调定义和细化用例,并将其作为主要模型。
2)细化阶段 :包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示。
3)构建阶段 :将设计转化为实现,并进行集成和测试。
4)移交阶段 :将产品发布给用户进行测试评价,并收集用户的意见,之后再次进行迭代修改产品使之完善

5.2.8、敏捷方法

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想。常见的敏捷开发方法有极限编程法、水晶法、并列争球法和自适应软件开发方法。
(1)极限编程(XP)
一种轻量级的开发方法,它提出了
四大价值观:沟通、简单、反馈、勇气。
五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。
十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作 40 小时、现场客户和编码标准

(2)水晶法
强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。

(3)并列争球法
核心是迭代、增量交付,按照 30 天进行迭代开发交付可实际运行的软件。

(4)自适应软件开发
核心是三个非线性的,重叠的开发阶段:猜测、合作、学习。

(5)敏捷统一过程

5.3 需求分析

5.3.1 软件需求

(1)功能需求
(2)性能需求
(3)用户或人的因素
(4)环境需求
(5)界面需求
(6)文档需求
(7)数据需求
(8)资源使用需求
(9)安全保密需求
(10)可靠性要求
(11)软件成本消耗和开发进度需求
(12)其他非功能性的要求

需求的分类:
(1)功能需求-考虑系统要做什么,在何时做,在何时以及如何修改或升级。
(2)非功能需求:考虑软件开发的技术性指标,例如存储容量限制、执行速度、响应时间及吞吐率等。
(3)设计约束:除了功能需求和非功能需求以外的需求,例如操作系统限制、开发语言限制等。

5.3.2、需求分析原则

5.3.3、需求工程

(1)需求获取
(2)需求分析与协商
(3)系统建模
(4)需求规约
(5)需求验证
(6)需求管理

5.4 系统设计❤❤❤❤

常用的设计方法有:
(1)面向数据留的结构化设计方法
(2)面向对象的分析方法

5.4.1 概要设计

  • 设计软件系统总体结构:基本任务还是采用某种设计方法,将一个复杂的系统按功能划分成模块;确定每个模块的功能;确定模块之间的调用关系;确定模块之间的接口,即模块之间传递的信息;评价模块结构的质量。

  • 数据结构及数据库设计:在需求分析阶段对数据的组成、操作约束和数据之间的关系进行了描述,概要设计阶段要加以细化,详细设计阶段则规定具体的实现细节。

  • 编写概要设计文档:概要设计说明书、数据库设计说明书、用户手册以及修订测试计划。

  • 评审:对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计的可行性,关键的处理以及外部接口定义的正确性、有效性、各部分之间的一致性等都一一进行评审。

5.4.2 详细设计

  • 对每个模块进行详细的算法设计,用某种图形、表格和语言等工具将每个模块处理过程的详细算法描述出来。
  • 对模块内的数据结构进行设计。
  • 对数据库进行物理设计,即确定数据库的物理结构。
  • 其他设计:根据软件系统的类型,还可能需要进行代码设计、输入/输出格式设计,用户界面设计等。
  • 编写详细设计说明书。
  • 评审:对处理过程的算法和数据库的物理结构都要评审。

补充3:软件设计的原则:高内聚、低耦合 ❤❤❤❤

内聚性
偶然聚合:模块完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系。
逻辑聚合:模块内部的各个组成在逻辑上具有相似的处理动作,但功能用途上彼此无关。
时间聚合:模块内部的各个组成部分所包含的处理动作必须在同一时间内执行。
过程聚合:模块内部各个组成部分所要完成的动作虽然没有关系,但必须按特定的次序执行。
通信聚合:模块的各个组成部分所完成的动作都使用了同一个数据或产生同一输出数据。
顺序聚合:模块内部的各个部分,前一部分处理动作的最后输出是后一部分处理动作的输入。

耦合性
功能聚合:模块内部各个部分全部属于一个整体,并执行同一功能,且各部分对实现该功能都必不可少
非直接耦合:两个模块之间没有直接关系,它们的联系完全是通过主模块的控制和调用来实现的。
数据耦合:两个模块彼此间通过数据参数交换信息。
标记耦合:一组模块通过参数表传递记录信息,这个记录是某一个数据结构的子结构,而不是简单变量。
控制耦合:两个模块彼此间传递的信息中有控制信息。
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。
公共耦合:两个模块之间通过一个公共的数据区域传递信息。
内容耦合:一个模块需要涉及到另一个模块的内部信息。

补充4:架构风格

数据流风格:批处理序列、管道-过滤器
调用/返回风格:主程序/子程序、面向对象、层次结构(MVC、C/S、B/S)
独立构件风格:进程通信、事件驱动系统(隐式调用)
虚拟机风格:解释器、基于规则的系统
仓库风格:数据库系统、超文本系统、黑板系统

5.5 系统测试

5.5.1 系统测试与调试

  • 测试是为了发现错误而执行程序的过程,成功的测试是发现至今未发现的错误的测试。

  • 测试的基本原则❤❤❤❤❤
    尽早、不断地进行测试;
    程序员避免测试自己设计的程序;
    既要选择有效、合理的数据,也要选择无效、不合理的数据;
    修改后应进行回归测试;
    尚未发现的错误数量与该程序已发现错误数成正比。

5.5.2 传统软件的测试策略

1、单元测试
模块接口、局部数据结构、边界条件、独立的路径、错误处理。
2、集成测试
模块间的接口和通信。
3、确认测试
集中于用户可见的动作和可识别的系统输出
4、系统测试
恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试。

5.5.3 测试面向对象软件

1、单元测试
2、集成测试

5.5.4 测试Web应用

1、质量维度
2、WebAPP测试策略

5.5.5 测试方法

(1)静态测试:桌前检查、代码走查、代码审查。
(2)动态测试
黑盒测试:等价类划分、边界值分析、错误推测、因果图。
白盒测试:语句覆盖、判定覆盖、条件覆盖、条件/判定覆盖、路径覆盖。

  • 常见的黑盒测试方法:❤❤❤
    等价类划分:确定无效与有效等价类,设计用例尽可能多的覆盖有效类,设计用例只覆盖一个无效类。
    边界值分析:处理边界情况时最容易出错,选取的测试数据应该恰好等于、稍小于或稍大于边界值。

  • 常见的白盒测试方法:❤❤❤


补充:各测试阶段的任务:

(1)验收测试:有效性测试、软件配置审查、验收测试。
(2)系统测试:恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试。
(3)集成测试:模块间的接口和通信。
(4)单元测试:模块接口、局部数据结构、边界条件、独立的路径、错误处理。
(5)其他测试:
回归测试(修改软件后进行的测试,防止引入新的错误)。
负载测试(对软件负载能力的测试)。
压力测试(对软件超负荷条件下运行情况的测试)。

5.5.6 调试

调试方法:
(1)试探法
(2)回溯法
(3)对分查找法
(4)归纳法
(4)演绎法

5.6 运行和维护知识

5.6.1 系统转换

(1)直接转换
(2)并行转换
(3)分段转换

5.6.2 系统维护概述❤❤❤

维护性指标❤❤❤:易分析性、稳定性、易测试性、易改变性。

维护类型❤❤❤
1、更正性维护:针对真实存在并已经发生的错误进行的维护行为。
2、预防性维护:针对真实存在但还未发生的错误进行的维护。
3、适应性维护:指使应用软件适应信息技术变化和管理需求变化而进行的修改。企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。
4、完善性维护:扩充功能和改善性能而进行的修改。对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。

5.7 软件项目管理

5.7.1 软件项目管理涉及的范围

1、人员
2、产品
3、过程
4、项目

5.7.2 软件项目估算

软件项目估算
1、成本估算方法
2、cocomo估算模型
3、cocomoII 估算模型
估算选择有:功能点、对象点、功能点、代码、
4、Putnam估算模型

5.7.3 进度安排: Gantt 图与 Pert 图❤❤❤❤❤

1)Gantt 图:清晰描述每个任务的开始,结束,任务之间的并行关系,但是不能放映依赖关系,难以确定项目关键所在。

2)Pert图:Pert图给出每个任务的开始时间,结束时间和所需时间,不能反映任务之间的并行关系。

1、甘特图能够清晰描述每个任务的开始/结束时间及各任务之间的并行性,也可以动态地反映项目的开发进展情况,但难以反映多个任务之间存在的逻辑关系;
PERT 利用项目的网络图和各活动所需时间的估计值(通过加权平均得到的)去计算项目总时间,强调任务之间的先后关系,但不能反映任务之间的并行性,以及项目的当前进展情况。
2、关键路径法是图中源点至汇点的最长路径,关键路径的时间称之为项目工期,也表述为项目完成所需的最少时间。
3、总时差:在不延误总工期的前提下,该活动的机动时间。一般在图中,以最晚结束时间减去最早结束时间求取,或以最晚开始时间减去最早开始时间求取。
4、对于网络图我们一般采用关键路径分析法处理,关键路径法是利用进度模型时使用的一种进度网络分析技术。沿着项目进度网络路线进行正向与反向分析,从而计算出所有计划活动理论上的最早开始与完成日期、最迟开始与完成日期,不考虑任何资源限制。

5.7.4 软件项目的组织

项目组织原则:
(1)尽早落实责任
(2)减少交流接口
(3)责权均衡

1、组织结构模式
(1)按项目划分的模式
(2)按职能划分的模式
(3)矩阵模式

2、程序设计小组的组织方式
1)主程序员制小组

n 个成员小组,1 个主程序员,普通程序员只需要与主程序员沟通。
沟通路径:n-1。

2)民主制小组
3)层次制小组

无主程序员:n 个成员的项目小组,相互之间都可以沟通。
沟通路径:n(n-1)/2。

5.7.5 软件配置管理

1、基线
2、软件配置项
3、版本控制
4、变更控制
配置数据库一般包括开发库,受控库,和产品库

5.7.6 风险管理❤❤❤❤

风险特点:不确定性和损失。
1、风险识别
项目风险涉及到各种形式的预算、进度、人员、资源以及客户相关的问题,并且可能
导致项目损失。
技术风险涉及到技术相关的可能会导致项目损失的问题。
商业风险与市场因素相关。
社会风险涉及到政策、法规等因素。

2、风险预测
发生概率、产生后果

3、风险评估
定义风险参照标准
风险曝光度(RiskExposure)=错误出现率(风险出现率) X 错误造成损失(风险损失)。

4、风险控制
建立处理风险策略:考虑风险避免、风险监控、风险管理等意外事件计划

5.8 软件质量

5.8.1 软件质量特性❤❤❤❤

1、功能性:适合性、准确性、互操作性、安全保密性。
2、可靠性:成熟性、容错性、易恢复性。
3、易用性:易理解性、易学性、易操作性、吸引性。
4、效率:时间特性、资源利用性。
5、维护性:易分析性、稳定性、易测试性、易改变性。
6、可移植性:适应性、易安装性、共存性、易替换性。

5.8.2 软件质量保证

5.8.3 软件评审

5.8.4 软件容错技术

主要手段是冗余
(1)机构冗余:静态冗余、动态冗余、混合冗余
(2)信息冗余
(3)事件冗余
(4)冗余附加技术

5.9 软件度量

5.9.1 软件度量分类

1、面对规模、面对功能和面向人的度量
2、分为生产率度量、质量度量和技术度量

5.9.2 软件复杂性度量

1、程序复杂性度量原则
2、McCabe度量法❤❤❤❤

1、McCabe 复杂度计算公式:V(G)=m-n+2,其中 m 是有向弧的条数,n 是结点数
对于伪代码可以先转换为程序流程图,对程序流程图可以最终转换为结点图处理,转换时注意将交点的地方标注为新的结点,以最终的结点图带入公式结算其McCabe 复杂度。

5.10 软件工具与软件开发环境

5.10.1 软件工具

1、开发工具:需求分析工具、设计工具、编码与排错工具、测试工具
2、软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具
3、软件管理和软件支持工具;

5.10.2 软件开发环境

特征:环境服务是集成的、环境应支持小组工作方式并为其提供配置管理、环境服务可用于支持各种软件开发活动。

软考-软件设计师 - 第5章 软件工程基础知识【附补充常考知识点】相关推荐

  1. 软件设计师(五)——软件工程基础知识

    软件工程基础知识 软件工程基础知识部分分为五部分,如下图所示: 1. 软件工程概述 软件工程 1)含义:指使用计算机科学.数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程 2)目的:提高 ...

  2. 软考-软件设计师 - 第9章 数据库技术基础【附补充常考知识点】

    9.1 基本概念 9.1.1 数据库与数据库系统 数据库系统是才采用数据库技术,有组织的.动态的存储大量相关数据,方便多用户访问的计算机系统.由数据库.硬件.软件.人组成. 9.1.2 数据库管理系统 ...

  3. 软考-软件设计师 笔记十(软件工程)

    本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...

  4. 软考-软件设计师 笔记九(多媒体基础)

    本栏博客目录 软考-软件设计师 笔记一(计算机组成与体系结构) 软考-软件设计师 笔记二(操作系统基本原理) 软考-软件设计师 笔记三(数据库系统) 软考-软件设计师 笔记四(计算机网络) 软考-软件 ...

  5. 软考 程序员教程-第二章 操作系统基础知识

    软考 程序员教程-第二章 操作系统基础知识 第二章 操作系统基础知识 2.1.操作系统概述(第四版教程P44) 操作系统的4个特征:并发性.共享性.虚拟性.不确定性. 操作系统的5个功能:处理机管理. ...

  6. 软考 程序员教程-第一章 计算机系统基础知识

    软考 程序员教程-第一章 计算机系统基础知识 为了督促自己学习,告别懒惰,在此先给自己定个小目标,请大家监督哟! 目标:一个月内过一遍<程序员教程>,下一个月开始上真题. 简单看了下,我在 ...

  7. 软件测试之第六章 网络基础知识

    第六章 网络基础知识 一.计算机网络基本概念与分类 1 计算机网络的定义 计算机网络是在网络协议的控制下,通过通信设备和线路将分布在不同地理位置,且具有独立功能的多个计算机系统连接起来,通过网络操作系 ...

  8. 软考-软件设计师 - 第11章 标准化和软件知识产权基础知识【附补充常考知识点】

    11.1 标准化基础知识 11.1.1 基本概念 1.标准分类: 1)根据适用范围分类: (1)国际标准 (2)国家标准 (3)区域标准 (4)行业标准 (5)企业标准 (6)项目规范 2)根据标准的 ...

  9. 软件设计师-10.网络与信息安全基础知识

    10.1 网络概述 10.1.1 网络定义与功能 利用通信线路物理地将不同的终端连接起来,按照网络协议相互通信,以共享软件.硬件和数据资源为目标的系统. 数据通信:在计算机之间传送各种信息 资源共享: ...

最新文章

  1. Day01-图像处理原理与深度学习入门
  2. Python之深入解析一行代码计算每个省面积的神器Geopandas
  3. 个人Wordpress站点设置Windows Live writer
  4. c位边上还有什么位_【一点资讯】那些有趣而搞笑的GIF动画:为让出c位,站边上拍照还是谦虚礼貌的 www.yidianzixun.com...
  5. 小程序向java后台发送图片_微信小程序在后台如何将二进制流转换成图片
  6. 将 nginx 安装成 windows 的方法
  7. 面向对象程序设计课第四次作业
  8. 一位程序猿面试蚂蚁金服后端的经验总结!
  9. NOIP2016DAY1题解
  10. 【Scratch案例实操】Scratch萌宠运动会 scratch编程案例教学 scratch创意编程 少儿编程教案
  11. 于的繁体字有几种写法_写字繁体字有几种写法 , 辈 字 用繁体字有几种写法?...
  12. 【Java核心技术卷】谈谈对Java平台的理解
  13. 数据库系统和数据库管理系统的定义以及数据库管理系统的作用
  14. kafka集群搭建详细步骤
  15. matlab支持向量机预测电机故障,关于支持向量机(SVM)的一个简单应用实例及matlab代码...
  16. 嵌入式开发需要学习哪些东西
  17. 【Aladdin-Unity3D-Shader编程】之六-模型实时阴影
  18. php extraxt,php中关于extract方法的使用和建议
  19. Android 7.0修改分辨率,三星S7升级Android7.0 可调节屏幕分辨率
  20. matlab模拟超声波信号_MATLAB模拟超声波声速测量实验

热门文章

  1. TL-WR842无线桥接(WDS)方法及案例
  2. SourceInsight使用详解
  3. nginx File not found.
  4. P1542 包裹快递 㵘淼沝水题解
  5. HTML常用鼠标指针样式设置
  6. 互联网行业中,哪些岗位越老越吃香?
  7. Java 浅谈String类的内存分配
  8. 【教程】Windows下Miniconda+Pytorch+Pycharm开发环境搭建指南
  9. 分辨mqtt在线与离线_【案例】某区VOC在线监测系统实施案例
  10. Java 静态方法读取 yml