软件设计师知识点整理(一)
一、计算机网络
二、操作系统基本原理
四、计算机组成原理与体系结构

软件设计师知识点整理(二)
四、编译原理基础
五、软件工程概述
六、计算机软件法律法规

软件设计师知识点整理(三)
七、系统安全设计与分析
八、数据结构与算法基础
九、数据库系统

四、编译原理基础

编译与解释

image.png
词法错误:从左到右逐个扫描源程序中的字符,识别其中如关键字(或保留字)、标识符、常数、运算符以及分隔符(标点符号和括号)等
语法错误:主要是分析句子结构的错误,如非法字符,关键字或标识符拼写错误,语法结构错误,if endif不匹配,缺分号等
语义错误:死循环,零循环,其他逻辑错误等
词法分析的输出是“记号流”;也就是语法分析的输入,而语法分析的输出是“语法树”
词法分析的任务是把源程序的字符串转换为单词符号序列
注:
(1)符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统之中
(2)在对源程序进行编译的过程中,常生成与源程序等价的中间代码,以利于进行优化,常见的中间代码包括:后缀式、三地址码和树等
(3)中间代码的生成与具体的机器没有任何关系,但目标代码的生成与具体的机器有着密切的关系
(4)编译过程中,中间代码生成和代码优化并不是每一个编译编译器都必须的

文法

文法定义

image.png

文法类型

image.png

语法推导树

image.png

正规式

image.png

有限自动机

image.png

表达式

image.png
图注:首先将表达式(括号无需构造)构造为一颗中序表达树,然后再进行下一步运算,该题答案即为D

传值与传址

函数调用的方式分为两种:传值调用和传址调用
image.png

多种程序语言特点

image.png

五、计算机软件法律法规

保护期限

image.png

知识产权人的确定

image.png

侵权判定

image.png

标准的分类与标准的代号

标准的分类

image.png

标准的代号

image.png

软件能力成熟度模型(CMMI)

image.png
CMMI是一个软件开发团队的评级标准,该评级标准分为了阶段式和连续式两种分组
阶段式
一级为混乱级,即未通过CMMI认证的团队都是该等级
二级为项目级,即对某个具体的项目有相关开发经验和开发能力,但只限于模仿和套用
三级为定义级,该进别下的团队有了自己的改进能力,能对他人的项目提出不同的看法
连续式
CL0(未完成的):过程域未执行或未得到CL1中定义的所有目标
CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特别目标
CL2(已管理的):其共性目标是已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都将被监控、控制、和审评
CL3(已定义级的):其共性目标集中于已定义的过程的制度化。过程是按照组织的裁剪指南从组织的标准过程中裁剪得到的,还必须收集过程资产和过程的度量,并且用于将来对过程的改进
CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化,使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的质量目标作为管理准则
CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户的改变和持续改进计划中的过程域的功效

软件项目管理基础知识

image.png
Gantt图,其最为直观的特点是简洁明了,可以很清楚的看到计划的开展,缺点是不能看出计划间的逻辑关系,无法看出哪个任务先做,哪个任务后做
PERT图的缺点是不能清晰地描述各个任务之间的并行关系,每一个原型的左侧是事件执行的顺序号,右上角是最早时间,右下角是最晚时间;
image.png
事件六的最晚开始时间的计算步骤:先从事件1逐步进行推进,如事件1到事件2最早需要时间加2,事件2到事件5则再需要加2(此时最早时间等于4),而事件1到事件6需要的最早执行时间为3,事件4到事件6的最早时间为4,因此取时间长的为事件6的执行时间(原因是事件六的执行需要事件3和4共同作用),以此类推,事件9所需最早时间为15,再由事件9逆推回来15-4-1=10即为事件6的最晚开始时间

风险管理

1.风险:指“损失或伤害的可能性”,风险可以分为项目风险和技术风险以及商业风险,特点是关心未来、关心变化、关心选择
2.风险曝光度:计算方法是:风险出现的概率乘以风险可能造成的损失;风险曝光度常用于风险的管控

软件项目估算

