大家不要只收藏不关注呀,哪怕只是点个赞也可以呀!
粉丝私信发邮箱,免费发你PDF!!!
软件工程基础、结构化设计、系统测试与维护是嵌入式系统开发和维护的基础知识点。
1.瀑布模型:结构化方法中的模型,是结构化的开发,开发流程一步一步往下走,只适用于需求明确或者二次开发,需求不明确时,有很大的缺陷。
2.原型:与瀑布模型相反,快速构建一个功能模型,能够及时修改,最终设计出项目。采用迭代思想,不适合大型项目的开发。
3.增量模型:首先开发核心模块功能,而后开发次核心的模块,每次开发一部分功能,就与用户确定,级别最高的服务最先交付,难点在于如何将客户的需求划分为多个增量,增量模型的每次增量版本都是可作为独立操作的作品。
4.螺旋模型:多种模型的混合,针对需求不明确的项目,与原型类似,但是增加了风险分析,适合大型项目开发。
5.V模型:增加了很多轮的测试,贯穿于软件开发的各个阶段,保证了项目的准确性。
6.喷泉模型:面向对象的模型,使用了迭代思想和无间隙开发。
7.基于构件的开发模型:增强了复用性,构建一个构件库,供其他系统复用,节省了时间和成本。
8.形式化方法模型:建立在严格数学的基础上的开发软件方法,主要是生成计算机软件形式化的数学规格说明。
9.统一过程:针对大型项目,三大特点:用例和风险驱动,以架构为中心,迭代并且增量。开发的四个阶段,起始(确定需求和风险评估)、精化(完成架构设计)、构建(开发剩余构件,组装构件)、移交(进行测试,交付系统)。
每次迭代都是一次完整的开发过程,有五个核心工作流:需求、分析、设计、实现、测试。
10.MVC模型
模型-视图-控制器,模型表示企业数据和业务规则,模型拥有最多的处理任务,视图是用户看到并与之交互的界面。控制器接受用户的输入并调用模型和视图去完成用户的需求。
1.结构化方法:流程固定,自顶向下,逐层分解,面向数据流,以瀑布模型为代表,现在已被对象法替代。
2.原型方法:适合需求不明确的开发。
3.面向对象方法:强调复用性,构建全面合理的模型,供不同项目使用,方便修改,以构件组装模型为代表。
4.jackson方法:面向数据结构的开发方法,适合小规模的项目。
5.敏捷开发方法:针对中小型项目。(对该图眼熟,并掌握重要概念)
结对编程:一个程序员开发,另一个审查,共同负责,有效提高代码质量。
自适应开发:强调开发方法的适应性,更侧重软件的重要性,提供最根本的基础。
水晶方法:每个不同的项目都需要一套不同的策略、约定和方法论。
特性驱动开发:一套针对中小型软件开发的开发模式,是一个模型驱动的快速迭代开发的过程,强调简化、实用、易于被开发团队接受。
极限编程:核心是沟通、简明、反馈和勇气。测试先行,将出bug的几率降到最低。
并列争球Scrum:迭代的增量化过程,把每次迭代当作一个冲刺,多个自组织和自治的小组并行地迭代实现产品。
软件需求:用户对系统在功能、行为、性能、设计约束等方面的期望。产品要实现的功能、标准、规范等
软件需求分为需求开发和需求管理两大过程
按照需求分类可分为:
业务需求:客户提出的一个宏观的功能需求。
用户需求:设计员去调查需求中涉及的每个用户的具体需求。
系统需求:经过整合,形成最终的系统需求,包括功能、性能、设计约束等。
功能需求:软件必须完成的基本动作。
性能需求:软件或人与软件交互的动态或静态的数值需求。
设计约束:受其他标准硬件限制等方面的影响。
从客户的角度可分为:
基本需求:需求明确规定的功能。
期望需求:除了基本需求外,客户认为理应包含的功能。
兴奋需求:客户未要求的功能。
结构化需求分析自顶向下,逐步分解,是面向数据的,强调分析对象的数据流,需要建立;功能模型(数据流图)、行为模型(状态转换图)、数据模型(E-R图)、以及数据字典(数据元素、数据结构、数据流、数据存储、加工逻辑、外部实体)
数据流图是分层的,描述了系统的输入与输出,以及和外部实体的数据交互。
对以下概念要了解(对象、类、消息、继承、覆盖、函数重载、多态、静态成员、静态类型、静态绑定、动态绑定、封装、类的属性和方法)
和程序设计语言并无关系,从总体上来看,UML结构包括构造块、规则和公共机制三个部分。
依赖、关联、泛化、实现。
用例图(描述系统提供一个功能单元)、类图(表示不同的实体如何彼此相关)、序列图(显示具体用例的详细流程)、状态图(某个类所处的不同状态和该类的状态转换信息)、活动图(处理某个活动时,两个或多个类对象之间的过程控制流)、组件图(显示系统中的软件对其他软件的依赖关系)、部署图(软件系统如何部署到硬件环境中)。
系统设计主要目的:为系统制定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾画出新系统地详细设计方法。
系统设计方法:结构化设计方法、面向对象设计方法
系统设计的主要内容:概要设计、详细设计
概要设计基本任务:确定每个模块的功能和调用关系,形成软件的模块结构图。
详细设计的基本任务:模块内详细算法设计、模块内数据结构设计、数据库的物理设计、其他设计、编写详细设计说明书。
主要包括以下四点内容:体系结构设计、数据设计(实体联系图确定软件涉及的文件系统的结构及数据库的表结构)、接口设计、过程设计(确定软件各个组成部分内的算法及内部数据结构)
抽象化(过程抽象、数据抽象)、自顶向下、模块化、模块独立。
保持模块的大小适中;尽可能减少调用的深度;多扇入、少扇出;单入口、单输出;模块的作用域应该在模块之内、功能应该是可预测的。
模块设计应满足高内聚,低耦合。内聚是指一个模块内部功能之间的相关性、耦合是指多个模块之间的联系。
单一职责、开放一封闭、李氏替换(子类可以替换父类)、依赖倒置、接口隔离、组合重用、迪米特原则。
最根本的目的是为了发现软件的错误。尽早并不断的进行测试。应该避免由原开发软件的小组或者人承担。设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期的输出结果。包含有效合理的测试用例,也要包含不合理失效的用例,检验程序是否做了该做的事,且是否做了不该做的事。严格按照测试计划进行。妥善保管测试计划和测试用例,测试用例可以重复使用或者追加测试。
动态测试也称动态分析,主要特征是计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况进行分析,判断是否期望结果和实际结果是否一致。主要测试方法有:
黑盒测试法、白盒测试法、灰盒测试法
用计算机分析时,计算机并不真正运行被测试的程序,包括代码检查、静态结构分析,代码质量度量等。方法包括:桌前检查、代码审查、代码走查等
自底向上、自顶向上、三明治(兼具以上两种)
单元测试、集成测试、确认测试、系统测试、回归测试。
只知输入输出,不知内部代码,由此设计出测试用例,分为下面几类:等价类划分、边界值划分、错误推测、因果图。
2.知道代码逻辑,按照代码语句设计覆盖代码的测试用例,方法有:语句覆盖、判定覆盖、条件覆盖、MC/DC(判定/条件)。
又称圈复杂度。
在异常和危险情况下系统生存的关键,鲁棒测试时对各个模块的功能和系统进行容错性的测试。
就是bug探测到的概率。
蛮力法:穷举所有可能的方法一一尝试;回溯法:试探法,按照最优解去试探,如果走不通就重新选择。演绎法:由一般推特殊的推理方法。归纳法:由特殊推一般的推理方法。
新系统替换老系统的过程,有三种转换计划:直接转换、并行转换、分段转换。
评价指标有四种:易测试性、易分析性、易改变性、稳定性
软件维护类型包含以下四种:正确性维护、适应性维护、完善性维护、预防性维护
容错就是软件遇到错误的处理能力,实现容错的方法主要是冗余,包括以下四种技术:
结构冗余、信息冗余、时间冗余、冗余附加技术。
安全关键系统是指不正确的功能或失效会导致人员伤亡、财产损失等严重后果的计算机系统。
重要原则:任何情况下决不放弃!即便有错误情况出现,也能适当处理,让系统处于安全状态。
关键路径-双代号图:类似前趋图,有向图,反映活动之间的依赖关系,有向边上标注活动运行的时间,但无法反映活动之间的并行关系。
甘特图:又称为横道图,横轴表示时间,纵轴表示活动,以时间顺序表示活动,能反映活动间的并行关系,但无法反映活动之间的依赖关系。
质量是软件产品特性的综合,表示软件产品满足明确或隐含要求的能力。
质量规划(识别产品的质量要求和标准,并书面描述)、质量保证(每隔一段时间进行,通过系统的质量审计和过程分析保证质量)、质量控制(监控项目的具体结果,判断是否符合质量标准,制订有效方案以消除产生质量问题)。
软件配置管理是贯穿整个软件生存周期的一项技术。配置管理是指以技术和管理的手段来监督和指导开展如下工作的规程:(识别并记录配置项、管理和控制上述特性、记录和报告变更过程和相应的配置项状态、验证配置项是否与需求一致)。
基线:软件开发过程中特定的点,是项目生存期各开发阶段末尾的特定点。配置管理至少有以下三个基线:功能基线、分配基线、产品基线。
配置项:配置管理的基本单位。草稿、正式、修改。
检查点:指在规定时间间隔内对项目进行检查,然后进行调整。
里程碑:关注状态时间点。
配置库:一般软件项目开发过程采取开发库、受控库和产品库的管理方法,且采取三库物理隔离的策略。
风险的分类有以下几种:项目风险、技术风险、商业风险(市场风险、策略风险、销售风险、管理风险、预算风险)
嵌入式系统基础:笔记(一)
嵌入式软件学习路线(入门)
C陷阱与缺陷(读书笔记总)