• 软件工程复习


    文章目录

    (一)软件

    软件发展三阶段

    image-20221118171426715

    软件的概念

    软件=程序+数据+文档

    image-20221118171510709

    什么是软件危机

    在计算机软件开发和维护过程中所遇到的一系列严重问题。

    内容包括:

    如何开发软件,以满足对软件日益增长的需求
    如何维护数量不断膨胀的已有软件

    软件危机的表现:

    对软件开发成本和进度估算不准确
    用户对已完成软件不满意
    软件质量不可靠
    软件不可维护
    没有适当文档资料
    软件成本在计算机系统中所占比例逐年上升
    软件开发生产率低
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    估不准、不满意、靠不住、难维护、缺文档、成本高、需求大

    软件危机的原因

    image-20221118171953611

    (4)消除软件危机的途径:

    1. 1、对计算机软件应该有正确认识
    2. 2、吸取借鉴人类长期从事各种工程项目积累的原理、概念、技术和方法
    3. 3、积极开发和使用计算机辅助开发工具
    4. 4、探索更好更有效的管理措施和手段对开发过程进行控制和管理

    软件工程

    软件工程定义(要背)

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

    简称:

    软件工程是从管理和技术两方面研究如何更好地开发和维护软件的一门学科。

    软件工程的基本原理

    1. 按软件生存期分阶段制定计划并认真实施
    2. 坚持进行阶段评审
    3. 坚持严格的产品控制
    4. 使用现代程序设计技术
    5. 结果能够得到清楚的审查
    6. 用人少而精
    7. 承认不断改进软件工程实践的必要性

    分阶段、坚评审、严品控、用现技、果清查、少而精、要改进

    软件工程方法学

    定义

    把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。

    要素

    软件工程方法学包括三个要素:方法、工具和过程。

    • 方法:完成软件开发各项任务的技术方法,回答“怎么做”
    • 工具:为运用方法提供的自动或半自动软件工程支撑环境
    • 过程:是为了获得高质量软件所需要完成的一系列任务框架,回答"何时做”

    (⑤)软件工程方法学分类:

    传统方法学(生命周期方法学):

    ◆采用结构化技术完成软件开发各项任务
    ◆把软件生命周期的全过程依次划分为若干阶段
    ◆每个阶段开始和结束有严格标准
    ◆每个阶段结束后进行严格审查

    面向对象方法学:

    ◆把对象作为融合了数据及在数据上的操作行为的统一的软件构件
    ◆把所有对象划分为类
    ◆按照父类与子类关系,把若干类组成层次结构的系统
    ◆对象彼此间仅能通过发送消息互相联系

    软件生命周期

    定义

    把软件的开发分成软件定义、软件开发、运行维护三个时期。一个软件从立项起,到废弃不用,统称为软件生命周期。

    image-20221118173023328

    各时期文档

    image-20221118195223954

    软件模型

    传统瀑布模型

    image-20221118195337894

    推迟编码的实现(提前逻辑设计); 瀑布模型是文档驱动的模型

    优点

    1、瀑布模型的优点(强迫开发人员使用规范的方法,严格规定了每个阶段必须提交的文档,要求每个阶段)
    可以强迫开发人员采用规范的方法:
    严格规定了每个阶段必须提交的文档;
    每个阶段的开发质量得到保障。

    缺点

    在软件开发的初期阶段就要求做出正确、全面完整的需求分析
    **(不适应需求的变化)**在需求分析阶段,当需求确定后,无法及时验证需求是否正确、完整。
    **(开发风险大)**以整体开发的瀑布模型,由于不支持产品的演化,缺乏灵活性,对开发过程中很难发现的错误,只有在最终产品运行时才能暴露出来,从而使软件产品难以维护。(由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。)

    开发周期长)用户可能需要较长等待时间来获得一个可供使用的系统,

    改进的瀑布模型

    image-20221118195825248

    实际的瀑布模型是带"反馈环"的。如图所示(图中实线箭头表示开发过程,虚线箭头表示维护过程),当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品后再回来继续完成后面阶段的任务

    快速原型模型

    image-20221118200728164

    快速建立可运行的程序,它完成的功能往往是最终产品功能的一个子集。

    快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的

    一旦需求确定了,原型将被抛弃

    若原型未满足需求说明的要求,说明对需求说明存在不一致的理解或实现方案不够合理,根据明确的要求迅速修改原型

    image-20221118200843699

    优点

    原型系统已经得到用户验证。

    缺点

    产品质量低

    快速建立起来的系统结构加上连续的修改可能会导致产品质量低下

    限制开发人员创新

    用前提是要有一个展示性的产品原型,一定程度上可能会限制开发人员的创新

    增量模型

    image-20221118201722373

    把软件产品分解成增量构件时,唯一必须遵守的约束条件是,当把新构件集成到现有构件中时,所形成的产品必须是可测试的

    瀑布模型或快速原型模型目标是一次就把一个满足所有需求的产品提交给用户
    
    增量模型把整个软件产品分解成许多个增量构件,分批地逐步向用户提交产品,把瀑布模型的顺序特征与快速原型法的迭代特征相结合
    
    • 1
    • 2
    • 3

    风险更大的增量模型

    image-20221118201841345

    优点
    • 能在较短的时间内向用户提交可完成部分工作的产品
    • 将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展
    • 以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
    • 开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整
    缺点
    • 容易退化为边做边改模型,从而是软件过程的控制失去整体性
    • 软件必须具备开放式的体系结构,以便逐渐并入新构件

    螺旋模型

    image-20221118203246445

    在每个阶段之前都增加了风险分析过程的快速原型模型。看作增加了风险分析的快速原型模型。

    靠风险驱动

    image-20221118203154717

    优点:
    • 把软件质量作为软件开发目标
    • 减少测试,每个阶段进行风险分析
    缺点:
    • 风险估计困难
    • 风险估计出错后会造成重大损失
    • 过多的迭代次数会增加开发成本,延迟提交时间

    喷泉模型

    image-20221118203618785

    典型的面向对象软件过程模型。体现迭代和无缝的特性。

    以用户需求为动力,以对象为驱动的模型,

    图中代表不同阶段的圆圈相互重叠,这说明表示两个活动之间存在交迭;而面向对象的方法在概念和表示方式上的一致性,保证了在各项开发活动之间的无缝过渡

    事实上,用面向对象方法开发软件时,在分析、设计和编码等项开发活动之间并不存在明显的边界。

    图中较小的圆圈代表维护,圆圈较小象征着采用了面向对象范型之后维护时间缩短了。

    优点

    该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是
    可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

    缺点

    由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此
    不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可
    能随时加入各种信息、需求与资料的情况。

    (二)可行性研究

    定义

    可行性研究实质上是要进行一次大大压缩化简了的系统分析和设计过程,也就是在较高层次上以抽象的方式进行的系统分析和设计的过程。

    目的

    用最小的代价在尽可能短的时间内(5%-- 10% )确定问题能否被解决。(这楼到底能不能盖)

    可行性研究方向:

    • 1.技术可行性

      使用现有的技术能实现这个系统吗?

    • 2.经济可行性

      这个系统的经济效益能超过它的开发成本吗?

    • 3.操作可行性

      系统的操作方式在这个用户组织内行得通吗?

    • 4.社会可行性

      会不会违背道德、伦理、法律?

    可行性研究过程

    image-20221118204601079

    导出系统逻辑模型用到的工具

    image-20221118204659082

    系统流程图

    image-20221118204919692

    (不要求会画)

    数据流图

    要求会画

    数据字典

    定义

    是关于数据的信息集合,即对数据流图中包含的所有元素定义的集合。

    内容:

    数据流、数据流分量(数据元素)、数据存储、处理。

    数据元素组成数据的方式

    由数据元素组成数居的方式:顺序、选择、重复、可选
    符号表示:= + [ ] { } ( )
    等价 连接 选一 重复 可选

    例题

    北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第一位数字不是0。校外电话又分为本市电话和外地电话两类。拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第一位不是0),若是外地电话则拨3位区码后再拨8位电话号码(第一位不是0)。

    image-20221118205940602

    成本效益分析 (了解)

    目的

    从经济角度分祈新系统的开发是否能盈利,帮助使用部门正确故出是否投资的决定。

    成本估计
    代码行技术

    软件成本三每行代码的平均成本 * 源代码行数

    任多分解技术:

    按开发阶段将系统划分成任务
    每个任务的成本 =人力*人平均工资
    软件成本= ∑ 独立任务的成本 (求和)

    成本/效益分析步骤

    1.估计开发成本、运行费用和新系统带来的经济效益。
    2.比较新系统的开发成本和经济效益。

    成本/效益分析的方法

    **1.货币的时间价值F=P(1+i) ** 重要
    2.投资回收期
    3.纯收入
    4.投资回收率

    (三)需求分析

    内容

    需求内容:
    1.功能需求
    2.性能需求
    3.可靠性需求(与可用性区分)
    4.出错处理需求
    5.接口需求
    6.约束
    7.逆向需求〔系统不该做什么)
    8.未来可能提出的要求
    速记:功性靠出口

    与用户沟通获取需求的方法

    访谈
    面向数据流自顶向下求精
    简易的应用规格说明技术
    快速建立软件原型

    模型分类:

    数据模型(实体-联系图 E_R):描绘数据对象及数据对象之间的关系。
    功能模型(数据流图):描绘数据在系统中流动时被处理的逻辑过程,指明系统具有的变换数据的功能。
    行为模型:(状态转换图):描绘系统的各种行为模式在不同状态间转换的方式。

    要求会画

    验证软件需求

    从哪些方面验证

    一致性:所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。
    完整性:需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。
    现实性:指定的需求应该能用现有的硬件和软件技术可以实现。
    有效性:必须证明需求是正确有效的,确实能解决用户面对的问题。

    用于需求分析的软件工具

    PSL/PSA问题陈述语言/问题陈述分析程序)系统**

    (五)总体设计

    任务

    • 确定系统中每个程序由哪些模块组成以及这些模块相互间的关系。
    • 划分出物理元素。包括程序、文件、数据库、文档等。

    设计过程

    设计过程包括系统设计阶段和结构设计阶段

    image-20221118211851288

    image-20221118211915492

    设计原理

    模块化

    模块:能够单独命名,由边界元素限定的程序元素的序列,是构成程序的基本构件。

    模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。

    抽象

    抽出事务的本质特性而暂时不考虑它们的细节。

    逐步求精

    逐步揭露出底层细节。Ailler法则:注意力集中在(7±2)上

    信息隐藏与局部化

    信息隐藏:指一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。主要是指模块的实现细节。
    局部化:指把一些关系密切的软件元素物理地放得彼此靠近,它有助于实现信息隐藏。

    模块独立

    模块独立性:是模块化、抽象、信息隐蔽和局部化概念的直接结果。
    模块独立是好设计的关键,设计是决定软件质量的关键环节。
    度量标准:耦合、内聚

    耦合

    定义

    是对一个软件结构内不周模块之间互连程序的度量。

    耦合强度取决于模块接口的复杂程度、通过接口的数据等
    耦合性越高,模块独立性越弱。

    耦合分类(程度从低->高):

    无直接耦合=》数据耦合=》标记耦合(特征耦合)=》控制耦合=》外部耦合=》公共耦合

    内聚

    定义

    是用来度量一模块内部各个元素彼此结合的紧密程度的。

    内聚分类(程度从低-≥高):

    偶然内聚=》逻辑内聚=》时间内聚=》过程内聚=》通信内聚=》顺序内聚=》功能内聚

    同其它模块强耦合的模块意味着弱内聚;强内野模块意味着与其它模块间松散耦合
    软件设计目标高内聚、低耦合

    启发规则

    • 改进软件结构提高模块独立性

    • ·模块规模应该适中

      ·深度、宽度、扇入和扇出应适当

    • 深度:表示软件结构中控制的层数。

    • 宽度:软件结构内同一个层次上的模块总数的最大值。

    • 扇出:一个模块直接控制(调用)的模块数目,扇出过大意味着模块过分复杂。一般一个设计的好的典型系统的平均扇出是3或4,扇出的上限是5到9.

    • 扇入:指有多少上级模块调用它,扇入大说明上级模块共享该模块的数目多。

      好的软件结构顶层扇出比较高,中层扇出比较少,底层扇入到公共的实用模块中,即底层模块有高扇入。

    • 模块的作用域应该在控制域之内

      作用域:指受该模块内一个判定影响的所有模块的集合。

      ​ 控制域:是这个模块本身以及所有直接或间接从属于它的模块的集合。

    • 力争降低模块接口的复杂程度

    • 设计单入口单出口的模块

    • ·模块功能应该可以预测

    层次图

    image-20221118212854539

    HIPO图

    image-20221118212914371

    结构图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UjsWicrM-1668871871530)(C:\Users\User\AppData\Roaming\Typora\typora-user-images\image-20221118212951775.png)]

    image-20221118213037253

    数据流分类

    变换流

    image-20221118213213104

    事务流

    image-20221118213226696

    (六)详细设计

    目的

    确定怎样具体地实现所要求的系统。得出对目标的精确描述。

    任务

    • 过程设计:即设计软件体系结构中所包含的每个模块的实现算法。
    • 数据设计:设计软件数据结构。
    • 接口设计:设计软件内部各模块之间的接口

    结构程序设计:

    只用三种基本的控制结构就能实现任何单入口单出口的程序。

    三种基本控制结构:

    选择结构(a)、顺序结构b)、循环结构©

    人机界面设计:

    常见问题:
    1、系统响应时间 (重要属性:长度(响应时间)和易变性)
    2、用户帮助设施
    3、出错信息处理
    4、命令交互

    过程设计的常见工具:

    程序流程图
    盒图
    PAD图
    判定表/树
    过程设计语言(伪码PDL)

    盒图

    image-20221118214219649

    PAD图

    image-20221118214339197

    过程设计语言

    过程复杂度的度量

    image-20221118214531669

    (七)实现

    定义

    软件生命周期中的编码和测试统称为实现。

    产出文档:编码产生《程序清单》

    软件测试的自标:

    软件测试是为了发现错误而执行程序的过程。
    编码阶段(单元测试)
    测试阶段(各种综贪测试)

    软件测试准则:

    (1)所有测试都应该能追溯到用户需求。
    (2)应该远在测试之前就制定测试计划。
    (3)Pareto原理:80%的错误是由20%的模块造成的。
    (4)应该从“小规模”测试开始,并逐步进行大规模测试。
    (5)穷举测试是不可能的;测试只能证明程序有错误,但不能证明程序无错误。
    (6)为了尽最大可能的发现错误,应该由独立的第三方担任测试工作。

    软件测试的方法:

    黑盒测试法:

    将软件看作一个黑盒子,不考虑其内部结构和处理过程,只按照规格说明书的规定
    测试软件是否能够正确接收输入数据,产生正确的输出数据。即测试程序是否正确
    的实现了其功能。又称为“功能测试”。

    白盒测试法:

    完全知道程序的内部结构和处理算法,因此可以将程序看作一个透明的白盒子,根
    据程序内部的逻辑结构测试程序内部的主要执行通路是否能够按照预定的要求正确
    工作。又称“结构测试”。

    软件测试的步骤

    • 单元测试(模块测试):将每个模块作为一个单独的实体进行测试。发现的错误编码和详细设计阶段的错误(常用白盒测试)

    • 子系统测试:将模块集成为一个子系统进行测试。着重测试模块的接口。

    • 系统测试:将子系统组装为一个完整的系统进行测试。

    • 子系统测试和系统测试总称为**“集成测试”**。

    • 验收测试(确认测试):在用户的参与下,往往使用实际的数据进行的测试。发现需求说明中的错误

    • 平行运行:

      同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。

    单元测试

    测试依据:

    详细设计文档

    测试技术

    (设计测试用例的方法):白盒测试技术

    着重点

    1.模块接口
    2.局部数据结构
    3.重要的执行通路
    4.出错处理通路
    5.边界条件

    集成测试

    目标:

    发现与接口有关的问题

    实施者:

    独立的测试机构或第三方人员

    集成方法

    image-20221118220250271

    自顶向下与自底向上相结合的方法:

    上层模块使用自顶向下方法
    下层模块采用自底向上方法

    回归测试

    重新执行已经做过测试的某个子集,以保证程序的变化没有带来非预
    期的副作用。

    验收测试

    又称为确认测试,目标是验证软件的有效性。

    验证

    为了保证软件正确的实现了某个特定要求而进行的一系列活动。

    确认:

    为了保证软件确实满足了用户需求而进行的一系列活动。

    (1)Apha测试:用户在开发者的场所,在开发者指导下进行。
    (2)Beta测试:,用户在用户场所进行,遇到问题报告给并发者,开发者进
    行修改。

    白盒测试

    image-20221119225627617

    控制结构

    选择,顺序,条件

    黑盒测试

    image-20221118220716952

    调试

    image-20221118220745426

    软件可靠性

    软件可靠性:

    程序在给定时间间隔内,按照规格说明书的规定成功运行的概率

    软件可用性

    程序在给定时间点,按照规格说明书的规定成功运行的概率


    (八)维护

    定义

    是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。

    分类

    • 改正性维护:诊断和改正错误的过程(17%~21%).
    • 适应性维护:为了和变化了的环境适当地配合而进行的修改软件的活动(18%~25%).
    • 完善性维护:为了满足在用户提出的增加新功能或修改已有功能的要求和一般性的改进要求(50~66%).
    • 预防性维护:(4%)

    结构化维护和非结构化维护

    1.非结构化维护

    需要付出很大的代价(浪费精力并且遭受挫折的打击),这种
    方式是因为设有使用良好定义的方法学开发出来的软件的必
    然结果。(由于没有文档,代价大)

    2.结构性维护(重点)

    有一个完整的软件配置存在,那么维护工作从评价设计文档开
    始,确定软件重要的结构特点、性能特点以及接口特点。
    作用:能减少精力的浪费,并且能提高维护的总体质量。

    决定软件可维护性的因素(以下要牢记)

    1.可理解性

    ①定义
    软件可理解性表现为外来读者理解软件的结构、功能、接
    口和内部处理过程的难易程度。
    ②影响因素
    ā.模块化(模块结构良好,高内聚,松耦合);b.详细的设
    计文档;c.结构化设计;d.程序内部的文档;e高级程序设
    计语言等。

    2.可测试性

    诊断和测试的容易程度取决于软件【容易理解】的程度。
    对于程序模块来说,可以用程序复杂度来度量它的可测试
    性。模块的环形复杂度越大,可执行的路径就越多。
    因此,全面测试它的难度就越高。

    3.可修改性

    和启发原则直接有关。耦合、内聚、信息隐藏、局部化、控
    制域与作用域的关系等,都影响软件的可修改性。

    4.可移植性

    软件可移植性是指把程序从一种计算环境(硬件配置和操
    作系统)转移到另一种计算环境的难易程度。

    5.可重用性

    重用是指同一事物不做修改或销加改动就在不同环境中多
    次重复使用。
    可重用构件越多,软件的可靠性越高,改正性维护需求就
    越少。

    维护中文档的重要性

    文档是影响软件可维护性的【决定因素】
    软件系统的文档可以分为【用户文档】和【系统文档】两类。

    【用户文档】

    主要描述系统功能和使用方法,并不关系这些功
    能是怎样实现的。

    【系统文档】

    描述系统设计、实现和测试等各方面的内容

    (九)面向对象

    面向对象方法学是啥

    面向对象=对象+类+继承+消息(选、填)
    对象抽象出共同特征就是类,类实例就是对象
    继承是继承父类原本就拥有的属性和功能。
    消息是指对象之间靠消息沟通。

    面向对象方法学的优点:

    1、和人们认识世界的角度一致
    2、稳定性好
    (1)为什么传统的不好?
    一–因为传统的软件结构紧密,需求变化时会引起整体修改
    (2)为什么面向对象就好?
    ----可以灵活应对需求变化,软件整体不会发生太大修改
    3、可重用性好
    4、较易开发大型软件产品(可以把大软件拆成多个小的
    5、可维护性好

    其他概念(重要):

    • 封装:封装就是信息隐藏,通过封装对外界隐藏了对象的实现细节。
    • 继承:继承是指能够直接获得已有的性质和特征,而不必重复定义他们。
    • 多态:多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。

    面向对象的3种模型:

    • 对象模型:定义了做事情的实体。(类图)
    • 功能模型:明确规定了什么时候做。(用例图)
    • 动态模型:指明了系统应该“做什么”。(时序图、活动图、状态图
    • 速记:对动功

    传统的三个模型:

    • 功能模型一一E-R图
    • 数据模型一一数据流图(DFD)
    • 行为模型一一状态转换图

    (十面向对象分析)

    主要产出:

    SRS(需求规格说明书)
    OOA (面向对象分析)的关键是识别出问题域内的类知时象。

    面向对象建模得到的模型包含3个要素:

    静态模型(对象模型)
    交互次序(动态模型)
    数据变换(功能摸型)

    (十一十二)面向对象设计+实现

    设计

    传统的设计:

    总体设计+详细设计

    OO的设计:

    系统设计+对象设计
    两者几平可以类比了解,约等但不完全等。

    OO的设计准则:

    1、模块化
    2、抽象
    3、信息隐藏
    4、强内聚+松耦合
    5、可重用

    传统的没有抽象和可重用

    启发原则:

    1、设计结果应该清晰易懂
    2、一般-特殊结构的深度应适当

    软件重用:

    重用也叫再用或复用,是指同一事物不做隆改或稍加改动
    就多次重复使用。
    软件成分的重用级别(3个级别)
    (1)代码重用
    (2)设计结果重用
    (3)分析结果重用

    实现:

    编玛+测试
    编码就是编码,和传统的知识点一样

    测试是从小型测试开始逐步过渡到大型测试
    测试步骤也是:
    单元测试(白盒)—集成测试—确认测试(黑盒)

    第十三章:软件项目管理

    软件项目管理先于任何技术活动,贯穿软件生命周期始终。

    估算软件规模的方法:

    1、代码行技术(数代码)

    有历史数据做支撑可以大致估算出规模
    肯定是不可靠的,因为每种语言的代码行数不同

    2、功能点技术

    把项目划分成多个功能点,分开计算进度计划

    进度常用的图形工具:

    1、Gantt图:应用广泛的工具
    缺点:

    不清楚彼此间的依赖关系;不清楚哪个是主攻任务,造成潜力的浪费

    2、工程网络图

    质量保证:

    定义

    软件质量是软件与明确地和隐含地定义的需求相一致的程度”软件满足明确描述的需求,但不满足【隐含需求】,那么软件的质量
    是值得怀疑的。

    软件配置管理SCM

    定义

    软件配置管理是在软件的整个生命周期内管理变化的一组活动。说白了就是管理SC1(软件配置项目)变化的一组活动。
    SC=程序+文档+数据

    内容:

    1、标识变化

    2、控制变化
    3、确保适当的实现了变化
    4、向需要知道这类信息的人报告变化

    能力成熟度模型CM

    作用:

    1、为软件项目招标做依据。
    2、改进自身软件过程活动。

    成熟度等级:

    初始级、可重复级、已定义级、已管理级、优化级
    速记:初重定管优(先可后已)
    出:

    SRS(需求规格说明书)
    OOA (面向对象分析)的关键是识别出问题域内的类知时象。

    面向对象建模得到的模型包含3个要素:

    静态模型(对象模型)
    交互次序(动态模型)
    数据变换(功能摸型)

    (十一十二)面向对象设计+实现

    设计

    传统的设计:

    总体设计+详细设计

    OO的设计:

    系统设计+对象设计
    两者几平可以类比了解,约等但不完全等。

    OO的设计准则:

    1、模块化
    2、抽象
    3、信息隐藏
    4、强内聚+松耦合
    5、可重用

    传统的没有抽象和可重用

    启发原则:

    1、设计结果应该清晰易懂
    2、一般-特殊结构的深度应适当

    软件重用:

    重用也叫再用或复用,是指同一事物不做隆改或稍加改动
    就多次重复使用。
    软件成分的重用级别(3个级别)
    (1)代码重用
    (2)设计结果重用
    (3)分析结果重用

    实现:

    编玛+测试
    编码就是编码,和传统的知识点一样

    测试是从小型测试开始逐步过渡到大型测试
    测试步骤也是:
    单元测试(白盒)—集成测试—确认测试(黑盒)

    第十三章:软件项目管理

    软件项目管理先于任何技术活动,贯穿软件生命周期始终。

    估算软件规模的方法:

    1、代码行技术(数代码)

    有历史数据做支撑可以大致估算出规模
    肯定是不可靠的,因为每种语言的代码行数不同

    2、功能点技术

    把项目划分成多个功能点,分开计算进度计划

    进度常用的图形工具:

    1、Gantt图:应用广泛的工具
    缺点:

    不清楚彼此间的依赖关系;不清楚哪个是主攻任务,造成潜力的浪费

    2、工程网络图

    质量保证:

    定义

    软件质量是软件与明确地和隐含地定义的需求相一致的程度”软件满足明确描述的需求,但不满足【隐含需求】,那么软件的质量
    是值得怀疑的。

    软件配置管理SCM

    定义

    软件配置管理是在软件的整个生命周期内管理变化的一组活动。说白了就是管理SC1(软件配置项目)变化的一组活动。
    SC=程序+文档+数据

    内容:

    1、标识变化

    2、控制变化
    3、确保适当的实现了变化
    4、向需要知道这类信息的人报告变化

    能力成熟度模型CM

    作用:

    1、为软件项目招标做依据。
    2、改进自身软件过程活动。

    成熟度等级:

    初始级、可重复级、已定义级、已管理级、优化级
    速记:初重定管优(先可后已)

  • 相关阅读:
    linux安装scrcpy最新版本
    Sumo中Traci.trafficlight详解(上)
    【python】python制作 连连看 游戏脚本(四)
    Jenkins 如何玩转接口自动化测试?
    Javaweb--CSS
    Android 修改状态栏电池图标颜色
    Spring-事务
    netty 客户端 实现断开重连
    改变工作目录和根目录
    vscode软件的code alignment插件使用
  • 原文地址:https://blog.csdn.net/qq_55125921/article/details/127943990