常用的估算方法有三种:基于已经完成的类似项目进行估算、基于分解技术进行估算(分解技术包括问题分解和过程分解)、基于经验估算模型(IBM模型、COCOMO模型、Putnam模型)
1.COCOMO:该模型按其详细程度分为基本、中级、详细COCOMO模型
基本:该模型是一个静态单变量模型,用于对整个软件系统进行估算
中级:该模型时一个静态多变量模型,将软件系统模型分为了系统和部件两个层次,系统由部件构成
详细:将软件系统模型分为系统、子系统和模块三个层次
注:COCOMOII模型在模型层次结构中有三种不同的规模估算选择:对象点、功能点和代码行

六、软件工程概述

瀑布模型

image.png
优点:是结构化方法的模型,每一个阶段都分工明确
缺点:需求分析很难把控,因此一般适用于需求明确或者二次开发
注:瀑布模型适用于软件需求很明确的工程

原型模型、演化模型、增量模型

image.png
(1)原型和瀑布模型是互补关系,原型是为了解决用户需求分析难以把控即需求不明确而提出的,该模型即:先做出初步模型,然后让用户使用,以便于用户进一步明确自己的需求,是一种抛弃式的模型,因为需求一旦明确就会被抛弃
(2)演化模型即是一种渐进式的原型,即它采取原型的设计模式,但不会将其抛弃,而是在此基础上进一步进行设计
(3)增量模型:是一种递增式设计,将产品一步一步进行设计,每完成一步就交由客户审视,这样也可以使得下一步的设计更为明确

螺旋模型

image.png

V模型

image.png
该模型极为强调测试的作用,测试始终贯穿流程的始终,如:需求分析完成后就进行验收测试和系统测试,概要设计完成后就进行集成测试

喷泉模型与RAD(了解)

喷泉模型

1.概述:该模型最大的特点是面向对象
2.特点:基于面向对象的迭代和无间隙

RAD模型

1.概述:该模型最大的特点是能够快速构建业务系统
2.内容:包括:业务建模、数据建模、过程建模、应用生成、测试与交付

构件组装模型(CBSD)

image.png
该模型将软件开发过程中的各个模块都做成构件,最后再将构件进行组装,基于构件的软件开发,主要强调在构建软件系统时复用已有的软件“构件”,在检索到可以使用的构件后,需要针对新系统的需求对构件进行合格性检验适应性修改,然后集成到新系统中
优点:极大的提高了软件开发当中的复用性,缩短时间、节省成本、增强可靠性

统一过程模型(UP)

统一过程模型定义了四个技术阶段及其制品,包括:
1.起始阶段:该阶段专注于项目的初创活动
2.精化阶段:精化阶段在理解了最初的领域范围之后进行需求分析和架构演进
3.构建阶段:该阶段关注系统的构建,产生实现模型
4.移交阶段:关注软件提交方面的问题,产生软件增量
image.png

敏捷开发方法

image.png
图注:该方法是一类方法,其特点是快捷,该类方法包括:自适应开发、水晶方法、特征驱动开发、SCRUM、极限编程;他们都遵循一些基本原则和价值观,该类方法适用于做小型项目
1.极限编程(XP)特点:测试先行、结对编程、集体代码所有制、持续集成(可以按日甚至按小时为客户提供可运行的版本)、每周工作40个小时
2.并列争球法特点:使用迭代的方法,其中把每三十天一次的迭代成为一个冲刺,并按需求的优先级来实现产品,多个自组织和自治小组递增实现产品,并通过简短的日常情况会议进行协调
3.水晶法特点:该方法认为每一个不同的项目都需要一套不同的策略、约定和方法论
4.敏捷开发方法的重要技术
·重构:重构是一种重新组织技术,重新审视需求和设计,重新明确的描述他们的需求和现有的需求,可以简化构件的设计而无需改变其功能或行为

信息系统开发方法

image.png
图注:该类方法包括四种:结构化法、原型法、面向对象方法、面向服务方法;其中结构化方法的典型代表是瀑布模型,原型法的典型代表是原型和演化模型,目前应用最广的方法是面向对象方法,而面向服务方法尚处于摸索阶段

需求的分类

image.png

结构化设计

即结构化方法中的软件设计问题,包括概要设计和详细设计,其设计原则是:自顶向下、逐步求精,信息隐蔽、模块独立(通过:高内聚、低耦合、复杂度)

