西电软工概论复习

写在前面

hhhh,说起来22级也是小白鼠,软工概论又换成中文课本,英文卷子也没有参考性了,但是整体来说这门课也不是很难,期末突击记忆了一下老师也给了90+,全是主观题,主要在于理解。印象里面考了几个画图题,用例图顺序图类图啊啥的记一记,还有软件体系结构风格,管道过滤器什么的~还记得考了一下高内聚度低耦合度啥的,但是当时老师并没有非常仔细地讲,蹭别的班复习课听到的,期末也考出来了,会在本文合适的地方放出

这篇复习主要根据课本顺序进行的,可能存在细微的调整,有些概念大致给出

ps:这是放假在家写的,没有带课本,用自己之前总结的知识点笔记,如有误,请指正~

目录

一、一些初步小概念

二、软件及其特点

三、软件工程

四、软件需求

五、获取软件需求

六、分析软件需求

七、软件设计基础

八、用户界面设计

九、软件体系结构设计

十、软件详细设计

十一、软件实现与代码编写

1.软件实现基础

2.编写代码

十二、软件测试

十三、软件部署与演化

十四、软件维护与演化

十五、软件项目管理


一、一些初步小概念

程序是由程序设计语言所描述的,能为计算机所理解和处理的一组语句序列。

程序代码可表现为两种形式:①源代码 ②可执行代码/目标代码

大致流程:编码->源程序代码->编译->可执行的目标代码->部署和运行

程序的外在质量:用户视点(正确性、友好性、高效性、易用性、可靠性)

           内在质量:程序员视点(可理解性、可维护性、可重用性)

好吧以上其实都不重要

二、软件及其特点

里面包含挺多,懒得细致分类了

软件是指在计算机系统的支持下,能够完成特定功能与性能的程序、数据和相关文档

    公式:文档+代码+数据->软件制品(当时老师说必考来着,但是哈哈哈,还是记一记,万一出题又变了呢~)

    文档:记录软件开发活动和阶段性成果、软件配置及变更的阐述型资料(编写文档的目的:阐述清楚,发现问题,开展交流,促进管理)

    数据:程序的加工对象和结果(数据形式:用户、订单、交易、日志、数据;数据处理:表示、获取、存储、检查、分析)

软件≠程序  开发软件≠编写程序

软件生命周期:软件从提出开发到最终灭亡所经历的时期(从提出开发到开发出系统、运行维护以及最终退役的全过程,不同阶段具有不同的特征)

软件的特点:①逻辑性 ②特殊性 ③软件需求的易变性 ④软件系统的复杂性 ⑤软件缺陷的隐蔽性

软件的分类:①应用软件 ②系统软件 ③支撑软件(辅助软件的开发和运维)

开源软件:一种源代码可以自由获取和传播的计算机软件,其拥有者通过开源许可证赋予被许可人对软件进行使用、修改和传播。

软件质量:软件满足给定需求的程度,是产品的生命线

软件质量要求:正确性、可靠性、健壮性、有效性、安全性、可维护性、可移植性、可重用性、可理解性、可信性、持续性、可用性、互操作性

       可信软件的基本要求:安全性、韧性、隐私性、可靠性和可用性

软件的地位和作用:无处不在、创新工具、使能技术和重要利器、关键性基础设施

软件运行环境:PC终端、可穿戴设备、智能手机到原端的云中心、高性能计算中心

                        从孤立、独立、局域和可控的计算环境到分布、开放、动态、难控、无处不在的计算环境

软件形态:①系统之系统 ②生态系统 ③系统联盟 ④动态适应系统

软件系统的规模:构成软件系统的代码行数量、软件运行时的进程和线程以及它们之间的就交互数量、软件需处理的数据量、软件连接的各设备和人员数量

三、软件工程

