精华内容
下载资源
问答
  • 软件工程学习笔记

    千次阅读 2019-01-12 17:18:31
    复习软件工程时的一篇笔记,总结了一些书上的重点,部分需要结合教材中的实例进行理解的作图知识点没有进行具体总结。 参考资料:软件工程概论(第六版)

    软件工程概述

    软件危机

    介绍

    • 软件危机包含两个问题:如何开发软件以应对日益增长的需求,以及如何维护数量不断增长的已有软件。
    • 软件危机表现:
      • 对软件开发成本和进度估计不明确
      • 用户对已完成的软件系统市场不满意
      • 软件质量靠不住
      • 不可维护
      • 软件通常没有合适的文档材料
      • 软件成本在计算机系统的成本中所占的比例提升
      • 软件开发生产率提高速度过慢

    原因

    1. 软件开发不同于硬件,是逻辑部件,缺乏可见性,所以开发进展较难衡量
    2. 软件规模庞大,难以组织分工合作

    消除途径

    • 软件是程序,数据及相关文档的完整集合。(不仅仅是程序)
      • 程序是能够完成预定功能和性能的可执行的指令序列
      • 数据是使程序能够适当地处理信息的数据结构
      • 文档是开发、使用、和维护程序所需要的图文资料

    软件工程

    软件工程是知道计算机软件开发和维护的一门工程学科

    介绍

    本质特征:

    • 软件工程关注余大型程序的构造
    • 软件工程的核心课题是控制复杂性:把大问题分解成几个小的问题
    • 软件经常变化
    • 软件开发效率非常重要
    • 和谐合作是软件开发的关键
    • 软件必须有效的支持他的用户
    • 通常由具有一种文化背景的人体具有另一种文化背景的人创造产品

    基本原理

    • 用分阶段的生命周期计划严格管理
    • 坚持进行阶段评审
    • 实施严格产品管控
    • 采用现代化程序设计技术
    • 结果应能清楚地审查
    • 开发人员小组应少而精
    • 承认不断改进软件工程实践的重要性

    方法学

    • 软件生命周期全过程中使用的一整套技术方法的集合称为方法学
      • 软件工程方法学包含三个要素:方法工具和过程。
      • 传统方法学
        • 又名生命周期方法学或结构化范型
        • 采用结构化技术(结构化分析结构化设计结构化实现)
        • 把软件开发的生命周期划分为若干个阶段,然后顺序的完成每个阶段。
        • 维护较为困难
      • 面向对象方法学=对象+类+继承+用消息通信
        • 软件规模较大时,使用传统方法学往往不成功
        • 数据和行为同等重要,以数据为主线,把数据和对数据的操作紧密的结合起来。
        • 主要有以下四个要点:
          • 把对象作为融合了数据以及在数据上操作行为的统一软件构件
          • 把所有对象都划分成类
          • 按照父类与子类的关系把若干个相关类组成一个层次结构的系统
          • 对象之间仅能通过发送消息互相联系

    软件生命周期

    • 软件定义:问题定义,可行性研究,需求分析
    • 软件开发:总体设计,详细设计,编码和单元测试,综合测试
    • 软件维护

    软件过程

    瀑布模型

    • 阶段间具有顺序性和依赖性
    • 推迟实现的观点
    • 质量保证的观点
      • 每个阶段都必须完成规定的文档
      • 每个阶段结束前都必须对所完成的文档进行评审
    • 反馈环
    • 文档驱动

    快速模型原型

    • 快速建立起可以在计算机上运行的程序,它所完成的功能往往是最终产品的一个子集。通过用户提出的修改意见来改进系统

    增量模型

    • 将系统分解为一系列的增量构件来设计编码和测试
    • 分解必须遵守的约束:当把新的构件添加到系统中时,所形成的产品必须是可测试的

    螺旋模型

    • 风险驱动

    喷泉模型

    • 主要用于面向对象开发

    Rational统一过程

    • Rational Unified Process(RUP)
    • 最佳实践
      • 迭代式开发
      • 管理需求
      • 使用基于构建的体系结构
      • 可视化建模
      • 验证软件质量
      • 控制软件变更
    • RUP软件开发生命周期
      • 二维的生命周期模型
      • 纵轴核心工作流,横轴时间

    敏捷过程与极限编程

    • 敏捷过程
      • 四个简单的价值观:
        • 个体和交互胜过过程和工具
        • 可以工作的软件胜过面面俱到的文档
        • 客户合作胜过合同谈判
        • 相应变化胜过遵守计划
    • 极限过程
      • 属于敏捷过程
      • 极限编程的有效实践
      • 极限编程的整体开发过程极限编程的迭代过程

    微软过程

    可行性研究

    可行性研究的任务

    • 技术可行性
    • 经济可行性
    • 操作可行性

    可行性研究过程

    • 复查系统规模和目标
    • 研究目前正在使用的系统
    • 导出新系统的高层逻辑模型:数据流图和数据字典
    • 进一步定义问题
    • 导出和评价供选择的解法
    • 推荐行动方针
    • 草拟开发计划
    • 书写文档提交审查

    系统流程图

    概括的描述物理系统的传统工具

    • 符号:基本符号,系统符号
    • 例子
    • 分层:先用高层次整体概括再具体细化每个功能

    数据流图(DFD)用于建立功能模型

    • 符号:四种基本符号:正方形,表示数据的源或终点;圆角矩形,表示数据的变换处理;开口矩形,表示数据的存储;箭头,表示数据的流动方向。
    • 附加符号的含义。"* + 抑或"
    • 通常忽略出错处理和内务处理,只考虑做什么而不考虑怎样做。

    数据字典

    数据字典内容:

    • 数据流
    • 数据流分量
    • 数据存储
    • 处理

    需求分析

    结构化分析方法准则:必须理解并描述问题的信息域,根据这条准则建立数据模型
    必须定义软件应该完成的功能,根据这条准则建立功能模型
    必须描述作为外部事件结果的软件行为,根据这条准则建立行为模型
    必须对描述信息,功能,行为的模型进行分解。用层次的方式展示细节

    需求分析任务

    确定系统的综合要求

    • 功能需求
    • 性能需求
    • 可靠性和可用性需求
    • 出错处理需求
    • 接口需求
    • 约束
    • 逆向需求
    • 将来可能提出的需求

    分析系统的数据要求

    导出系统的逻辑模型

    修正系统的开发计划

    分析建模与规格说明

    分析建模

    • 模型:为了理解事物而对事物做出的一种抽象,是对事物的一种无奇异的书面描述,通常由一组图形符号和组织这些符号的规则组成

    需求规格说明

    • 除了创建分析模型外,还应该写出软件的需求规格说明书

    实体–联系图(用于建立数据模型)

    • 描述了从用户角度看到的数据,反映了用户的现实环境,反而与在软件中的实现无关
    • 包含三种相互关联的消息:数据对象、数据对象的属性、数据对象彼此之间相互连接的关系

    数据规范化

    • 第一范式
    • 第二范式
    • 第三范式

    状态转换图(用于建立行为模型)

    其他图型工具

    • 层次方框图
    • Warnier图
    • IPO图

    验证软件需求

    从哪些方面验证

    • 一致性
    • 完整性
    • 现实性
    • 有效性

    验证软件需求的方法

    • 验证需求的一致性
    • 验证需求的现实性
    • 验证需求的完整性和有效性

    用于需求分析的软件工具

    形式化说明技术

    总体设计

    设计过程

    总体设计通常包含两个阶段:系统设计阶段确定系统的具体实现方案和结构设计阶段确定软件结构。
    典型的总体设计过程包括以下九个步骤:

    • 设想供选择的方案
    • 选择合理方案
    • 推荐最佳方案
    • 功能分解
    • 设计软件结构
    • 设计数据库
    • 制定测试计划
    • 书写文档
      • 系统说明
      • 用户手册
      • 测试计划
      • 详细的实现计划
      • 数据库测试结果
    • 审查和复审

    设计原理

    模块化

    模块是由边界元素限定的相邻程序元素,有一个总体标识符代表他。如C,C++中的{……}

    C(x)为问题x的复杂度,E(x)为解决问题x需要的工作时间
    若:
    C(p1)>C(p2)
    则:E(p1)>E(p2)
    另外:C(p1+p1)>C(p1)+C(p2)
    E(p1+p2)>E(p1)+E(p2)
    

    但是,随着模块的细化,设计模块之间的接口的成本会大大增加,总成本也会上升。

    抽象

    把相似的方面集中和概括起来,暂时忽略他们之间的差异。

    逐步求精

    为了集中主要精力解决主要问题而尽量推迟对问题细节的考虑
    抽象与求精是一对互补的概念,抽象是的设计者能够说明过程和数据同时却暂时忽略底层细节。事实上,可以吧抽象看作是一种通过忽略多于细节的同时强调有关的细节,从而实现逐步求精的方法。求精则帮助设计者在设计过程中逐步揭示出底层细节。

    信息隐藏和局部化

    信息隐藏:模块内包含的信息对于不需要这些信息的模块来说是不能访问的
    局部化:把一些关系密切的软件元素物理地放的比较靠近

    模块独立

    开发具有独立功能的而且和其他模块之间没有过多相互作用的模块就可以做到模块独立。

    耦合

    对一个软件结构内各个模块之间的互联程度的度量
    追求尽可能松散的耦合系统

    • 耦合强度
      • 完全独立:各个模块之间完全独立,没有任何连接
      • 数据耦合(低耦合):模块之间通过参数交换消息,而且交换的信息仅仅是数据
      • 控制耦合(中等程度耦合):模块之间的传递控制信息,往往是多余的,模块适当分解后可用数据耦合替换。
      • 特征耦合:当把整个数据结构(如结构体,对象)作为参数传递进一个模块而该模块仅需要一部分数据元素时,就出现了特征耦合。
      • 公共环境耦合:两个或多个模块通过一个公共数据环境相互作用时,他们之间的耦合称为公共环境耦合。
      • 内容耦合(最高程度的耦合):
        • 一个模块访问另一个模块的内部数据
        • 一个模块不通过正常入口而转到另一个模块的内部
        • 两个模块有一部分代码重叠
        • 一个模块有多个入口
          尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合范围,完全不用内容耦合

    内聚

    标志着一个模块内各个元素之间彼此结合的紧密程度,理想内聚的模块只做一件事情

    • 低内聚:
      • 偶然内聚
      • 逻辑内聚
      • 时间内聚
    • 中内聚:
      • 过程内聚:一个模块内的处理元素是相关的,而且必须以特定的次序执行,则称为过程内聚,通常通过流程图划分模块时得到过程内聚模块。
      • 通信内聚:模块中所有元素都使用同一个输入数据和产生同一个输出数据,则称为通信内聚
    • 高内聚:
      • 顺序内聚:一个模块内的处理元素和同一个功能密切相关而且这些处理必须顺序执行,通常通过数据流图划分模块时得到的是顺序内聚模块。
      • 功能内聚:模块内所有处理元素属于一个整体,完成单一的功能。最高程度的内聚。

    启发规则

    • 改进软件结构提高模块独立性
    • 模块规模应该适中
    • 深度宽度扇出扇入都应适当
      • 扇出:直接控制的下级模块的数目
      • 扇入:被上级模块调用的数目
      • 好的系统顶层扇出高,中层扇出少,底层扇入高,平均扇出3-4
    • 模块的作用域在控制域内。
    • 力争降低模块接口的复杂度
    • 设计单入单出的模块
    • 模块的功能应该可以预测

    描绘软件结构的图形工具

    层次图和HIPO图

    层次图

    形式上与3.7层次方框图相同,但是内容上完全不同:层次图中的每个矩形代表一个模块,方框间的连线表示 调用关系 而不是层次方框图的 组成关系

    HIPO图

    在层次图里除了最顶层的方框外每个方框都加了编号。

    结构图

    面向数据流的设计方法

    概念

    变换流

    事务流

    • 以事物为中心
    • 事务中心
      • 接收输入数据
      • 分析每个事物以确定他的类型
      • 根据事物类型选取一条活动通路

    设计过程

    详细设计

    结构程序设计

    • 经典的结构程序设计
    • 扩展的结构程序设计(允许使用case,do——until)
    • 修正的结构程序设计(允许使用case,do——until,break)

    人机界面设计

    设计问题

    • 系统响应时间
    • 用户帮助设施
    • 出错信息处理
    • 命令交互

    设计过程

    人机界面设计指南

    • 一般交互指南
    • 信息显示指南
    • 数据输入指南

    过程设计工具

    程序流程图

    又称程序框图,缺点:

    • 本质上不是逐步求精的好工具,诱使程序员过早的考虑程序的控制流程,而不是考虑程序的全局结构
    • 程序流程图中的箭头表示控制流,因此,程序员不受任何约束,可以不顾结构程序设计的精神而随意转移控制
    • 程序流程图不易表示数据结构

    盒图(N-S图)

    特点:

    • 功能域明确,可以从盒图上一眼就看出来
    • 不可能任意转移控制
    • 很容易确定局部和全局的数据作用域
    • 很容易表现嵌套关系,也可以表示模块的层次结构

    PAD(problem analysis diagram)图

    优点:

    • 使用结构化控制结构的PAD符号设计出来的程序必然是结构化的
    • 描绘的程序结构非常清晰
    • 程序逻辑通俗易懂
    • 可将PAD图自动转化成高级语言源程序
    • 即可描述程序逻辑,也可表述数据结构
    • 支持自顶向下,逐步求精方法的使用(通过def符号增加细节)

    判定表

    用于清晰地表示复杂的条件组合和应做的动作之间的对应关系

    判定树

    过程设计语言PDL(伪码)

    面向数据结构的设计方法

    最终目标是得出对程序处理过程的描述。这种方法最适合于在详细设计阶段使用,也就是在完成了软件结构设计之后可以使用面向数据结构的方法来设计每个模块的处理过程。Jackson方法和Warnier方法。

    Jackson图

    • 顺序结构:由一个或多个数据元素组成,每个元素按照确定顺序出现一次。
    • 选择结构:包含两个或多个数据元素,每次使用这个数据时按照一定顺序从这些数据元素中选择一个。
    • 重复结构:根据使用时的条件由一个数据元素出现零次或多次构成。

    改进的Jackson图

    Jackson方法(难点)

    步骤:

    • 分析并确定输入数据和输出数据的逻辑结构
    • 找出输入数据和输出数据中有对应关系的数据单元
    • 通过以下三条规则从描述数据结构的Jackson图导出描绘程序结构的Jackson图:
      • 为每对有对应关系的数据单元,按照他们在数据结构中的层次在程序结构图相应层次画一个处理框。
      • 根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图中的相应层次分别为他们画上处理框
      • 根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图中的相应层次分别为他们画上处理框
    • 列出所有操作和条件,并把它们分配到程序结构图相应的位置
    • 用伪码表示程序

    程序复杂度的定量度量

    McCabe方法

    流图

    根据程序控制流的复杂度定量度量程序的复杂度,这样的度量结果称为程序的环形复杂度
    为突出表现程序的控制流,使用退化的程序流程图即流图。

    计算环形复杂度的方法

    • 流图中的线性无关区域数等于环形复杂度
    • 流图G的环形复杂度V(G)=E-N+2,E是流图中的边的条数,N是节点数。
    • 流图G的环形复杂度V(G)=P+1,P是流图中判定节点的个数。
      通常V(G)<=10为宜

    环形复杂度的用途

    Halstead方法

    根据程序中的运算符(包括关键字)和操作数的总数来度量程序的复杂度

    令N1为程序中运算符出现的总次数,N2为程序中操作数出现的总次数,程序长度N定义为:
    N=N1+N2
    
    程序中不同的运算符的个数n1,不同操作数的个数n2,则程序的总长度为:
    H=n1log(2 n1)+ n2log(2 n2)
    程序中包含的错误的个数:
    E=Nlog(2 n1+n2)/3000
    

    总结

    过程设计在数据设计、体系结构设计和接口设计完成之后进行,它的任务是设计解题的详细步骤,是详细设计阶段应完成的主要工作,有图形,语言,表格三类工具,三类工具各有所长。

    实现(编码和测试)

    编码

    选择程序设计语言

    编码风格

    • 程序内部文档
    • 数据说明
    • 语句构造
    • 输入输出
    • 效率
      • 程序运行时间
      • 存储器效率
      • 输入输出的效率

    软件测试基础

    软件测试的目标

    软件测试的准则

    • 所有测试都能追溯到用户需求
    • 应该远在测试开始之前就制定测试计划
    • 把Pareto原理应用到软件测试中(Pareto原理:二八准则)
    • 应该从小规模的测试开始,并逐步进行大规模的测试
    • 穷举测试是不可能的
    • 为得到最佳的测试效果,应由独立的第三方从事测试工作

    测试方法

    • 黑盒测试(功能测试)和白盒测试(结构测试)

    测试步骤

    • 模块测试(单元测试)
    • 子系统测试(着重测试模块的接口)
    • 系统测试(集成测试):发现软件设计中的错误,也可能发现需求说明中的错误
    • 验收测试(确认测试):发现需求说明书中的错误
    • 平行测试::同时运行新系统和旧系统,以便比较新旧两个系统的处理结果。

    测试阶段的信息流

    单元测试

    测试重点

    • 模块接口
    • 局部数据结构
    • 重要的执行通路
    • 出错处理通路
    • 边界条件

    代码审查

    计算机测试(开发驱动软件和存根软件以供测试)

    集成测试

    自顶向下集成

    深度优先,宽度优先策略把各个模块结合进软件结构:
    步骤:

    • 对主控模块进行测试,测试时用存根程序代替所有的直接附属于主控模块的模块
    • 根据选定的结合策略(深度或者宽度优先),每次用一个实际模块代换一个存根程序
    • 结合进一个模块的同时进行测试
    • 为了保证加入模块没有引进新的错误,可能需要进行回归测试
      优点:
    • 不需要测试驱动程序
    • 能在测试初期实现并验证主要功能
    • 能在早期发现上层模块中的接口错误
      缺点:
    • 需要存根程序
    • 底层关键模块中的错误发现较晚
    • 早起不能够充分展开人力。

    自底向上集成

    不需要存根程序
    步骤:

    • 把低层模块组合成实现某个特定的软件子功能的族。
    • 写一个驱动程序,协调测试数据的输入输出
    • 对由模块组成的子功能族进行测试。
    • 去掉驱动程序,沿软件结构自底向上移动,把子功能组集合组成更大的功能族。
      优缺点与自顶向下集成相反

    回归测试

    确认测试

    确认测试的范围

    通常使用黑盒测试方法

    软件配置复查

    Alpha测试和Beta测试

    • Alpha测试是由用户在开发者场所进行,并且在开发者对用户的指导下进行的。
    • Beta测试有软件的最终用户在一个或多个用户场所进行测试。

    白盒测试

    逻辑覆盖

    • 语句覆盖(每个语句至少执行一次)
    • 判定覆盖(又叫分支覆盖,不仅每个语句执行一次,而且每个判定的每种可能结果都应该执行一次)
    • 条件覆盖(不仅每个语句执行一次,判定表达式中的每个条件都取到各种可能的结果)
    • 判定/条件覆盖(选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果)
    • 条件组合覆盖(使得每个判定表达式中条件的各种可能组合都至少出现一次。
    • 点覆盖(通常和语句覆盖是一致的)
    • 边覆盖(通常和判定覆盖是一致的)
    • 路径覆盖(程序的每条路径都至少执行一次)

    控制结构测试

    基本路径测试

    • 根据过程设计结果画出流图
    • 计算流图的环形复杂度
    • 确定线性独立路径的基本集合(独立路径:至少包含一条在定义该路径前不曾用过的边),集合的大小为环形复杂度
    • 设计可执行基本集合中每条路径的测试用例

    条件测试(检查程序模块中包含的逻辑条件)

    循环测试(测试循环结构的有效性)

    • 简单循环
    • 嵌套循环
    • 串接循环

    黑盒测试技术

    调试

    结果:

    • 找到了原因并把问题改正
    • 没找到原因,假设一个原因,再次测试以验证

    软件可靠性

    基本概念

    软件可靠性的定义

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

    软件可用性

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

    估算平均无故障时间方法

    • 符号
    • 基本假定
    • 估算平均无故障时间
    • 估计总错误数方法
      • 植入错误法
      • 分别测试法

    维护(太累了不想写这个了)

    软件维护的定义

    面向对象方法学引论

    面向对象方法学概述

    面向对象方法学的要点

    • 原则,尽可能模拟人类习惯的思维方式

    面向对象方法学的优点

    • 与人类的思维方式一致
    • 稳定性好
    • 可重用性好
    • 教易开发大型软件
    • 可维护性好

    面向对象概念

    对象

    • 对象的形象表示
    • 对象的定义
    • 对象的特点
      • 以数据为中心
      • 对象是主动的
      • 实现了数据封装
      • 本质上具有并行性
      • 模块独立性好

    其他概念

    • 实例
    • 消息
    • 方法
    • 属性
    • 封装
    • 继承
    • 多态
    • 重载

    面向对象建模

    • 描述系统数据结构的对象模型
    • 描述系统控制结构的动态模型
    • 描述系统功能的功能模型

    对象模型

    表示静态的,结构化的系统的数据性质。

    类图的基本符号

    类图描述类与类之间的静态关系。

    定义类

    定义属性

    语法格式:可见性 属性名:类型名=初值{性质串}
    e.g. - 管理员:String=“未定”{只读}
    
    • 可见性:+(共有)-(私有)#(保护)
    • 类型名表示该属性的数据类型
    • 性质串明确了该属性的所有可能取值,也可用性质串说明属性的其他性质,如,{只读}

    定义服务

    语法格式:可见性 操作名(参数表):返回值类型{性质串}
    

    表示关系的符号

    关联

    • 普通关联
      • 重数:0…1 0…* * 1+ 1…* 1…15 3
    • 关联角色
    • 限定关联(限定词通常放在关联关系的末端的一个小方框内)
    • 关联类

    聚集(聚合)

    是关联的特例,表示类与类之间的关系是整体与部分的关系。

    • 共享聚集
    • 组合聚集

    泛化(继承关系)

    • 普通泛化
      • 抽象类
      • 具体类
    • 受限泛化
      • 多重继承:一个子类可以多次继承同一个基类
      • 不相交继承:一个子类不能多次继承同一个基类,默认不相交
      • 完全继承:父类的所有子类都已在类图中列举出来
      • 不完全继承:父类的所有子类没有在在类图中完全列举出来

    依赖和细化

    • 依赖关系
    • 细化关系

    动态模型

    规定了对象模型中的对象的合法变化序列
    每个类的动态行为用一张状态图来描述,个各类的状态图通过共享事件合并起来,从而构成系统的动态模型。

    功能模型

    表示变化的系统的功能的性质,指明了系统应该做什么,更直接的反映了用户对目标系统的需求
    通常,功能模型由数据流图组成

    用例图

    包含的模型元素有:系统,行为者,用例,用例之间的关系

    • 用例具有以下特征:
      • 用例代表某些用户可见的功能,实现一个具体的用户目标
      • 用例总是被行为者启动,并向行为者提供可识别的值
      • 用力必须是完整的
      • 用例是个类
    • 行为者:与系统交互的人或其他系统
    • 用例之间的关系
      • 扩展关系
      • 使用关系

    用例建模

    • 寻找行为者
    • 寻找用例

    三种模型之间的关系

    面向对象分析

    分析工作包括三部分内容:理解、表达、验证

    面向对象分析基本过程

    三个子模型与五个层次

    • 三个子模型:对象模型、动态模型、功能模型
    • 五个层次
      • 主题层:指导读者理解大型,复杂模型的一种机制。
      • 类与对象层:
      • 结构层
      • 属性层
      • 服务层

    需求陈述

    阐明做什么而不是怎么做。

    建立对象模型

    确定类与对象

    找出候选的类与对象

    筛选出正确的类与对象

    确定关联

    初步确定关联

    筛选

    进一步完善

    划分主题

    确定属性

    识别继承关系

    反复修改

    建立动态模型

    1. 编写脚本
    2. 从脚本中提取事件
    3. 排列事件发生的次序

    编写脚本

    设想用户界面

    画事件跟踪图

    画状态图

    并不是任何类都需要一张状态图描述其行为

    审查动态模型

    建立功能模型

    • 通常在建立对象模型和动态模型后再建立功能模型
    • 由一组数据流图组成

    画出基本系统模型图

    画出功能级数据流图

    定义服务

    • 常规行为
    • 从事件导出的操作
    • 与数据流图中处理框对应的操作
    • 利用继承减少冗余操作

    面向对象设计

    面向对象实现

    软件项目管理

    估算软件规模

    代码行技术

    功能点技术

    信息域特性

    • 输入项数:用户向软件输入的项数。不同于查询
    • 输出项数:软件向用户输出的项数。报表内的数据项不单独计数
    • 查询数:
    • 主文件数:
    • 外部接口数:

    进度计划

    估算开发时间

    甘特图

    估算工程进度

    关键路径

    机动时间

    人员组织

    质量保证

    软件配置管理

    能力成熟度模型

    告一段落!!

    展开全文
  • 软件工程学习笔记《目录》

    千次阅读 2018-11-05 18:36:45
    软件工程学习笔记《目录》 软件工程学习笔记《一》什么是软件工程 软件工程学习笔记《二》代码规范 软件工程学习笔记《三》代码优化和性能测试
    展开全文
  • 软件工程学习笔记选择题总结

    万次阅读 2020-03-09 21:00:14
    第一章 初认软件工程 1.下面的( C)说法是正确的。 A.由于软件是产品,因此可以应用其他工程制品所用的技术进行生产 B.购买大多数计算机系统所需的硬件比软件更昂贵 C.大多数软件系统是不容易修改的,除非它们在...

    第一章 初认软件工程

    1.下面的( C)说法是正确的。
    A.由于软件是产品,因此可以应用其他工程制品所用的技术进行生产
    B.购买大多数计算机系统所需的硬件比软件更昂贵
    C.大多数软件系统是不容易修改的,除非它们在设计时考虑了变
    D.一般来说,软件只有在其行为与开发者的目标一致的情况下才能成功

    2.造成大型软件开发困难的根本原因在于(D )。
    A.开发人员缺乏足够的开发经验
    B.对软件开发的资金投入不足
    C.项目开发进度不合理
    D.软件系统的复杂性

    3.软件会逐渐退化而不会磨损,其原因在于( C)。
    A.软件通常暴露在恶劣的环境下
    B.软件错误在经常使用之后会逐渐增加
    C.不断的变更使组件接口之间引起错误
    D.软件备件很难订购

    4.“软件工程”术语是在( B)被首次提出。
    A.Fred Brooks的《没有银弹:软件工程中的根本和次要问题》
    B.1968年NATO会议
    C.IEEE的软件工程知识体系指南(SWEBOK)
    D.美国卡内基·梅隆大学的软件工程研究所

    5.Ariane 5火箭发射失败的事例告诉我们(D )。
    A.系统环境的变化可能影响软件采集数据的精度、范围和对系统的控制
    B.软件后备系统可以通过复制生成
    C.软件重用必须重新进行系统论证和系统测试
    D.选项A和C
    E.选项A、B和C

    6.软件工程的基本目标是( A)。
    A.开发足够好的软件
    B.消除软件固有的复杂性
    C.努力发挥开发人员的创造性潜能
    D.更好地维护正在使用的软件产品

    7.软件工程方法是(B )。
    A.为了获得高质量软件而实施的一系列活动
    B.为开发软件提供技术上的解决方法
    C.为支持软件开发、维护、管理而研制的计算机程序系统
    D.为了理解问题和确定需求而采取的一些技术和方法

    8.下面的( B)是正确的。
    A.运行正确的软件就是高质量的软件。
    B.软件质量是在开发过程中逐渐构建起来的。
    C.软件产品质量越高越好,最理想的情况是达到“零缺陷”。
    D. 软件质量是由产品的功能、性能、易用性等外在特性决定的。

    9.在Garvin多维度模型中,可靠性是指(C )。
    A.软件产品提供了让用户产生惊喜的特性
    B.软件实现了用户需要的功能和性能
    C.软件在规定时间和条件下无故障持续运行
    D.软件符合国家或行业的相关标准

    10.(C )是软件从一个硬件或软件环境转换到另一环境的容易程度。
    A.易用性 B.可维护性 C.可移植性 D. 性能

    第二章 软件开发过程

    1.下面的( D)决策是在需求分析时做出的。
    A.自动售票机系统的开发时间预计是6个月
    B.自动售票机系统由用户界面子系统、价格计算子系统以及与中心计算机通信的网络子系统组成
    C.自动售票机系统已经达到交付的要求
    D.自动售票机系统将为使用者提供在线帮助

    2.下面的( B)决策是在系统设计时做出的。
    A.自动售票机系统的开发时间预计是6个月
    B.自动售票机系统由用户界面子系统、价格计算子系统以及与中心计算机通信的网络子系统组成
    C.自动售票机系统已经达到交付的要求
    D.自动售票机系统将为使用者提供在线帮助

    3.下面的( E)是软件构造活动的任务。
    A.构建软件组件
    B.设计用户界面
    C.实施组件的单元测试
    D.评估组件的质量
    E.选项A和C
    F.选项A、B、C和D

    4.瀑布模型是(A )。
    A.适用于需求被清晰定义的情况
    B.一种需要快速构造可运行程序的好方法
    C.一种不适用于商业产品的创新模型
    D.目前业界最流行的过程模型

    5.增量模型是( B)。
    A.适用于需求被清晰定义的情况
    B.一种需要快速构造核心产品的好方法
    C.一种不适用于商业产品的创新模型
    D.已不能用于现代环境的过时模型

    6.原型化模型是(B )。
    A.适用于客户需求被明确定义的情况
    B.适用于客户需求难以清楚定义的情况
    C.提供一个精确表述的形式化规格说明
    D.很难产生有意义产品的一种冒险模型

    7.开发一个支持3D打印的操作系统最适合采用(C )。
    A.瀑布模型
    B.原型化模型
    C.增量开发
    D.可转换模型

    8.开发一个铁路信号控制系统最适合采用(D )。
    A.瀑布模型 B.原型化模型 C.增量开发 D. 可转换模型

    9.下面的( A)不是敏捷开发方法的特点。
    A.软件开发应该遵循严格受控的过程和详细的项目规划
    B.客户应该和开发团队在一起密切地工作
    C.通过高度迭代和增量式的软件开发过程响应变化
    D.通过频繁地提供可以工作的软件来搜集人们对产品的反馈

    10.关于Scrum的每一次冲刺(Sprint),下面的(D )是正确的。
    A.Sprint是一个不超过4周的迭代,其长度一旦确定,将保持不变。
    B.Sprint的产出是一个可用的、潜在可发布的产品增量。
    C.Sprint在进行过程中,其开发目标、质量验收标准和团队组成不能发生变化。
    D.以上所有选项

    第三章 编写高质量代码

    1.下面的(D )不是良好编码的原则。

    A.在开始编码之前建立单元测试
    B.建立一种有助于理解的直观布局
    C.确保注释与代码完全一致
    D.保持变量名简短以便代码紧凑

    2.下面的(C )是错误的。
    A.在程序设计中使用括号以改善表达式的清晰性
    B.不要修补不好的程序,要重新写
    C.在程序设计中应尽可能对程序代码进行优化
    D.不要在注释中重复描述代码

    3.为了保证软件的质量,使其具有较好的可维护性,关键在于(B )。
    A.选择合适的程序设计语言
    B.选择好的程序设计风格
    C.具有好的数据结构
    D.选择好的运行环境

    4.下面的( A)是对提高程序编码效率没有影响的。
    A.变量名的使用
    B.选择良好的设计方法
    C.选择良好的算法
    D.选择良好的数据结构

    5.下面的(C )不是一种好的做法。
    A.好的注释应解释为什么,而不是怎么样。
    B.好的命名应一目了然,不需要读者去猜,甚至不需要注释。
    C.如果项目中原有代码不符合新的规范,应允许其存在,同时在新的代码中要延续原有的风格。
    D.如果项目中原有代码不符合新的规范,应允许其存在,但不应在新的代码中延续旧的风格。

    6.下面的( B)不是模块化设计的目的。
    A.降低程序设计的复杂性
    B.清楚地描述系统的功能和性能
    C.易于维护和功能扩展
    D.提高模块的可靠性和复用性

    7.下面的( C)说法是错误的。
    A.代码审查用于检查源代码是否达到模块设计的要求
    B.代码在审查之前必须要成功地编译通过
    C.代码审查比运行程序进行测试的效率低
    D.代码审查可以发现不符合团队代码规范的地方

    8.关于代码性能优化,下面( D)是错误的。
    A.任何优化都不能破坏代码的正确性
    B.应以提高程序的全局效率为主,局部效率为辅
    C.应先通过测试找出限制效率的真正瓶颈
    D.要优先改进耗时最多的部分

    9.下面的Python语句中,(D )是没有错误且写得最规范的。
    A import os, sys, random, math
    B n += 1; m += n; print(m)
    C class = Class()
    D eturn [i ** 2 for i in range(n)]

    1. 下面的( A)语句风格是最不利于维护的。
      A return s[‘name’] if s[‘age’] >= 18 else s[‘nickname’] if s[‘age’] > 14 else 'anonymous’
      B main(sys.argv[1:])
      C from my_module import (Class1, Class2, Class3, Class4)
      D a, b = b, a

    第四章 单元测试

    1.单元测试内容不包括(B )。
    A.出错处理
    B.全局数据结构
    C.独立路径
    D.模块接口

    2.下面的(D )是错误的。
    A.静态测试是不运行被测程序,仅通过检查和阅读等手段来发现程序中的错误
    B.动态测试是实际运行被测程序,通过检查运行的结果来发现程序中的错误
    C.动态测试可能是黑盒测试,也可能是白盒测试
    D.白盒测试是静态测试,黑盒测试是动态测试

    3.关于等价类划分,下面的(C )说法是正确的。
    A.等价类划分是将输入域划分成尽可能少的若干子域
    B.同一输入域的等价类划分是唯一的
    C.用同一等价类中的任意输入对软件进行测试,软件都输出相同的结果
    D.对于相同的等价类划分,不同测试人员选取的测试用例集是一样的

    4.白盒测试是根据程序的( C)来设计测试用例。
    A.功能 B. 性能 C. 内部逻辑 D. 内部数据

    1. 关于测试覆盖率,下面的( A)说法是错误的。
      A.测试覆盖率是度量代码质量的一种手段
      B.测试覆盖率是度量测试完整性的一种手段
      C.测试覆盖率意味着有多少代码经过测试
      D.不要盲目地追求100%测试覆盖率

    6.在单元测试中,( B)是用来代替被测模块的子模块的。
    A.驱动模块 B.桩模块 C.通讯模块 D. 代理模块

    7.在下面列举的测试覆盖中,( D)是最强的逻辑覆盖准则。
    A.语句覆盖 B.条件覆盖 C.判定覆盖 D.条件组合覆盖

    8.一个判定中的复合条件表达式为(A>2)or(B≤1),为了达到100%条件覆盖率,至少需要设计( B)测试用例。
    A. 1 B.2 C. 3 D.4

    9.条件覆盖要求( A)。
    A.每个判定中每个条件的所有取值至少满足一次
    B.每个判定至少取得一次“真”值和一次“假”值
    C.每个判定中每个条件的所有可能取值组合至少满足一次
    D.每个可执行语句至少执行一次

    10.( C)要求每个判定中所有条件的可能取值至少执行一次,而且每个判定的可能结果也至少执行一次。
    A. 判定覆盖 B. 条件覆盖 C. 判定条件覆盖 D. 条件组合覆盖

    第五章 团队开发管理

    1.在攻克技术难题时,最佳的开发团队组织模型是(A )。
    A. 民主式结构 B. 主程序员式结构 C. 矩阵式结构 D. 以上所有选项都不是

    2.下面的(E )很有可能会促进高效项目团队的建设。

    A.团队成员超过 20 人
    B.团队成员部分时间参与项目
    C.团队成员向多个经理汇报
    D.团队成员被指派到项目中
    E.以上选项都不是

    3.下面的( A)沟通方式最利于协助解决复杂的问题。
    A. 口头 B. 书面 C. 电子邮件 D. 即时通讯工具

    4.软件开发团队的每一个成员都应该参与计划活动,以便(C )。
    A. 降低计划的粒度 B. 深入地分析需求 C. 所有成员同意该计划 D. 开始设计

    5.某大型化工产品公司计划开发一个新的计算机应用,用以跟踪原材料的使用情况。这个应用由公司内部组成的开发团队进行开发,已有多年开发类似应用的经验。假设初始估计的程序规模是32000行源代码,使用基本COCOMO模型进行估算,开发工作量大约是(B )人月。
    A.32 B.91 C.230 D.146

    1. 敏捷开发方法通过( F)管理不可预测性。
      A.非常仔细地收集和定义需求
      B.制定详细的开发计划
      C.软件增量必须在较短周期内发布
      D.软件过程必须逐渐适应变化
      E.选项A和B
      F.选项C和D

    7.关于Sprint,下面的(B )是错误的。
    A.一个Sprint通常是一个1-4周的迭代
    B.Sprint长度在开发过程中是可以调整的
    C.需求在一个Sprint中是不允许变化的
    D.sprint的产出是“完成”的、可用的、潜在可发布的产品增量

    8.在每日站立会议上,下面(C )不是每个团队成员需要回答的主要问题。
    A.从上次Scrum站立会议后你做了什么?
    B.你遇到哪些障碍或困难?
    C.你所遇到问题的原因是什么?
    D.你打算到下次Scrum站立会议完成什么?

    9.下面的(A )不属于产品负责人(Product Owner)的职责范围。
    A.组织每日站立会议
    B.定义产品需求
    C.确定需求优先级
    D. 验收迭代结果
    E.负责产品的投资回报

    1. 软件配置管理的目的是( B)。
      A.降低开发成本
      B.控制软件修改
      C.减少混乱
      D.提高软件开发效率
      E.提高正确率

    第六章 需求获取与文档化

    1. 下列哪项需求描述属于业务需求描述?C
      A. 我们的任务是无缝集成有竞争力的软件信息服务来解决商业问题
      B. 我们的目标是让客户将我们的品牌和高质量联系在一起
      C. 我们公司的主营业务是销售飞机票
      D. 公司网站上销售的产品必须满足所有食品药品监管需求

    2. 下面哪项是百货店收银系统的非功能性需求?B
      A. 提供新鲜的蔬菜和水果
      B. 买10个或10个以下商品的客户可以走特殊通道
      C. 设有存包处
      D. 为雇员发工资

    3. 以下哪种方法最适用于身处多个不同地点的人在各自方便的时间参与并围绕同一个主题表达自己的观点?A
      A. 问卷调查
      B. 面谈
      C. 群体诱导
      D. 文档分析

    4. 在一个列车控制软件的需求文档中,我们发现了以下两条需求描述:“列车车门在两个停靠站之间要保持关闭”;“列车发生紧急停车时,要打开车门”。这里出现的需求问题是什么?D
      A. 无法测试的需求 B. 不完整的需求 C. 含糊的需求 D. 矛盾与不一致的需求

    5. 获取软件系统需求不包括以下的哪个来源?B
      A. 系统相关领域的法律法规
      B. 系统的质量控制团队
      C. 系统的业务流程描述
      D. 其他类似系统产品

    6. 软件需求工程师的职责不包括以下的哪一项?C
      A. 撰写需求规格说明书
      B. 与用户持续沟通,了解用户对产品的期望
      C. 控制项目的风险
      D. 对需求的优先级进行排序

    7. 在选择软件需求获取技术的时候,以下哪种策略最优?D
      A. 考虑尚不了解的那部分需求的特点
      B. 考虑需求工程师本身对各种获取技术的驾驭能力
      C. 考虑目前系统所属的行业及应用领域的现状
      D. 综合考虑上述因素

    8. 以下哪种需求获取方法是面向创新型产品的?A
      A. 竞争性需求分析
      B. A/B测试
      C. 用户行为数据采集
      D. 可用性分析

    9. 在敏捷开发方法中,用户故事(User Story)的作用是什么?F
      A. 定义需要发布给最终用户的软件特性和功能
      B. 确定发布每一次增量的日程表
      C. 用于代替详细的活动计划
      D. 用于估算构建当前增量所需要的努力
      E. 选项A和C
      F. 选项A和D

    10. 下面的哪一种说法是正确的?D
      A. 故事点是一个绝对度量单位
      B. 故事点估算一定要做到非常精确
      C. 故事点表示开发一个用户故事或特性的复杂度
      D. 故事点表示开发一个用户故事或特性所要付出的工作量

    第七章 软件系统设计

    1. 随着软件系统的规模和复杂性越来越大,( D)变得更加重要。
      A. 算法的选择
      B. 数据结构的设计
      C. 数据库的构造
      D. 系统的全局结构设计

    2. 下面的说法( A)是错误的。
      A. 软件体系结构的最佳表示形式是一个可执行的软件原型
      B. 软件体系结构描述是不同项目相关人员之间进行沟通的使能器
      C. 良好的分层体系结构有利于系统的扩展与维护
      D. 设计模式是从大量成功实践中总结出来且被广泛公认的实践和知识

    3. 良好设计的特征是( E)。
      A. 模块之间呈现高耦合
      B. 实现分析模型中的所有需求
      C. 包括所有组件的测试用例
      D. 提供软件的完整描述
      E. 选项B和D
      F. 选项B、C和D

    4. Word、Excel等应用系统适合采用( B)结构风格。
      A. 层次系统 B. 事件系统 C. 解释器 D. 管道-过滤器

    5. 与C/S架构的信息系统相比,B/S架构的信息系统的优势是(B )。
      A. 具备更高的安全性
      B. 更容易部署和升级维护
      C. 具备更强的事务处理能力,易于实现复杂的业务流程
      D. 用户界面友好,具有更快的响应速度

    6. 对于观察者模式,下面的( C)说法是错误的。
      A. 观察者的更新是被动的
      B. 被观察者可以通知观察者进行更新
      C. 观察者可以改变被观察者的状态,再由被观察者通知所有观察者
      D. 以上所有选项

    7. 设计目标可分成性能、可靠性、成本、维护和最终用户等类型,下面(A )描述的是性能目标。
      A. 当用户发出任何命令后,系统必须在1秒内将信息反馈给用户。
      B. 即使在网络失败的情况下,火车票发售系统也必须能够成功地提交火车票。
      C. 火车票发售系统的机器外壳必须允许安装新按钮以便增加新的不同票价。
      D. 系统用户界面应该防止用户以错误的顺序执行命令。

    8. 下面的(B )架构可以更好地实现Web应用的前后端分离。
      A. MVC
      B. Restful API
      C. RPC

    9. 一个创业团队想要开发一款社交App,但是他们对于可能的发展的业务仍不十分明确,此时希望能够开发一个相对简单的版本进行原始的需求验证与测试,这种情况比较适合选择(B )数据库。
      A. Mysql
      B. Mongo
      C. Redis

    10. 如今社交文化横行,大数据分析遍地,几乎所有的应用与产品都多少会与社交网络或大用户量、大数据相关联。如果准备开发一个较完整的社交网络应用,支持10万以上日活跃用户进行各种点赞、评论等交互活动,应该采用(D )数据库或数据库组合。
      A. Mysql
      B. Mongo
      C. Mysql + Redis
      D. Mongo + Redis

    第八章 软件交互设计

    1、 阅读下面给出的文献 “A Brief History of Human-Computer Interaction Technology”,其中第一个装载GUI操作系统的计算机是( C)。
    A 苹果公司的Macintosh
    B微软公司的Windows
    C 施乐公司的Alto
    D施乐公司的Star
    E 施乐公司的Lisa
    2、 思考一下,乔布斯为苹果公司制定的手机上的黄金法则是什么?为什么?采用现状及其原因?这里的黄金法则是指(A)。
    A单手操作手机,屏幕尺寸3.5英寸
    B单手操作手机,屏幕尺寸4.7英寸
    C双手操作手机,屏幕尺寸4.7英寸
    D双手操作手机,屏幕尺寸4.0英寸

    3、 同学们上网用一下谷歌界面、雅虎界面和bing界面,都是检索任务的软件,差异在哪里?这几款产品目前用户量的差异很大程度上是界面在注意力设计上的差异,请进行分析。其中,最能使用户集中注意力的界面设计是( A)。
    A谷歌 B雅虎 Cbing

    4、 视频(电影、电视、动画、数字视频,等)帧律的设置依据是( C)。
    A根据机器的处理能力
    B根据个人偏好
    C根据人的视觉暂留时间

    5、 分析课件中数字软键盘布局上的不一致现象,为什么在同一款手机上,不同应用中的数字键盘的布局不一致?其中(B )应用中的数字软键盘布局是一致的。
    A电话拨号和计算器
    B通讯录和电话拨号
    C计算器和通讯录

    6、 人们不会把 [ ] 中的“](”认作一对,原因是视觉认知中的( D)定律在起作用。
    A连续律 B接近律 C相似律 D对称律

    7、 输出一列数值时,需要考虑对齐方法,你会选择( D)方法。
    A左对齐 B右对齐 C两端对齐 D小数点对齐

    8、 用KLM自己计算课件上的两个温度转换器软件界面的操作时间。后者交互效率高,( B)原因更本质。
    A没有在两种输入设备间切换
    B界面没有需要用户额外表达的信息
    C用户操作的更快
    DKLM的计算结果小

    9、 访问 http://fww.few.vu.nl/hci/interactive/fitts/ 并对其中实验5的结果进行分析,下面的( C)是正确的。
    A所采用的两种输入设备都是目标越大访问时间越长
    B在所采用的两种输入设备上,只有其中一个是目标越大访问时间越长
    C在所采用的两种输入设备上,实验时间均与Distance/Width呈正相关

    10、 访问http://www.asktog.com/columns/022DesignedToGiveFitts.html 并为每个问题答案寻找实例界面,其中环形菜单的设计是( C)。
    A不知如何启动,毫无意义
    B对美工的设计能力要求很高
    C到达每个菜单项时手的移动距离短且一样

    第九章 软件系统测试

    1. 软件测试的目的是( D)。
      A. 避免软件中出现错误
      B. 证明软件的正确性
      C. 解决测试中发现的错误
      D. 发现软件中潜在的错误

    2. 下面(C)说法是错误的。
      A. 测试应该尽早不断地执行
      B. 软件错误具有聚集性,对存在错误的部分应重点测试
      C. 软件测试是提高软件质量的决定性因素
      D. 测试用例需要定期评审和修改,并且要不断增加新的测试用例

    3. 下面的( A)不是集成测试的内容。
      A. 对软件中最小可测试单元进行检查和验证
      B. 把各个模块连接在一起时,穿越模块接口的数据是否会丢失
      C. 一个模块的功能是否会对另一个模块的功能产生不利的影响
      D. 若干子功能组合在一起是否能产生预期的主功能

    4. 下面的(B )是错误的。
      A. 功能测试是根据需求规格说明验证产品的功能实现是否符合要求
      B. 压力测试是检测在极限环境中使用系统时施加在用户上的压力
      C. 安全测试是检测系统中的保护机制是否可以保护系统免受非正常的攻击
      D. 安装测试是保证应用程序能够被成功地安装

    5. ( B)是为了有效地发现软件缺陷而精心设计的少量测试数据。
      A. 测试计划
      B. 测试用例
      C. 缺陷报告
      D. 测试报告

    6. 错误推测法是(D )。
      A. 将输入数据划分成若干个等价类,从中选取有代表性的数据作为测试用例
      B. 将所有可能的输入数据作为测试用例
      C. 运用场景对系统的功能点或业务流程进行描述,对应不同的业务场景生成相应的测试用例
      D. 根据经验或直觉推测程序中可能发生错误的情况,编写检查它们的测试用例

    7. Web链接测试不包括(A )。

    A. 客户端与服务器端的连接速度
    B. 无链接指向的页面
    C. 错误的链接
    D. 不存在的页面

    1. (C )是检测Web应用系统提供信息的正确性、准确性和相关性 。
      A. 表单测试 B. 链接测试 C. 内容测试 D. Cookies测试

    2. 下面的(B )不是软件性能的指标。
      A. 响应时间 B. 并发进程数 C. 吞吐量 D. 资源利用率

    3. 下面的( A)不是性能测试的目的。
      A. 达到百分之百的语句覆盖
      B. 验证软件系统是否能够满足预期的性能要求
      C. 发现软件系统中存在的性能瓶颈
      D. 评估软件系统的稳定性和可靠性

    第十章 软件交互与维护

    1. 下面的( A)是错误的。
      A. 软件交付的主要工作是将程序代码和相关文档交给用户
      B. 用户培训是帮助用户理解产品并掌握系统的使用和操作
      C. 软件部署是通过配置、安装和激活等活动保证软件系统的正常运行
      D. 持续集成是频繁持续地将团队成员的工作进行集成

    2. 下面的( C)是正确的。
      A. 只有质量差的软件产品才需要维护
      B. 软件的维护成本通常比开发成本低
      C. 软件的不断修改将导致系统结构的恶化
      D. 重新开发一个新系统通常要比再工程的成本要低

    3. ( B)是由于计算机软件和硬件环境变化而修改软件的过程。
      A. 改正性维护
      B. 适应性维护
      C. 完善性维护
      D. 预防性维护

    4. 下面的(A )不是软件再工程活动。
      A. 增加新的功能
      B. 逆向工程
      C. 程序结构改善
      D. 数据再工程

    5. 逆向工程通常用在软件生命周期的( D)阶段,它是从源代码或目标代码中提取设计信息。
      A. 需求分析
      B. 软件设计
      C. 软件测试
      D. 软件维护

    展开全文
  • 操作系统与软件工程学习笔记

    千次阅读 2015-12-15 16:22:06
    操作系统与软件工程学习笔记

    慢慢发现,根据需求完成任务代码其实并不是很难,遵循一些项目的规范,采用项目中统一的技术去实现对应的功能。东西都已经封装好了,你只需要使用一些工具或框架就可以轻易实现。

    但是,你想要有质的提高,却抛不开基础知识,因为思维是最重要的。因此对一些基础知识进行回顾,以下是对操作系统回顾后的总结。

    在回顾中,收获最大的是操作系统主要功能中的“内存扩充”,很值得借鉴学习的!

    操作系统的基本特性

    (1)并行性与并发性,并行性是指两个或多个事件在同一时刻发生;并发性是指两个或过个事件在同一时间间隔内发生;在多道程序环境下,并发性是指一段时间内宏观上有多个程序在同时运行,但是在但处理机系统中,每一刻却仅能有一道程序执行,故微观上这些程序只能分时地交替执行。对于多处理机。可以实现并行执行,多个程序同时运行。
    (2)引入进程,进程是指在系统中能独立运行并作为资源分配的基本单位。
    (3)引入线程,通常把进程作为分配资源的基本单位,而把线程作为独立运行的独立运行和独立调度的基本单位。
    (4)共享性,在操作系统环境下,所谓共享,是指系统中的资源可供内存中多个并发执行的进程(线程)共同使用。
    (5)互斥共享,仅当A进程访问完并释放该资源后,才允许另一进程对该资源访问。
    (6)同时访问,交替访问。
    (7)虚拟技术,操作系统中所谓的“虚拟”是指通过某种技术把一个物理实体变为若干个逻辑上的对应物。虚拟技术分为时分复用技术和空复用技术。
    (8)时分复用技术,人们利用时分复用技术,将一条物理信道虚拟为多条逻辑信道,将每条信道提供一对用户通话。为每道程序建立一个进程,让多道程序并发地执行。以此来分时使用一台处理机。
    (9)空分复用技术,通常一台机器上只配置一台硬盘,我们可以通过虚拟磁盘技术将一台硬盘虚拟为多台虚拟磁盘。
    (10)异步,如打印请求,而此时打印机正在为其他进程打印,由于打印机术语临界资源,因此正在执行的进程必须等待,且放弃处理机,知道打印机空闲,并在此把处理机分配该进程时,该进程方能继续执行。进程是以人们不可预知的速度向前推进,此即进程的异步性。

    操作系统的主要功能

    (1)进程控制,主要功能时为作业创建进程,撤销已结束的进程,以及控制进程在运行过程中的状态转换。
    (2)进程同步,进程同步的主要任务是为多个进程(含线程)的运行进行协调。
    (3)进程通信,进程通信的任务就是用来实现在相互合作的进程之间的信息交换。
    (4)调度,分为作业调度和进程调度。作业调度的基本任务是从后备队列中按照一定的算法,选择出若干个作业,为它们分配运行所需要的资源(首先分配内存);进程调度的任务是从进程的就绪队列中,按照一定的算法选出一个进程,把处理机分配给它。
    (5)内存分配,允许正在运行的程序申请附加的内存空间。
    (6)内存保护,确保每道用户程序都只在自己的内存空间内运行,彼此互不干扰。
    (7)在多道程序环境下,每道程序不可能都从“0”地址开始装入内存,这就致使地址空间内的逻辑地址和内存空间中的物理地址不相一致。为使程序正确运行,存储器管理必须提供地址映射功能。
    (8)内存扩充,用于实现请求调入功能和置换功能。请求调入功能允许在装入一部分用户程序和数据的情况下,便能启动该程序运行。在程序运行过程中,若若发现要继续运行时所需的程序和数据尚未装入内存,可向OS发出请求,有OS从磁盘中将所需部分调入内存。置换功能,若发现在内存中已无足够的空间来装入需要调入的程序和数据时,系统应能从内存中的一部分暂时不用的程序和数据调至盘上,以腾出内存空间。
    (9)缓冲管理,例如在I/O设备和CPU之间引入缓冲,可有效缓和两者速度不匹配的矛盾,提高CPU利用率。
    (10)设备分配,处理过程是:设备处理程序首先检查I/O请求的合法性,了解设备状态是否空闲的,了解有关的传递参数以及设置设备的工作方式,blabla…..
    (11)文件管理功能,分为文件存储空间管理、目录管理、文件读写/管理和保护
    (12)操作系统与用户之间的接口,分为用户接口和程序接口。用户接口是提供给用户使用的接口,用户通过该接口取得操作系统的服务;程序接口是提供给程序员在编程时使用的接口,是用户程序取得操作系统服务的唯一途径。


    一、软件生命周期
    软件定义
    软件任务立项:名称、性质、目标、意义、规模
    项目可行性分析:技术、经济、操作可行性分析
    制定项目计划:人员、组织、进度资金、设备等多方面
    软件需求分析:功能、性能、数据、操作等方面
    软件开发期
    软件概要设计:软件构造、接口、全局数据和数据环境、模块结构、模块接口等
    软件详细设计:各个模块的程序算法和局部数据结构等细节
    编码和单元测试:程序员完成实现并单元测试
    系统集成测试:把测试过的各个模块使用如渐增集成策略组装起来
    系统确认验证:需要以用户为主体、以需求规格说明书对软件的定义为依据进行逐项确认。
    软件运行与维护

    二、软件开发六大模型
    (1)瀑布模型
    瀑布模型是一种基于里程碑的阶段过程模型,它所提供的里程碑式 的工作流程,为软件项 目按规程管理提供了便利,例如,按阶段制定项目计划,分阶段进行成本核算,进行阶段性评 审等;并对提高软件产品质量提供了有效保证。
    瀑布模型的作用还体现在文档上。每个阶段都必须完成规定的文档,并在每个阶段结束前 都要对所完成的文档进行评审。这种工作方式有利于软件错误的尽早发现和尽早解决,并为软 件系统今后的维护带来了很大的便利。
    瀑布模型是一种线性模型,要求项目严格按规程推进,必须等到所有开发工作全部作完以后才能获得可以交付的软件产品。应该讲,通过瀑布模型并不能对软件系统进行快速创建,对 于一些急于交付的软件系统的开发,瀑布模型有操作上的不便。
    瀑布模型主要适合于需求明确,且无大的需求变更的软件开发,例如,编译系统、操作系统等。但是,对于那些分析初期需求模糊的项目,例如那些需要用户共同参加需求定义的项目,瀑布模型也有使用上的不便。

    (2)原型模型,分为快速原型方法、原型进化模型
    <1>快速原型方法
    快速原型方法是原型模型在软件分析、设计阶段的应用,用来解决用户对软件系统在需求 上的模糊认识,或用来试探某种设计是否能够获得预期结果。
    快速原型是用来获取用户需求的,或是用来试探设计是否有效的。一旦需求或设计确 定下来了,原型就将被抛弃。因此,快速原型要求快速构建、容易修改,以节约原型创建成本、 加快开发速度。快速原型往往采用一些快速生成工具创建,例如4GL 语言。目前,MicrosoftVisual Basic、Inprise Delphi 等基于组件的可视化开发工具,也被应用于原型创建之中,并 且都是非常有效的快速原型创建工具,而且还可用于原型进化。
    快速原型是暂时使用的,因此并不要求完整。它往往针对某个局部问题建立专门原型, 如界面原型、工作流原型、查询原型等。
    快速原型不能贯穿软件的整个生命周期,它需要和其他的过程模型相结合才能产生作 用。例如,在瀑布模型中应用快速原型,以解决瀑布模型在需求分析时期存在的不足。
    <2>原型进化模型
    原型进化对开发过程的考虑是,针对有待开发的软件系统,先开发一个原型系统给用户使 用,然后根据用户使用情况的意见反馈,对原型系统不断修改,使它逐步接近并最终到达开发目标。跟快速原型不同的是,快速原型在完成需求定义后将被抛弃,而原型进化所要创建的原型则是一个今后将要投入应用的系统,只是所创建的原型系统在功能、性能等方面还有许多不足,还没有达到最终开发目标,需要不断改进。

    (3)增量模型
    增量模型是瀑布模型和原型进化模型的综合,它对软件过程的考虑是:在整体上按照瀑布 模型的流程实施项目开发,以方便对项目的管理;但在软件的实际创建中,则将软件系统按功 能分解为许多增量构件,并以构件为单位逐个地创建与交付,直到全部增量构件创建完毕,并 都被集成到系统之中交付用户使用。
    如同原型进化模型一样,增量模型逐步地向用户交付软件产品,但不同于原型进化模型的 是,增量模型在开发过程中所交付的不是完整的新版软件,而只是新增加的构件。

    (4)螺旋模型
    螺旋模型即是一种引入了风险分析与规避机制的过程模型,是瀑布模型、快速原型方法和 风险分析方法的有机结合。
    螺旋模型基本方法是,在各个阶段创建原型进行项目试验,以降低各个阶段可能遇到的项 目风险。例如,为了降低用户对软件界面不满意的风险,可以在需求分析阶段建立“界面原型”;为了降低软件不能按设计要求实现的风险,可以在设计阶段针对所采用的技术建立“仿真试探原型”。

    (5)喷泉模型
    喷泉模型的过程方法所考虑的是,基于面向对象方法所带来的便利,对软件的分析、设计和实现按照迭代的方式交替进行,并通过进化的方式,使软件分阶段逐渐完整、逐步求精。例如,第一阶段软件开发的目标可以是软件的基本功能;第二阶段可以是在第一阶段建立的软件的基础上,对软件进行进一步的完善,并实现软件的主要功能;第三阶段则是在第二阶段的基础上,对软件进行更加完整的开发,并以实现软件全部功能作为创建目标。

    (6)组件复用模型
    自有软件开发以来,软件复用就一直存在,并产生了一些比较常用的软件复用方法。传统的软件复用方法是建立源程序函数库,可以把这些函数用在许多不同的软件上面。而在面向对 象技术中,软件复用则可以通过建立类模块来实现。由于大多数的类模块具有继承性,因此, 比起传统方法,基于类模块的复用效果要好一些。
    组件技术是基于面向对象技术发展起来的,可以把组件看作为一个盒子,它里面封装了许多个类模块。因此,组件比类更大、更 抽象,其中包含了更多的功能,更具有通用性,更加有利于复用。

    展开全文
  • 软件工程学习笔记《四》需求分析

    千次阅读 2018-11-08 20:26:16
    文章目录软件工程学习笔记《目录》需求工程师当代的需求工程师需要具备的能力当代的需求工程师需要努力的方向当代的需求工程师需要注意的错误需求的定义需求目标需求分析的实质需求分析的关键应该涵盖的内容?...
  • 文章目录软件工程过程软件工程方法软件质量软件质量如何评价软件的质量模型为什么内存缓冲区是2048或4096 软件工程过程 软件工程方法 软件质量 软件质量如何评价 软件的质量模型 为什么内存缓冲区是2048或4096...
  • 软件工程学习笔记(一)

    千次阅读 2020-03-09 17:53:44
    A 我们的任务是无缝集成有竞争力的软件信息服务来解决商业问题 B我们的目标是让客户将我们的品牌和高质量联系在一起 C我们公司的主营业务是销售飞机票 D公司网站上销售的产品必须满足所有食品药品监管需求 2.下面哪...
  •  希望对学弟学妹们学习复习或者对软件工程学习有兴趣的朋友有所帮助!第一章 概述部分软件工程:是以质量为核心,以满足客户需求为基础,以提高生产率和降低开发成本为目的,研究、建立和应用的贯穿整个软...
  • 软件工程学习笔记(五)~面向对象测试

    千次阅读 多人点赞 2020-03-23 17:22:34
    我们在为一家互联网电商开发订单处理软件,该公司从供应商那里购买产品,然后销售给客户。这家公司在线发布商品目录,并将其推送给客户和其他感兴趣的人。         客户以...
  • 软件工程学习笔记

    千次阅读 2014-03-09 00:32:50
    软件工程 要谈软件工程,海了去了。 先从基本的说起: 1,什么是软件:  软件并不等同于程序!  一般来说:软件==计算机程序+数据+软件文档;  由于我们的惯性思维:很容易忽略软件文档的存在,但它的的确确是...
  • 题目 建立“选课“的顺序图模型。 标准答案 补充 借书和还书两个用例的顺序...需要更多学习资料、源码等资源的小伙伴 可以去海轰的微信公众号:海轰Pro 回复:海轰 就可以啦(注意主页的使用说明哦o( ̄︶ ̄)o) ...
  • 设计的总体原则软件架构设计反映系统整体的组织结构和基本特征• 软件的层次结构• 模块相互作用的方式 • 全局的、重要的数据变量和数据结构 • 数据库的逻辑结构 • 接口详细设计• 模块逻辑的详细设计• 系统数据...
  • 如何在开源社区提问? 如果你提问没有人回答!那么是不是没有人会呢?其实不然!可能你提问的方式本身就是不对的,我们来看...34100325_X 软件工程(自主模式)2.5代码性能分析 运行结果 参数解释 ●ncalls:表示...
  • 项目管理对人力和资源进行管理、分配和调度的过程以架构为中心的项目管理 软件度量一个产品过程的某个属性的程度、数量、尺寸、容量等的定量指标软件特征量面向尺寸的特征量面向功能的特征量 计算功能点 FP =count_...
  • 题目 程序接受 3 个整数 a、b 和 c 作为输入,用做三角形的边。整数 a、b 和 c 必须满足以下条件: C1.1≤a≤200 C2.1≤b≤200 C3.1≤c≤200 C4.a C5.b C6.c 根据边界值设计测试用例。...
  • 软件工程学习笔记(六)~状态图

    千次阅读 2020-03-26 10:21:36
    题目 根据借书的顺序图,绘制发生借书这个用例时,图书管理员所有操作之间的状态图。 正确答案
  • 问题定义软件开发过程当中的一个定义要解决的问题并确定系统范围的活动。较小的投入要做什么,为什么要做早期判断达成共识 可行性研究以相对短的时间和相对低的成本来确定给定的问题在其约束条件内是否有解、有几种...
  • 1.软件生存周期:软件是会迭代的,软件从生到死的整个过程被称为软件生命周期(Software Development Life Cycle,SDLC)。 一般的,可分为定义、开发和运行三个时期,又可细分为以下六个阶段:问题的定义和可行性...
  • 观点2:重构改善了既有代码的设计,颠覆了传统软件工程理论。 观点3:设计属于软件开发流程的一部分,必须随着程序的演化而演化。因此严格意义上的先设计后编码是不可取的。 观点4:设计与编码是矛盾的(哲学意义...
  • 软件工程学习笔记(1)

    千次阅读 2005-04-05 22:57:00
    概述 1.1 软件工程的常见问题 (1)什么是软件?----------程序+软件正常运行的相关文档+配置信息通用软件:软件描述由自己完成.定制软件:软件描述由客户提出. (2)什么是软件工程?----------涉及软件各个方面的一门...
  • cap2.基于计算机的系统工程
  • 软件工程导论》学习笔记·

    万次阅读 多人点赞 2019-03-04 11:53:18
    第一章,软件工程导论: 软件危机:计算机软件开发维护过程中所遇到得一系列严重的问题。 软件危机的典型表现: 对软件开发成本和进度的估计常常很不准确。 用户对以完成的软件系统不满意的现象经常发生。 软件...
  • 软件设计师学习笔记-软件工程

    千次阅读 2018-09-25 23:56:08
    软件工程 软件开发模型-瀑布模型(SDLC) 其他经典模型 增量模型与旋转模型 V模型、喷泉模型、RAD快速开发模型 构建组装模型(CBSD) 敏捷开发方法 软件工程   软件开发模型-瀑布模型(SDLC) 瀑布模型...
  • 以下学习笔记 《软件工作之美》材料地址:https://time.geekbang.org/column/article/82697 一 ,软件工程知识架构全景图的解读 “质量焦点”在最底层,这不难理解软件工程是为了应对软件危机诞生的学科,...
  • 软件工程导论(第六版)】学习笔记

    千次阅读 多人点赞 2020-03-26 08:51:38
    前言: 感谢大佬们的不求回报的分享, 感谢好人们的百忙之中的帮助...【软件工程导论学习笔记】第一章:软件工程学概述 【软件工程导论学习笔记】第二章:可行性研究 End : 如果觉得有收获,就请我喝杯咖啡吧! ...
  • 软件工程导论笔记-思维导图

    千次阅读 2019-10-13 09:03:20
    软件工程课程学习笔记——思维导图
  • 软件工程学习笔记(1)

    千次阅读 2017-03-07 20:12:30
    软件概念,软件的分类,软件特性,软件危机
  • 软件工程视频学习笔记(二十一)

    千次阅读 2010-09-01 18:33:00
    <br />软件测试: 软件测试的目的和原则 软件测试用例设计 软件测试策略 软件测试种类 程序调试   本章要点: ①软件测试的目的和原则 ②软件错误的分类 ...
  •  软件生命周期:软件定义、软件开发、软件维护(运行维护)。 ◾软件定义阶段通常可以进一步分为 3 个阶段:问题定义、可行性研究和需求分析 。 ◾软件开发阶段通常由 4 个阶段组成:总体设计、详细设计、编码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,960
精华内容 20,384
关键字:

软件工程学习笔记