内聚与耦合

image.png

结构化设计的原则

1.保持模块的大小适中
2.尽可能减少调用的深度
3.多扇入,少扇出(上层模块调用自己称之为扇入,自己调用其他模块称之为扇出)
4.单入口,单出口
5.模块的作用域应该在模块之内
6.功能应该是可预测的
结构化分析的结果
包括:一套分层的数据流图、一本数据词典、一组小说明(又称加工逻辑说明)、补充说明

概要设计

概要设计包括四个项目
1.设计软件系统总体结构
2.数据结构设计
3.数据库设计
4.编写概要设计文档:文档中应有概要设计说明书、数据库设计说明书、用户手册以及修订测试计划
注:需求分析确定软件要完成的功能及非功能要求,概要设计将需求转化为软件的模块划分,确定模块之间的调用关系;详细设计将模块进行细化,得到详细的数据结构和算法;编码根据详细设计进行代码的编写,得到可以运行的软件,并进行单元测试

软件测试

测试原则与类型

1.原则:(1)尽早、不断的进行测试;
(2)程序员避免测试自己设计的程序
(3)既要选择有效、合理的数据,也要选择无效、不合理的数据
(4)修改后应进行回归测试
(5)尚未发现的错误数量与该程序已发现错误数成正比
2.类型:软件测试类型分为动态测试(利用到了计算机的测试)和静态测试(纯手工的测试)
(1)动态测试包括:黑盒测试法(即看不到程序内部,只管输入的是什么,输出的是什么)、白盒测试法(从程序结构方面进行测试)、灰盒测试法
(2)静态测试包括:桌前检查、代码走查、代码审查

测试用例设计

黑盒测试:
等价类划分:即将所有数据类划分为许多个层次,每个数据层次挑选出一个最具代表性的数据进行测试即可
边界值分析:即需要对等价类之间的边界值进行测试(一般是端点、略小于端点的值、略大于端点的值)
错误推测:即自己推测错误的原因,该方法强调经验
白盒测试(主要是逻辑覆盖测试):
语句覆盖测试:即程序中的每一条语句都要进行测试(覆盖度最低的测试),通过设计n组数据,使其覆盖掉所有的路径
判定覆盖:即所有判断的真假分支都要测试一遍
条件覆盖:即在判定时对判定的条件的真假性进行测试
image.png

测试阶段

image.png
单元测试:模块性的测试,即对于一个函数,是否达到了其目的,每个模块的功能是否完善
集成测试:即模块间的衔接测试,不衔接的模块就将其组装起来,组装方式有两种:一次性组装(一次全部组装)和增量式组装(组装两个模块时测试一下、组装到三个模块时再测试一下….)
确认测试:即对需求进行确认,测试该程序是否满足需求,测试包括:内部确认测试、Alpha测试(即项目在开发环境进行测试)、Beta测试(即用户在自己的本地计算机自行测试)、验收测试
系统测试:主要是压力、性能、可靠性的测试,而性能测试包括:负载测试、强度测试(即系统资源缺失的情况下系统能否正常运行)、容量测试,压力测试则是测试同时访问人数的极限

McCabe复杂度

image.png

系统运行与维护

软件维护的概念

软件维护即需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及在交付后完成的活动,交付前完成的活动包括交付后运行的计划和维护计划等;交付后的活动包括软件修改、培训、帮助资料等
可维护性
包括可分析性、易分析性(即代码应该容易看懂)、易改变性、易测试性
维护类型
包括:
1.改正性维护:即用户发现bug,然后我就修改bug
2.适应性维护:即解决运行平台版本更迭的问题
3.完善性维护:指在运行过程中发现了一些不足,进而对系统的性能等方面进行完善和扩充
4.预防性维护:对将来可能导致的问题进行预防工作
注:系统设计中,人机交互“黄金三原则”包括:置于用户控制之下、减少用户的记忆负担、保持界面的一致性

软件的质量特性及其子特性

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

软件维护工具

包括:
1.版本控制工具
2.文档分析工具
3.开发信息库工具
4.逆向工程工具
5.再工程工具