一点历史:

    1950s-1960s的计算机软件应用:应用领域变化、应用数量增长、应用复杂性增加  ----->软件开发需要解决的问题:开发过程 开发方法 开发管理 质量保证

     作坊式的个体编程,大批量大规模软件开发->软件危机(开发成本高、进度难以控制、质量难以保证、软件维护困难、失败风险很大                                                                                              

    软件工程诞生:1968年西德南部 11个国家50个代表 --->将系统的、规范的、可量化的方法应用于软件的开发、运行和维护的过程;以及上述方法的研究、系统化、规范化、可量化

软件是产品,软件开发是一项工程(project),按工程化方法来组织软件生产

软件工程三要素:过程、方法学、工具

   ①过程:从管理的视角:回答软件开发、运行和维护需要开展哪些工作、按照什么样的步骤和次序来开展工作、对软件开发过程所涉及的人、制品、质量、成本、计划等进行有效和可量化的管理

   ②方法学:从技术的视角:回答软件开发、运行和维护如何做的问题,为软件开发过程中的各项开发和维护活动提供系统性、规范性的技术支持

   ③工具:从工具辅助的视角:主要回答如何借助工具来辅助软件开发、运行和维护的问题,帮助软件开发人员更为高效地运用软件开发方法学来完成软件开发过程中的各项工作,提高软件开发效率和质量,加快软件交付进度。

三角关系

软件工程的目标:在成本、速度、资源等约束下,帮助软件开发人员开发出满足客户要求的足够好的软件系统。

软件开发的本质:软件开发=软件创作+软件生产(又有公式,但是没考)

软件开发的特点: ①基于智力的协作过程 ②软件项目内在复杂性 ③循序渐进的开发过程

软件开发活动: ①技术活动 ②管理活动

软件工程原则:①抽象和建模 ②模块化(模块内部高内聚,模块间松耦合) ③软件重用(尽可能利用已有的软件资源和资产) ④信息隐藏  ⑤关注点分离 ⑥分治 ⑦双向追踪原则 ⑧工具辅助        

软件工程发展:每隔十年都有一个巨大的飞跃(时代特点)、软件抽象的层次越来越高,软件开发理念的不断变化,软件重用的粒度越来越大(技术特点)   (其实我觉得很可能不考这玩意,但是也说不准)

接下来是一个重头,核心考点之一

软件过程模型:

懒得做表,直接上PPT的图:

①瀑布模型:与软件生命周期一致,每个活动结束后需要评审,相邻活动间存在因果关系。优点:简单,一目了然,易理解、掌握、应用和管理    缺点:需求确定、过于理想化、缺乏变通、难以应对变化                                                                   

                      ---->带反馈的瀑布模型      优点:发现问题可以回溯,提高了灵活性     缺点:软件开发处于动荡之中,而等到所有功能实现后才能得到可运行的软件

我把瀑布和带反馈的画在一起,红色就是反馈路径

②增量模型:渐进式、增量式地实现软件功能       优点:快速交付、并行开发、提高效率         缺点:软件需求可确定且不易变化

③迭代模型:每次迭代是一完整过程,体现了小步快跑的开发理念,适合需求难导出,不宜确定且持续变动的软件           不足:迭代多少次不确定,管理较为复杂

④原型模型:特点:软件原型作为交流载体和媒介;支持用户参与到软件开发中;持续、渐进地到处用户需求

这个图和下一个螺旋模型的图都要用的老师PPT里的,实在不想画

⑤螺旋模型:引入风险管理活动,集成迭代模型和原型模型  管理复杂

⑥基于构建的过程模型:基于构建重用开发软件,使用需求明确,具有丰富构件库的应用

⑦up模型:分为初始、细化、构造、发布四个阶段,集成迭代过程模型和面向对象最佳实践,适用于软件需求不明确且经常变化的应用   

       这俩不太重要)

如何选择模型:考虑软件项目的特点、软件开发团队的水平、分析软件过程模型特点、考虑软件项目开发的风险

敏捷方法:主张软件开发以代码为中心、一种轻量级软件开发方法   

支持敏捷软件开发的技术:1.极限编程 2.测试驱动的开发 3.Scrum方法(指通过增量和迭代的方式加强软件项目的管理)                                                                             

敏捷方法的特点:1.小 2.简 3.快 4.变

群体化软件开发方法: 基于互联网的群体智能在软件工程领域的应用和实践    :①基于群智的软件开发 ②基于群智的知识分享(SO社区等)

