软件工程
软件的生命周期: 问题定义、可行性研究、需求分析、概要设计、编码和单元测试、综合测试、软件维护。
软件特点:复杂性、不可见性、演化性。
软件危机的主要原因是
软件本身的特点及开发的方法。
软件危机:
开发和维护过程中的一系列问题。
软件工程的三要素:
过程、方法、工具。
软件工程:一门交叉学科。目的消除软件危机。
可行性任务:经济可行性、技术可行性、操作可行性、法律可行性。
需求分析方法:功能模型(DFD数据流图)、数据模型(ER图实体关系图)、行为模型(状态转换图)、模型核心(数据字典)。
根据ISO/IEC9126定义,软件的六大质量特性:易用性、安全性、可靠性 、可用性、可维护性、可移植性。
ER图的基本要素:实体、属性、联系。
软件设计的两个定性度量标准(模块独立):耦合和内聚。
体系结构设计图形工具—层次图
数据流图分为变换型数据流图和事务型数据流图。
变换型数据流图基本呈线性形状,由输入、变换、输出三部分组成。
事务型数据流图
测试分类:单元测试、集成测试、系统测试、验收测试。
单元测试:一般由开发人员执行,采用白盒测试(结构测试)。
集成测试:一般由测试人员执行,采用黑盒测试(功能测试)。
系统测试:在实际运行环境或模拟实际运行环境下,针对系统非功能特性所做的测试。
验收测试是目的验证软件的功能和性能是否满足用户预期的要求。
回归测试:是指修改了旧代码,重新进行测试,已经确认修改没有引入新的错误。
黑盒测试主要测试功能,方法为等价类划分法,正交实验法,因果法,边界值分析、场景法、决策表法等。
状态转化图的组成:状态(初态、终态、中间终态)、事件。
非功能需求:性能需求(速度、容量、负载、及时性)、质量属性、对外接口(硬件接口,软件接口等)、约束。
数据流图是结构化分析的工具,结构化方法就是采用自顶向下逐层分解的思想进行分析建模的。随着分解层次的增加,抽象的级别也越来越低,即越来越接近问题的解。数据流图建模应遵循:自顶向下、从抽象到具体的原则。
模块结构图的主要组成有:模块、调用、数据、控制信息和转接符号。
结构图的基本成分:模块、调用、控制。
程序设计语言的基本成分包括数据、运算、控制和传输等。程序设计语言的控制成分包括顺序、选择和循环3种结构。
原型模式不能用来指导代码优化。
数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。
公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
瞬时内聚:所包含的任务必须在同一时间间隔内执行(如初始化模块)。
逻辑内聚:完成逻辑上相关的一组任务。
顺序内聚:处理元素相关,而且必须顺序执行。
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。
人机交互“黄金三原则”包括:置于用户控制之下、减少用户的记忆负担、保持界面的一致性。
A.因为一个高效的测试尽可能用少量的代码。
白盒测试:白盒测试中语句覆盖是覆盖度最弱的,所以路径覆盖往往能比语句覆盖发现更多的错误。
类图:展现了一组对象、接口、协作和它们之间的关系。在面向对象系统的建模中,最常见的就是类图,它给出系统的静态设计视图。
对象图:展现了某一时刻一组对象以及它们之间的关系。
用例图:展现了一组用例、参与者(Actor)以及它们之间的关系。
组件图:展现了一组组件之间的组织和依赖。
序列图:强调消息时间顺序的交互图。
通信图:也是一种交互图,它强调收发消息的对象或参与者的结构组织。
部署图:是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。
顺序图也叫序列图,展示了一个用例和多个对象的行为。
什么是基本事件流和备选事件流?
数据字典有以下4类条目:数据流,数据项,数据存储和基本加工。
辅助软件维护过程中的活动的软件称为“软件维护工具”,它辅助维护人员对软件代码及其文档进行各种维护活动。软件维护工具主要有:1、版本控制工具;2、文档分析工具;3、开发信息库工具;、4、逆向工程工具;5、再工程工具;6、配置管理支持工具。
概要设计文档主要包括:软件体系总体结构设计;数据结构及数据库设计。
类图:就是举了一个例子,有父类,有子类。
组件图:各个组件之间的依赖关系。
通信图:有路径有序号。
部署图:面向对象的物理建模,是静态部署。
通信图的好处就是方便观察对象之间的消息流及其顺序。
大题:实体联系图的联系表示:1:1、1:n 和 m:n (或 1:1、1:*和*:*)。
软件工程的基本要素包括方法、工具和过程。
瀑布模型:将软件生存周期各个活动规定为线性顺序连接的若干阶段的模型,规定了由前至后,相互衔接的固定次序,如同瀑布流水,逐级下落。这种方法是一种理想的开发模式,缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。
原型模型:从初始的原型逐步演化成最终软件产品,特别适用于对软件需求缺乏准确认识的情况。
增量模型:是把软件产品作为一系列的增量构件来设计、编码、集成和测试,可以在增量开发过程中逐步理解需求。
螺旋:将瀑布模型与快速原型模型结合起来,并且加入两种模型均忽略了的风险分析,适用于复杂的大型软件。
极限编程XP:是激发开发人员创造性、使得管理负担最小的一组技术.。
水晶法Crystal:认为每—个不同的项目都需要一套不同的策略、约定和方法论。
并列争球法(Scrum)使用迭代的方法:其中把每30天一次的迭代称为个冲刺, 并按需求的优先级来实现产品多个自组织和自治小组并行地递增实现产品,协调是通过简短的日常情况会议进行。
软件配置管理SCM:其主要内容包括版本管理、配置支持、变更支持、过 程支持、团队支持、变化报告和审计支持等。
模块内聚类型从高到低依次为功能、通信、顺序、过程、时间、逻辑和偶然内聚。
一个模块内的几个操作是相关的,而且必须以特定的次序执行,则该模块的内聚类型为过程内聚。
模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行, 则该模块的内聚类型为时间内聚。
若一个模块的各个部分只是通过代码的逻辑结构相关联,则该模块的内聚类型为逻辑内聚。
把访问或操作在同一数据结构的操作放在一个模块中,则该模块的内聚类型为通信内聚。
面向对象的4个核心概念是对象、类、继承和消息传递。
根据题意部门和员工关系进行自然连接运算,应该去掉一个重复属性“部门代码”,所以自然连接运算的结果集为7元关系。
人员管理是软件项目管理的一个重要部分,在组织开发团队时,应该考虑开发人员的工作能力、知识背景、工作风格、兴趣爱好等多方面的因素。每个成员的工作任务分配清楚,不应该参与所有阶段的工作。当项目进度滞后于项目计划时,增加开发人员不一定可以加快开发进度。
在这几种开发过程模型中,原型模型不适宜大规模软件的开发。
逆向工程从源代码得到软件系统的规格说明和设计信息,属于软件维护阶段行为,因此逆向工程工具属于软件维护工具。
数据流图用来记录系统中的数据和数据在特定的过程中的流动,即数据如何被采集、处理、保存和使用的(围绕信息系统的功能)。
外部实体指系统之外又与系统有联系的人或事物。它表达了该系统数据的外部来源和去处。
软件体系结构图属于概要设计阶段的工作内容
采用了三明治的测试策略
从先测试A,再测试A、B、C、D可以看出集成测试时用到了自顶向下的方式。而从先测试E、F,再测试B、E、F可以看出集成测试时用到了自底向上的方式,两者结合即为三明治方式。
策略优点:
1.较早地验证了主要的控制和判断点且较早地验证了底层模块。
2.同时由于可以两端向中间发展,所以效率也是比较高的。
3.且运用一定的技巧,能够减少了桩模块和驱动模块的开发。
参与者是指存在于系统外部并直接与系统进行交互的人、系统、子系统或类的外部实体的抽象。
据库设计中规范化是在逻辑设计阶段进行的一项工作,该工作负责把关系模式进行规范,以减少冗余,以及一定程度上消除修改异常,插入异常及删除异常。
体系结构设计:主要是指要开发的系统中包含哪些部件,这些部件与部件之间的关系就是体系结构的设计。
数据设计:也称为数据库设计,主要包含数据库的设计和这个数据所包含的核心表的设计。
接口设计:用于子系统和模块之间或者内部系统和外部系统之间的各种交互,如功能描述,输入输出的定义,错误处理的设计。
过程设计:也称为模块详细设计,主要是详细模块的实现算法,以及模块所使用的数据结构。
对于较大型软件系统的需求往往难以在前期确定,所以瀑布模型最不适合。
可移植性包含:适应性、易安装性、共存性和易替换性四个特性。
答案:C D
路径覆盖:检测流程图有多少种路径,总共有6种路径
环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
V(G)=E-N+2=10-8+2=4。
巧合内聚也称偶然内聚,模块内各部分之间没有联系,或即使有联系,也很松散,是内聚程序最低的模块。
数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。在实际情况中并非总有一个属性是键,为描述这类情况,E-R图引入了弱实体元素。即没有键属性的实体型。例如本地电话号码、寝室等(如果其仅按照顺序编号的话),对应地,存在键属性的实体型则为强实体型。
风险管理属于风险控制。
4大价值观:沟通,简单性,简单,反馈与勇气;
5个原则:快速反馈,简单性假设,逐步修改,提倡更改和优质工作
12个最佳实践:计划游戏(快速制定计划、随着细节的不断变化而完善)、小型发布(系统的设计要能够尽可能早地交付)、隐喻(找到合适的比喻传达信息)、简单设计(只处理当前的需求,使设计保持简单)、测试现行(先写测试代码,然后再编写程序)、重构(重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求)、结队编程、集体代码所有制、持续集成(可以按日甚至按小时为客户提供可运行的版本)、每周工作40个小时、现场客户和编码标准。