四、软件需求

软件需求:从软件本身的角度:软件用于解决现实世界问题时所表现出的功能和性能等要求

                  从软件利益相关方角度:软件系统的利益相关方对软件系统的功能和质量以及软件运行环境、及交付速度等方面提出的期望和需求

软件需求的类别:功能需求、软件质量需求(外部质量、内部质量)、软件开发约束需求

软件需求的特点:隐式性、隐晦性、多源性、易变性、领域知识的相关性、价值不均性

软件需求的质量要求:有价值、正确、完整、无二性、可行、一致、可追踪、可验证

软件需求的重要性:软件的价值所在、软件开发的基础和前提、软件验收的标准和依据

需求工程:用工程的理念和方法来指导软件需求和实践 

               特点:知识密集型、多方共同参与、需求获取的多种形式和源头、持续迭代和逐步推进   

               方法学:抽象、建模、分析    

面向对象需求分析方法学:基于一组以对象为核心的概念和抽象,建立自然和直观的软件需求模型,简化需求分析工作,实现多视点的需求规模,以加强对软件需求的理解和分析                     

面向对象建模语言:UML(基于面向对象的概念和抽象,提供图形化的图符,也用来表示软件系统的语言)

面向对象需求分析步骤:①明确问题边界获取软件需求建立用例模型 ②开展用例分析,精华软件需求,建立分析模型 ③汇总需求模型,撰写需求文档,评审软件需求

需求工程的CASE工具:①需求文档撰写工具 ②需求建模工具 ③软件原型开发工具 ④需求分析和管理专用工具 ⑤配置管理工具和平台

软件需求的输出和评审:                                                                        

      输出:软件需求制品:软件需求模型、软件需求文档、软件原型 

      软件需求缺陷:①需求缺失 ②需求描述不正确 ③需求描述不准确 ④软件需求有冲突 ⑤软件需求不可行 ⑥软件需求不详尽 

      软件需求评审:软件需求确认、软件需求验证

五、获取软件需求

获取软件需求的方式: 

          1.从软件系统的用户和客户处导出软件需求 

          2.分解其他系统的需求而产生软件需求 

          3.重用已有的系统需求 

          4.通过软件开发者构思和创作软件需求

获取软件需求的困难:需求想不清、需求道不明

获取软件需求的过程:

         1.明确问题和基于软件的解决方案 

         2.到处和构思初步软件需求

         3.描述初步软件需求 

         4.评审初步软件需求

六、分析软件需求

原因:需求不详尽、表达不清楚、关系不明确、存在潜在缺陷、未区分不同需求项

软件需求模型及UML表示方法:  核心考点

       需求模型:①用例视角:用例图 ②行为视角:交互图、状态图  ③结构视角:类图

UML交互图: 顺序图(强调信息传递的时间序)、通信图(突出对象间的合作)

顺序图:描述对象间的消息交互序列,由对象和消息传递两类图形符号构成

看着复杂其实不难,网上随便搜几道练练手就会画了【UML】-- 顺序图练习题含答案(自动售货机、学生选课、提款机、购买地铁票、洗衣机工作)_插入卡,输入密码。 2.密码正确,进入下一步菜单-CSDN博客

通信图:节点表示对象,对象和对象之间的连线表示对象的消息通道

类图:表示类以及类与类之间的关系,刻画系统的静态结构特征(其实和面向对象有点像)

类之间的关系(这张图是copy别人的),下图是一个例子

具体类图可以参考这篇文章:UML一一 类图关系 (泛化、实现、依赖、关联、聚合、组合)_uml类图关系-CSDN博客(这个博主写的挺详细)再放个我当时复习找的题【UML】-- 类图练习题含答案_类图例题-CSDN博客

对象图:是类图在系统运行过程中某个时刻点或某一时间段内的实例化样本

状态图:描述一个实体所具有的各种内部状态,以及这些状态如何受时间刺激,通过实施反应行为而改变,刻画动态行为特征

用例图:这里展示一个PPT上的例子,我认为用例图和类图是最好画的

同样,上链接:用例图详解-CSDN博客 【UML】-- 用例图练习题含答案(订餐系统、远程网络教学系统、交互式网络系统)_用例图例题及答案-CSDN博客

分析软件需求过程: 分析和确定软件需求优先级->分析和建立软件需求模型->文档化软件需求->确认和验证软件需求

①分析和确定软件需求优先级:分析软件需求的重要性(核心软件需求、外围软件需求)分析软件需求优先级(按照软件需求重要性确定其优先级、按照用户的实际需要来确定软件需求的优先级)确定用例分析和实现的次序

②分析和建立软件需求模型:分析和建立用例的交互模型、分析类模型、状态类模型

③文档化软件需求:输出制品:软件原型、软件需求模型、软件需求文档

④确认和验证软件需求:评审软件需求、解决软件需求问题

七、软件设计基础

软件设计:针对软件需求、综合考虑各种制约因素、探究软件实现的方案。软件设计起承上启下的作用,是连接需求工程和软件实现的桥梁

软件设计的质量要求:满足需求、遵循约束、充分优化、足够详细、通俗易懂

软件设计的过程和原则:

       一般性过程:①体系结构设计 ②用户界面设计 ③详细设计(用例设计、接口设计、类设计、算法设计)④文档化软件设计 ⑤软件设计评审 ⑥软件设计管理

       基本原则:①抽象和逐步求精原则 ②模块化与高内聚度、低耦合度原则 ③信息隐蔽原则(模块的独立性更好,支持模块的并行开发,便于测试和维护,减少错误向外传播,便于增加新的功能) ④多视点及关注点分离 ⑤软件重用原则 ⑥迭代设计原则 ⑦可追踪性原则 ⑧权衡抉择原则

 关于内聚和耦合

      ①内聚:指该模块内各成分间彼此结合的紧密程度,越高越好,高内聚     内聚度分类(由低到高):偶然性内聚(各成分未完成一组功能结合在一起,关系松散)->逻辑性内聚(模块完成的诸任务逻辑上相关)->时间性内聚(模块内诸任务必须在同一时间段内执行)->过程性内聚(模块内各成分相关且必须按特定次序执行)->通讯性内聚(模块内成分对数据结构的同一区域操作)->顺序性内聚(模块内成分与同意功能相关且顺序执行)->功能性内聚(模块内个成分十一整体,完成单个功能)        

     ②耦合:模块间的相关程度,越低越好,低耦合           耦合度分类(由低到高):非直接耦合(二个模块都不依赖对方而独立存在)->数据耦合(二个模块通过参数交换信息且仅限于数据)->控制耦合(二个模块通过参数交换信息包含控制信息)->特征耦合(介于数据耦合和控制耦合之间)->外部耦合(二个模块于同一外部环境相关联,如文件等)->公共耦合(模块间通过全局数据环境相互作用)->内容耦合(一个模块使用另一模块内的数据和控制信息,或者直接转移到另一模块内执行)

结构化软件设计方法学=>面向数据流的软件设计方法学

面向对象的软件设计:先整体后局部,先抽象后具体

软件设计的输出和评审:

       产生2类软件制品:软件设计模型、软件设计文档

软件设计的管理:软件设计的变更管理、软件设计的追溯管理、软件设计的基线管理

八、用户界面设计

概述:人机交互方式:①文本交互方式 ②图形化界面交互方式 ③语音交互方式 ④姿势交互方式

用户界面设计原则:直观性、易操作性、反应性、一致性、容错性、人性化

用户界面组成及表示方法:

        图形化用户界面的组成:①静态元素 ②动态元素 ③用户输入元素 ④用户命令元素

        用户界面设计模型的UML表示: 用UML类图表示用户界面元素、用UML顺序图表示用户界面跳转关系

用户界面设计:

①用户界面初步设计:构思用户界面设计元素、确定用户界面的操作

②建立用户界面间的跳转关系:交互图、类图

③精化用户界面设计

④评审用户界面设计

九、软件体系结构设计

概述:软件体系结构设计=>软件构架:刻画软件系统的构成要素及它们之间的关系

设计元素:构件、连接件、约束

软件体系结构表示的抽象层次和表示视图:

       抽象层次:抽象的体系结构、具体的体系结构

       表示视图:①逻辑视图 ②运行视图 ③开发视图 ④物理视图

描述软件体系结构三类UML图

①包图:逻辑关系,构成:节点(包:软件模型的组织单元、模型管理的基本单元、系统高层结构的组成元素、访问控制的基本手段)、边(包间关系:组成和依赖)

②构件图:构件以及它们之间的构成和依赖关系 节点(构件:一个或多个可独立部署的独立执行码文件,具有精确定义的供给接口和需求接口,可替换,可分离)边(构件间的依赖关系)

③部署图:描述软件的各个可执行制品再运行环境中的部署和分布情况 节点(计算节点、工作、构件) 边(通信和依赖)

    逻辑层面:描述性部署图——描述软件的逻辑布局

    物理层面:实例性部署图——针对具体运行环境和特定的系统配置描述软件系统的物理部署情况

软件体系结构风格: 考点!

①管道/过滤器风格:将软件系统功能实现为一系列处理步骤,每个步骤完成特定的功能并封装在一个“过滤器”的构件中,相邻的过滤器间以“管道”相连

②黑板风格:将软件系统给划分为黑板、知识源、控制器三类构件

③MVC风格:模型+视图+控制器

画的有点歪

④SOA风格:将软件系统构件抽象为一个个服务、每个服务封装特定的功能、并提供了对外可访问的接口

⑤消息总线风格:包含了一组软构件和一条成为“消息总线”的连接件来连接各个软构件

软件体系结构设计的原则:高层抽象和组织、模块化、信息隐藏、软件重用、多视点分离

软件体系结构设计的任务:建立满足软件需求的软件体系结构

软件体系结构设计的重要性:承上启下、影响全局、定型质量

软件体系结构设计的过程:

       ①设计初步的软件体系结构:识别关键性软件需求、构建初步的软件体系结构

       ②重用可用的软件资源:搜索已有的粗粒度软件资产、寻找可用于支持目标软件系统构建的软件制品、实现软件架构中某些子系统或构件的功能

       ③精化软件体系结构设计:确定公共基础设施及服务、确定设计元素

       ④设计部署模型:刻画软件系统的各个子系统、软构件如何部署到计算节点上运行的、描述他们的部署和运行环境

       ⑤文档化和评审软件体系结构设计:

               撰写设计文档、输出软件制品:软件体系结构模型、软件体系结构设计文档、评审软件体系结构设计

十、软件详细设计

一类针对设计元素,围绕其内部细节信息的细粒度设计

是高层设计和底层实现之间的桥梁,确保前期的软件需求和软件体系结构设计得到落实的关键,更加注重内部实现

任务:对体系结构设计和用户界面设计成果进行细化和精化,获得高质量、面向实现的设计模型

输入:软件体系结构设计、用户界面设计、软件需求

软件详细设计的原则:针对软件需求、深入优化设计、设计足够详细、充分重用软件

过程:1.用例设计->2.类设计->3.数据设计->4.文档化和评审软件详细设计

                             子系统/构件设计

软件详细设计模型及表示方法:

       活动图:描述实体为完成某项功能而执行的操作序列,其中个某些操作或其子序列存在并发和同步

用例设计:

用例设计原则:以需求为基础、整合设计元素、精化软件设计、多视角设计

用例设计过程:设计用例实现方案、构造设计类图、优化和评审用例设计方案

用例设计的输出:用例设计的顺序图、用例设计的类图

类设计:

类设计原则:准确话、细节化、一致性、遵循软件设计的基本原则

类设计的过程:确定类的可见范围、精化类间关系、精化类的属性、精化类的方法、构建类对象的状态图、评审和优化类设计

类设计的输出:详细的类属性、方法和类间关系设计的类图、描述类方法实现算法细节的活动图、必要的状态图

数据设计:

数据设计原则:可追踪、无冗余、考虑和权衡时空效率、贯穿整个软件设计阶段、验证数据的完整性

数据设计的过程:确定永久数据、确定持久数据的存储和组织方式、设计数据(写入、查询、更新、删除)评审和优化数据设计

数据设计的输出:描述数据设计的类图、描述数据操作的活动图

子系统/构件设计:

子系统/构件设计的过程:明学子系统/构件内部的设计元素、设计子系统/构件的类及接口、开展子系统/构件的数据设计、构造子系统/构件的状态图和活动图、评审和优化子系统/构件的设计

子系统/构件设计的输出:子系统、描述子系统内部设计元素交互的UML顺序图

文档化和评审软件详细设计:

       撰写软件设计文档

十一、软件实现与代码编写

1.软件实现基础

软件实现过程:编写代码->单元测试->软件调试->软件测试

原则:基于设计来编码、质量保证贯穿全过程

软件实现语言:机器语言、汇编语言、结构化程序设计语言、面向对u像程序设计语言、描述性程序设计语言

高质量编码:原则:易读、易改、降低代码的复杂度、尽可能地开展软件重用和编写可重用的程序代码、要有处理异常和提高代码的容错性、代码要与模型和文档一致

支持软件实现的CASE工具:编辑器、编译器、调试器、测试工具、集成开发环境

软件实现的输出:源代码、部署带不同计算节点上的可执行程序代码、软件测试报告等

2.编写代码

编写代码是一个生产代码的过程,也是对生成的代码进行质量保证的过程

基于软件设计编写代码: 编写类的代码、编写用户界面的代码、编写数据设计代码

代码片段重用,选定和重用所需的代码片段,完成相应的编程任务

软件缺陷和调试:

       软件缺陷是指软件制品中存在不确定的软件描述和实现(不仅包括程序代码,还包括需求和设计的模型和文档;产生于软件开发过程;任何人都有可能在开发过程中引入错误、引入软件缺陷

       软件缺陷带来的错误->失效

                     应对方法:预防缺陷、容忍缺陷、发现缺陷、修复缺陷

                     软件缺陷状态:尚未确认、有效、无效、重复、已分配、已修复、信息不完善、已解决、已关闭

                     基于软件缺陷的度量和分析:计算软件质量属性(缺陷密度DD、缺陷发现率DDE、缺陷移除率DRE、潜在缺陷密度DP)

程序调试

基于群智知识解决变成和代码问题:借助开源技术

编写代码的输出:源代码、程序单元测试报告

十二、软件测试

运行软件或模拟软件的执行、发现软件缺陷的过程——不负责修复和纠正错误

对象:目标软件系统的程序代码

软件测试的思想和原理:软件系统(程序)的本质是对数据进行处理。目的:发现软件中的缺陷,最大限度、尽可能地找到缺陷

测试用例:输入数据、前置条件(测试时需要明确程序处理输入数据的运行上下文)、测试步骤、预期输出

软件测试的步骤:明确测试对象、设计测试用例、运行代码和测试用例、分析运行结果

缺陷潜在位置:程序模块内部、程序模块接口、程序模块间的交互、整个软件系统

测试活动和软开活动之间的关系:

软件测试过程:

 

单元测试:采用白盒测试技术。内容:程序单元的接口测试,局部数据结构测试,执行路径测试,错误处理路径测试,边界条件测试

集成测试:采用黑盒测试技术。内容:过程调用、函数调用、消息传递、远程过程调用、网管消息。方法:自顶向下集成,自底向上集成

确认测试:采用黑盒测试技术。软件功能和性能测试。α测试:企业内部人员自测 β测试:内测(代表用户)

系统测试:与其他系统交互中是否存在缺陷

面向对象软件测试:

       类测试:白盒测试:需要开发测试驱动程序

       交互测试:测试驱动程序,实例化参与交互的实例,发送消息序列

       继承测试:先测试父类,再测试子类。重用父类的测试来进行子类的测试

非功能性测试:性能测试、强度测试、安全测试、用户界面测试、Web测试、配置和兼容性测试、可靠性测试、本地化测试、安装测试

软件测试后续工作:软件调试,缺陷修复,回归测试

程序单元测试:执行路径、错误处理、模块接口、边界条件=>程序单元测试报告

软件测试技术:

    白盒技术:基于程序内部的执行流程来设计测试用例   考点!!!

           基本路径测试技术:1.根据程序逻辑画出流程图 2.将流程图转化为流图 3.确定基本路径集合 4.针对基本路径设计测试用例 5.运行测试用例

void Func(int x,int y){
   while(x>0){
       int sum = x + y;
       if(sum>1){
         x--;y--;
       }else{
         if(sum<-1) x-=2;
         else x=x-4;
       }
   }
}

伪代码(白盒测试代码例子)

单元测试工具 JUnit

基于CASE的软件测试:测试数据发生器、运行测试报告、产生测试报告

黑盒测试技术:基于程序的外在功能和接口来设计测试用例     也是考点!

       A.等价分类法:把程序的输入数据集合按输入条件划分为若干等价类:     

                              输入值为一个范围:①范围内(有效) ②大于max(无效) ③小于min(无效)

                              输入值为一个特定值:①该值 ②大于x(无效) ③小于x(无效)

                              输入为一个集合:①此集合 ②集合的补集(无效)

                              输入为一个布尔量:①有效此布尔量 ②布尔量的非(无效)

     B.边界值分析法

                            输入值为一个范围 (a,b):a,b及紧挨ab左右的值

                            输入为一组数:选择最大,最小,次大,次小作为测试用例

                            若程序内部数据结构是有界的——设计测试用例使它能够检查该数据结构的边界

软件测试计划及输出:

成立软件测试组织——单独的软件测试小组

软件测试的输出:软件测试计划、软件测试报告

十三、软件部署与演化

软件运行环境:软件所依赖的上下文、它为软件系统的运行提供必要的基础服务和功能,必须的数据和基本的计算能力

软件部署:将目标软件系统进行收集、打包、安装配置和发布到运行环境的过程

               安装和配置运行环境 安装和配置软件系统  原则:最小化、相关性、适应性

软件部署的方法和方式:

       部署方式:①单机部署:将软件的各个要素(如可运行软构件、数据、文档等)集中部署到某个单一的计算机设备上

                         ②分布式部署:即将软件的各个要素分散部署在多个计算设备上的部署方式

       软件部署方法:①基于操作系统的部署 ②基于软件开发框架和中间件的部署 ③基于容器的部署

软件部署的CASE工具:Fat Jar、Installer Project部署工具、Jenkins部署工具

十四、软件维护与演化

软件维护:软件在交付使用后、由于应用需求和环境变化以及自身问题、对软件系统进行改造和调整的过程,对软件进行的任何变更工作都属于软件维护

维护形式:纠正性维护(缺陷和错误)、适应性维护(改造以适应新的运行环境和平台)、改善性维护(增加新的功能、修改已有功能)、预防性维护(提高可靠性和可维护性)  ——考点之一!!!

软件维护的特点:同步性、周期长、费用高、难度大

软件演化:针对软件的大规模功能增强和结构调整,以实现变化的软件需求,或提高软件系统的质量  功能增强粒度大、主动应对变更、持续性、引发版本变化

软件演化法则:持续变化法则、增加复杂性法则、自我调节法则、组织稳定性守恒法则、熟练度守恒法则、功能持续增强法则、质量衰减法则、反馈系统法则

软件逻辑老化:软件在维护和演化的过程中出现的用户满意度降低,质量逐渐下降,变更成本不断上升等现象,发生在逻辑层面

软件逻辑老化的原因和表现:

        原因:缺乏变更、页面变更   表现:设计恶化、代码腐烂、文档荒废

解决软件逻辑老化的方法:维护、抛弃、再工程、演化

软件维护的过程与技术:

   维护技术:①代码重组:在不改变软件功能的前提下,对程序代码进行重新组织,使重组后的代码具有更好的可维护性,能够有效支持对代码的变更

                     ②逆向工程:基于低抽象层次的软件制品,通过对其进行理解和分析,产生高抽象层次的软件制品

                     ③设计重构:获得设计方面的文档信息,产生用自然语言或图形化信息所描述的软件设计文档,是逆向工程的一种具体表现形式

                     ④软件再工程:通过分析和变更软件的架构,实现更高质量的软件系统的过程,包括逆向工程和正向工程

   维护过程:结构化维护、非结构化维护

软件维护成本:维护成本不断增高、涉及助动性和生产性(维护工作量)

软件维护需要解决的问题:人员问题、软件制品的问题、维护副作用的问题(代码、数据、文档和模型副作用)

影响软件可维护性因素:软件开发方法、软件文档是否齐全、文档结构是否标准化、软件是否易于扩展、软件结构是否清晰易于理解、是否采用标准的程序设计语言、程序代码是否易于理解

保证软件可维护的复审:需求分析的复审、设计阶段的复审、编码阶段的复审、阶段性测试、软件维护活动完成之际的复审

软件维护的输出:新版本的软件模型、软件文档、程序代码

十五、软件项目管理

软件项目:针对软件这一特定产品和服务的一类特殊项目(特点:开发对象、过程、属性、复杂性给、易变性)

软件项目管理的对象

软件项目管理内容:过程、人员、制品

软件质量、测量、估算:对软件制品、软件过程或资源的简单属性的定量描述

软件项目估算:规模,工作量,成本

      两种估算模式:自底而上的估算、自顶而下的估算

      估算方法:基于代码行和功能点的估算、基于经验模型的估算、专家估算、类比估算

      估算原则:充分考虑方法本身的技术特点及已有的软件项目数据、综合利用多种估算方法、估算结果表示为一个区间和范围、估算必须有依据、不断调整经验参数、不断记录和积累估算的数据

软件项目计划:活动计划(开发过程中应做哪些方面的工作)、资源计划(包括人员、经费、设备、工具等)、进度计划(资源开发、活动和任务的进度要求)

软件开发活动之间的关系:从结束到开始、从开始到开始、从结束到结束、从开始到结束

进度计划的描述:甘特图、网络图

关键路径分析:软件想进度计划中从其实活动开始到结束活动为止具有最长长度的路径(长度指软件开发所需的时间)(和数据结构的关键路径是一样的)

活动责任矩阵:①软件开发活动——角色责任矩阵

                         ②角色——人员责任矩阵

软件项目计划要考虑的因素:

    1.指定软件项目计划的基础和依据(软件项目所采用的软件过程及其细化、软件项目要开展的工作、软件项目的限制和约束条件)

    2.指定软件项目计划的时机(初步的软件项目计划、详细的软件项目计划)

    3.估算软件开发活动的周期(细分活动、借鉴历史数据、借鉴经验数据)

制定软件项目计划的步骤:指定软件项目计划制定负责人->召开软件项目计划制定会议->制定软件项目计划->评审软件项目计划->批准软件项目计划

软件项目跟踪:跟踪的对象:项目问题和风险、项目进展

                         跟踪的方法:项目跟踪小组

                         跟踪的步骤:成立软件项目跟踪小组、召开软件项目跟踪会议、采取措施

软件配置管理:

        配置项:技术文档、管理文档、程序代码、数据、标准和规约

        基线:已经通过正式复审和批准的软件制品、标准或规范

        软件配置管理小组:制定软件配置管理计划和实施软件配置活动

        过程:配置项标识、版本库控制、变更控制、软件配置审计、状态报告(现行、历史状态报告)

软件风险管理:

       软件风险的特点:事先难以确定、带来损失、概率性、可变性

       软件风险的类别:计划编制风险、组织和管理风险、软件开发环境风险、最终用户风险、承包商风险、软件需求风险、软件制品风险、人员风险、设计和实现风险、软件过程风险

       风险管理模式:危机管理、失败处理、风险缓解、风险预防、消灭根源

       风险管理方法:风险评估:风险识别、风险分析、风险排序;风险控制:制定计划、风险化解、风险监控

软件质量保证:从软件开发活动、软件制品、标准和规程关注软件项目的质量

软件质量保证小组:SQA小组

大概就是这么多了,有一些知识点太过琐碎,应付考试的话一般涉及不到那么细,最后祝大家都取得个好成绩~

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值