软件工程笔记下
- 从程序到软件☆
章节 | 知识点 |
概论☆ | 软件的定义,特点,生存周期。软件工程的概论。软件危机。 |
1.☆软件:软件=程序+数据+文档
(1)软件:是指在计算机系统的支持下,能够完成特定功能与性能的包括程序、数据和相关文档的完整集合。
- 程序:是由程序设计语言所描述的、能为计算机所理解和处理的一组语句序列。
(3)联系:程序是软件的核心部分,软件的功能是执行其中程序实现的。
(4)区别:程序通常是可执行代码,软件包括代码、文档和数据。
2.☆软件的特性:
复杂性、可变性、不可见性、一致性
(1)复杂性:①复杂程度随着程序规模的增加成指数上升。②开发复杂
(2)可变性:在软件开发不同阶段,引入同一个变动需要付出的代价的变化趋势。
(3)不可见性:风险大(4)一致性:维护困难
3.☆软件的特征:
非常复杂、成本高、风险大、维护困难
4.☆软件生存周期:
(1)定义:软件从提出开发开始到开发出系统,运行维护以及最终退役(最终灭亡)所经历的时期
(2)6个阶段:需求分析、软件设计、编码实现、软件测试、部署运行、使用维护
5.软件危机:
(1)☆定义:软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题。
(2)表现:
① 软件开发成本和进度估计不准确② 用户对“已完成的”软件系统不满意的现象经常发生 ③软件质量得不到保证(功能和性能)
④ 软件维护困难(多样性 、复杂性、 副作用) ⑤软件通常没有适当的文档 ⑥软件成本在计算机系统总成本中所占比例升高
⑦ 软件开发生产率的提高跟不上计算机应用普及的趋势
(3)根源:
① 对软件这样一类复杂和特殊系统的认识不清 ②没有找到支持软件系统开发的有效方法 ③缺乏成功软件开发实践以及相应的开发经验
6、☆开源软件 列出两个并比较异同:
1.开源软件:
一种源代码可以自由获取和传播的计算机软件,其拥有者通过开源许可证赋予被许可人对软件进行使用、修改和传播。
2.举例:
(1)GPL:
允许任何人观看、修改,并散播程序软件的原始程序代码。发布修改后的版本,就要连通源代码一起公布,不允许修改后和衍生的代码作为闭源的商业软件发布和销售。(自由复制,自由传播,收费传播,修改自由)
(2)BSD :
是一个给予使用者很大自由的协议。可以自由地使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
第二章 软件工程概述
软件工程 | 软件工程的目标,原则,中心和三要素。 |
1.软件工程的定义:☆
(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;
(2)研究(1)中方法的研究。
1)系统的:提供完整和全面的解决方法,包括目标、原则、过程模型、开发活动、开发方法和技术等。
2)规范的:支持各类软件系统的开发,包括语言标准、质量标准、编程标准、方法标准、能力极其改进标准等。
3)可量化:工作量、成本、进度、质量等要素可以量化。
2.☆软件工程的原则:
1)抽象和建模 2)模块化 3)软件重用 4)信息隐藏
5)关注点分离 6)分而治之 7)双向追踪原则8)工具辅助
1)抽象:将与相关开发活动所关注的要素提取出来,不关心要素扔掉,形成与该开发活动相关的软件要素
建模:基于特定的抽象,借助于建模语言(如数据流图、UML等),建立起基于这些抽象的软件模型,进而促进对软件系统的准确理解
2)将软件系统的功能分解和实现为若干个模块,每个模块具有独立的功能,模块之间通过接口进行调用和访问。模块内部高内聚,模块间松耦合
3)在软件开发过程中尽可能利用已有的软件资源和资产(如函数库、类库、构件库、开源软件、代码片段等)来实现软件系统努力开发出可被再次重用的软件资源(如函数、类、构件等)
6)软件开发人员可对复杂软件系统进行分解,形成一组子系统
7)当某个软件制品发生变化时,一方面要追踪这种变化会对那些软件制品产生影响,进而指导相关的开发和维护工作,此为正向追踪;另一方面要追踪产生这种变化的来源,或者说是什么因素导致了该软件制品的变化,明确软件制品发生变化的原因及其合理性,此为反向追踪。
8)利用软件工具来辅助软件开发和维护工作是一项行之有效的方法尽可能地借助计算机工具来辅助软件开发和维护,以降低开发者和维护者的工作负担,提高软件开发和维护效率,提升软件开发及软件制品的质量
- 软件发展阶段:
(1)程序设计阶段(50~60年代)
(2)程序系统阶段(60~70年代)
(3)软件工程阶段(70~80年代)
(4)第四阶段(80年代至今)
第三章 软件过程模型和开发方法
软件过程模型和开发方法 | 软件过程模型的定义。软件生存期模型(瀑布模型 、快速原型模型、增量模型、螺旋模型)及各模型的概述、优缺点、适用场合。如何选择过程模型。敏捷开发。能力成熟度模型集成五个级别的名字、每个级别的侧重点。过程和产品的关系。 |
- 软件过程:☆
为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
- 软件过程模型的定义:
软件开发过程模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
(软件过程模型/软件开发模型/软件生存周期模型/软件工程范型)
- 软件生存期模型:
分类 | 模型名称 | 概述 | 优点 | 缺点 | 场景 |
生命 周期 模型 | 瀑布模型 | 软件开发过程分为需求分析、软件设计、物试和运行维护等步骤和活动,严格按照先后次序和逻辑关系来组织实施。 | 简单,一目了然,易理解、掌握、应用和管理 | 需求变更;阻塞;不能满足需求 | 需求易于定义、不易变动、较为明确、可预先定义的软件系统 |
演化 过程 模型 | 原型模型 | 指在设计或开发过程中通过搭建一个部分或完整的模型,来展示最终产品的外观、功能和特性。 | ①提高设计质量;②加快开发进程;③减少项目成本;④增强用户参与;⑤降低开发风险。 | ①建需时间和资源;②对环境和成本的敏感性;③需用户密切配合;④可能致质量低;⑤限制开发创新。 | 理解需求难以表述清楚、不易导出和获取、持续变动的应用 |
增量 过程 模型 | 增量模型 | 一种渐进地开发逐步完善的软件版本的模型,该模型一般首先开发产品的基本部分,然后再逐步开发产品的附加部分。 | 需求变动不大、较为明确、可预先定义的应用 | ||
迭代模型 | 需求变动大、较为明确、可预先定义的的应用 | ||||
螺旋模型 | 开发风险大,需求难以确定的应用 |
(1)生命周期模型:
1.1瀑布模型☆
⑴概念:
瀑布模型将软件开发过程分为需求分析、软件设计、物试和运行维护等步骤和活动,严格按照先后次序和逻辑关系来组织实施。
(2)指导思想:提供系统性指导
(3)特点:
①与软件生命周期相互一致;②每个活动结束后需要评审;
③相邻活动间存在因果关系。
(4)优点:
简单,一目了然,易理解、掌握、应用和管理。
(5)缺点:
①不适应需求经常发生变更的环境;②流程顺序严格,各阶段依赖性强会导致工作中发生“阻塞”状态
③完全依赖于书面的规格说明,软件产品不能真正满足用户的需要➃用户只能通过文档来了解产品是什么样
⑸适用场景:适合于需求易于定义、不易变动的软件系统。
(2)演变过程模型:
2.1.原型模型☆
⑴概念:
原型模型是指在设计或开发过程中通过搭建一个部分或完整的模型,来展示最终产品的外观、功能和特性。
(2)指导思想:以原型为媒介指导用户的需求导出和评价
(3)特点:
①软件原型作为交流载体和媒介;②支持用户参与到软件开发中;
③持续、渐进地导出用户要求。
(4)优点:
①提高设计质量;②加快开发进程;③减少项目成本;
④增强用户参与;⑤降低开发风险。
(5)缺点:
①建立原型需要时间和资源;②对环境和成本的敏感性;③需要与用户密切配合;
④可能导致质量低下;⑤限制开发人员的创新。
(6)适用场景:适合于需求难导出、不易确定且持续变动的软件。
- 增量过程模型:
3.1增量模型☆
(1)概念:
一种渐进地开发逐步完善的软件版本的模型,该模型一般
|
首先开发产品的基本部分,然后再逐步开发产品的附加部分。
(2)指导思想:快速交付和并行开发
(3)优点:
①显著地克服瀑布模型缺点、减少由于软件需求不明确而给开发工作带来风险;缩短产品提交时间
②用户有充裕的时间学习适应新产品,减少一个全新的软件给客户组织带来的冲击。
(4)缺点:
①在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。软件体系结构必须是开放的。
②开发人员既要把软件系统看作整体。又要看成可独立的构件,因此相互矛盾。除非开发人员有足够的技术能力协调好。
③多个构件并行开发,具有无法集成的风险。
(5)适用场景:需求变动不大、较为明确、可预先定义的应用
3.2迭代模型
- 概述:
是一种支持面向对象开发的模型。体现迭代和无间隙特征。
①迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中,不断加入演进的内容。②无间隙:开发活动之间不存在明显的边界。
(2)指导思想:多次迭代,每次仅针对部分明确软件需求
(3)优点:
(4)缺点:
(5)适用场景:需求变动大、难以一次性说清楚的应用
3.3.螺旋模型☆
(1)概述:沿着螺线旋转,在四个象限上分别表达了四个方面的活动:
①制定计划-确定目标,选择方案,选定完成目标的策略。
②风险分析-风险角度,分析该策略。
③实施工程-实施软件开发。
④客户评估-评价开发工作,提出修正建议。
- 指导思想:
集成迭代模型和原型模型,引入风险分析
(3)特点 :
瀑布模型+快速原型+风险分析的迭代过程
(4)优点:
适用于高风险的大型软件,由于软件随着过程的推进而变化,在每一个演进层次上,开发者和客户都可以更好地理解和应对风险。
(5)缺点:
风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大。
(6)适用场景:
主要适用于内部开发的大规模软件项目
4.软件过程模型的选择
(1)考虑软件项目的特点,
尤其是所开发软件的业务特点,如业务领域是否明确、软件需求是否易于确定、用户需求是否会经常性变化等等是否可以预估到潜在的软件开发风险
(2)软件开发团队的水平
需要结合软件开发团队的能力和水平来选择过程模型,以防开发团队和管理人员无法掌控和驾驭过程模型
(3)分析软件过程模型特点
优缺点以及适合的场所
5、敏捷方法
(1)理念:
一种轻量级软件开发方法。
主张软件开发要以代码为中心,快速、轻巧和主动应对需求变化,持续及时交付可运行的软件系统。
提供了一组思想和策略,指导快速响应用户需求的变化,快速交付可运行的软件制品。
(2)价值观:
①较之于过程和工具,应更加重视人和交互的价值;
②较之于面面俱到文档,应更加重视可运行软件系统的价值;
③较之于合同谈判,应更加重视客户合作的价值;
④较之于遵循计划,应更加重视响应用户需求变化的价值。
(3)体现思想:
①强化可运行软件,弱化文档
②以适应变化为目的来推进开发
③以人为本
敏捷方法很多,包括极限编程(XP)、 Scrum方法、测试驱动开发(FDD)等多种方法,
- 软件需求
软件需求 | 需求的定义、需求的特性。需求的分类(功能性需求、非功能性需求)。 需求分析的四个步骤,每个步骤的定义。 |
结构化分析方法的分析策略是自顶向下逐步求精。结构化分析建立的模型的核心,围绕该核心建立的三种图及对应的规格说明的名字(分别属于对什么建模)。会画数据流图。 | |
面向对象的分析建立哪三种模型,分别对应UML中的什么图(只需要知道图的 名字)。用例图由哪三个元素构成,每个元素的定义。会画用例图。 |
- 软件需求☆
- 定义:开发软件产品的目标用户对该软件产品的功能、性能、设计约束和其它方面的期望和要求,
即:确定软件系统要做什么。
(2)IEEE定义:
①用户为了解决问题或达到某些目标所需要的条件或能力;
②系统或系统部件为了满足合同、标准、规范或其它正式文档所规定的要求而需具备的条件或能力;
③对①或②中的一个条件或一种能力的一种文档化表述。
2、软件需求的类别☆
1.软件功能性需求:
能够完成的功能及在某些场景下可展现的外部可见行为或效果。
2.非功能需求:
(1)软件质量需求:
外部质量属性,外部可展现的,用户、客户等会非常关心,如运行性能、可靠性、易用性等;内部质量属性,隐藏在内部的,软件开发工程师会非常关心,如可扩展性、可维护性、可理解性。
①外部质量属性,外部可展现的,用户、客户等会非常关心,如运行性能、可靠性、易用性等
②内部质量属性,隐藏在内部的,软件开发工程师会非常关心,如可扩展性、可维护性、可理解性
(2)软件开发约束需求:
开发成本、交付进度、技术选型、遵循标准等方面提出的要求。
分类 | 内涵 | 关注的利益相关者 |
功能需求 | 软件具有的功能、行为和服务 | 用户、客户、开发者群体 |
软件质量需求 | 内部质量需求 | 开发者群体 |
外部质量需求 | 用户、客户、开发者群体、其他系统 | |
软件开发约束需求 | 软件开发需满足的要求 | 客户、开发者群体 |
3、软件需求的重要性
(1)软件的价值所在
(2)软件开发的基础和前提
(3)软件验收的标准和依据
4、软件需求的特性
(1)隐式性:来自于利益相关方,它隐式存在。很难辨别,甚至会遗漏掉。
(2)隐晦性:在利益相关方的潜意识之中,不易于表达出来,难以获取。
所表达的软件需求存在模糊性、歧义性、二义性。
(3)多源性:存在多个的利益相关方。存在相冲突和不一致的软件需求。
(4)易变性:用户对软件的期望和要求也会经常性地发生变化。在整个生命周期都会发生变化。
(5)领域知识的相关性:
软件需求的内涵与软件所在领域的知识息息相关
(6)价值不均性:
不同的软件需求对于客户或用户而言所体现的价值是不一样的
主要和次要、核心和外围需求
- 需求工程
用工程的理念和方法来指导软件需求实践
提供了一系列的过程、策略、方法学和工具
帮助需求工程师加强对业务或领域问题及其环境的理解,获取和分析软件需求
指导软件需求的文档化和评审,以尽可能获得准确、一致和完整的软件需求,产生软件需求的相关软件制品
①知识密集型工作,需要交叉多学科的知识②多方共同参与
③需求获取的多种形式和源头④持续迭代和逐步推进
- 简述需求工程的一般性过程
(1).获取软件需求
获得软件利益相关者对软件的期望和要求,进而获取初步软件需求。
(2).分析软件需求
在初步软件需求的基础上,对软件需求进行精化、建模和分析,获得软件需求在功能、行为、特征和约束等方面更为详细的信息,发现并解决软件需求中潜在的问题,产生准确、一致和完整的软件需求及其描述。
(3).文档化软件需求
在获取和分析软件需求及其成果的基础上,撰写软件需求文档,产生软件需求规格说明书。
(4).确认和验证软件需求
对前面工作所产生的软件需求模型和文档进行评审,让软件系统的利益相关者确认和验证软件需求,发现问题和缺陷,并加以解决和纠正,确保经评审后的软件需求模型和文档符合利益相关者的诉求并满足质量要求。
(5).管理软件需求
由于软件需求工程贯穿于整个软件生存周期,软件需求会持续发生变化,并且需求变化会对软件开发和运维产生重要的影响,因此必须对软件需求变化以及相应的软件需求制品进行有效的管理。
- 获取软件需求
1、获取软件需求:是指得到或产生软件需求
2、获取软件需求的方式:
3、获取软件需求的方法:
(1)访谈和会议:
召开相关的会议,走访相关的人员。
参加的人员包括:用户、客户、需求分析人员、质量保证人员等等;
(2)调查问卷:
设计调查问卷:了解业务流程、实际操作过程,用户的期望和要求。
调查对象:应用领域中不同角色用户口如何利用调查问卷。
(3)获现场观摩:业务过程、步骤和输出,业务工作流程和细节;
(4)分析业务资料:收集重要的资料,阅读和分析与业务相关的文档和资料;
(5)软件原型:
需求工程师根据用户初步需求描述,快速构造出一个可运行的软件原型。
软件原型作为需求工程师和用户之间的交流媒介,有助于直观地展示软件需求,激发用户投入到需求讨论和导出之中,因而是一项极为有效的需求获取和分析方法。
(6)群体化方法:
让互联网上的海量和开放群体参与到获取软件需求的工作中来,提出他们对软件需求的想法,并通过组织、汇聚和筛选,从中遴选出有价值的软件需求。集思广益有助于获得超出开发团队和用户常规想定的软件需求。
- 获取软件需求的过程
1.明确问题和基于软件的解决方案
明确待开发软件系统欲解决什么样的问题,给出清晰的问题描述;明确如何通过软件来解决问题,需要集成哪些其他的系统(包括物理系统或遗留系统)、与它们进行怎样的交互(包括数据和服务的共享)等;界定软件系统的目标和范围,讲清楚软件系统要做什么、不做什么。
2. 导出和构思初步软件需求
在识别软件利益相关者的基础上,从软件利益相关者那里导出软件需求;或者针对软件欲解决的问题构思出软件系统的需求,形成初步的软件需求,包括功能需求和非功能需求。
3. 描述初步软件需求
描述所获得的软件需求,详细刻画和记录软件需求的具体内涵,促进不同人员围绕软件需求进行交流,支持后续的需求分析工作。需求工程师可采用多种方式来描述软件需求,如自然语言、软件原型、用例模型等。
4.评审初步软件需求
需求工程师组织多方人员(包括用户和客户等)评审初步软件需求及其描述,发现和解决软件需求中存在的各类问题,确保初步软件需求的质量。
- 获取软件需求可行性分析
技术可行性+设备可行性+进度可行性+成本可行性+商业可行性(商业价值)+社会可行性
- 分析软件需求
1、分析软件需求的任务
- 精化软件需求(2)建立软件需求模型(3)分析需求间的关系
(4)发现和解决需求问题(5)撰写和评审软件需求
文档
2、支持需求建模和分析的UML图
软件需求模型
3、简述顺序图的作用与组成元素
- 作用:描述对象间的消息交互序列
- 组成元素:
1)纵向:时间轴,对象及其生命线(虚线),活跃期(长条矩形) 2)横向:对象间的消息传递
3)对象:[对象名] : [类名]
4)消息传递:对象生命线间的有向边
①同步消息:发送者等待接收者将消息处理完后再继续
②异步消息:发送者在发送完消息后不等待接收方即继续自己的处理
③自消息:一个对象发送给自身的消息
④返回消息:某条消息处理已经完成,处理结果沿返回消息传回
⑤创建消息和销毁消息:消息传递目标对象的创建和删除
4、简述类图的作用与组成元素
(1)作用:描述系统的类构成,刻画系统的静态组成结构
(2)组成元素:
1)结点:表示系统中的类(或接口)及其属性和操作
2)边:类之间的关系
(3)属性的表示:[可见性] 名称 [: 类型] [多重性] [= 初值] [{约束特性}]
1)可见性:公开(+)、保护(#)、私有(-)
2)多重性:属性取值数量, 如1,0..1,0..* ,1..*,*
3)约束特性:可更改性:{readOnly}、顺序性: {ordered}、唯一性: {bag}、静态性:{static}
(4)接口:一种不包含操作实现部分的特殊类
1)接口的形式:①供给接口: 对外提供的接口②需求接口: 需要使用的接口
(5)类间的关系:
1)关联:类间的逻辑联系
2)聚合:部分类对象是多个整体类对象的组成
3)组合:部分类对象只能位于一个整体类对象中
4)依赖:有语义上关系且一个类对象变化会导致另一类对象作相应修改
5)实现:表示一个类实现了另一个类中定义的对外接口
6)继承:子类继承父类所有可继承的特性,且可通过添加新特性或覆盖父类中的原有特性
5、简述状态图的作用与组成元素
(1)作用:
描述实体(对象、系统)在事件刺激下的反应式动态行为及其导致的状态变化
刻画了实体的可能状态、每个状态下可响应事件、响应动作、状态迁移
- 基本改念:
1)状态:对象属性取值构成的一个约束条件,不同状态下对象对事件的响应行为完全一样
2)事件:某时刻点发生、需要关注的瞬时刺激或触动
消息型事件(同步):其他对象发来消息
信号型事件(异步):其他对象传来异步信号
时间型事件:到达特定时间点
条件型事件:对象属性取值满足特定条件
- 动作:
计算过程,位于迁移边上,简单执行时间短
4)活动:
计算过程,位于状态中,复杂执行时间长
- 组成:
①节点:状态②边:迁移,即状态间因事件刺激而触发的状态变化
初态用实心圆表示,终态用一对同心圆(内圆为实心圆)表示。
中间状态用圆角矩形表示,可以用两条水平横线把它分成上、中、下3个部分
- 分析软件需求的过程
- 分析和确定软件需求优先级
分析软件需求重要性
分析软件需求优先级
确定用例分析和实现的次序
考虑:重要性和实际需求
- 分析软件需求的重要性
1)从用户和客户的视角,软件需求的重要性是不一样的
2)核心软件需求:
在解决问题方面起到举足轻重的作用,提供了软件系统所特有的功能和服务,体现了软件系统的特色和优势
3)外围软件需求:
提供了次要、辅助性的功能和服务
第七章 软件设计基础
软件设计基础 | 软件设计包含的两类活动。创新设计不属于软件设计。软件的质量属性。各种设计技术(模块化为什么不能无限划分模块、信息隐藏原则的定义、重构的定义、抽象、设计模式、功能独立(不要求背7种内聚和7种耦合)、细化)。程序结构的深度、宽度、扇入数、扇出数。信息隐蔽原则有利于提高模块的内聚性。完整的设计规格包括哪四种设计模型。 |
软件体系架构(5种架构风格、B/S与C/S架构)。用户界面设计的三条原则。 用户界面设计由一系列的分析开始(三种分析的内容)。 | |
结构化程序设计的概念。详细设计(会画流程图、伪代码、NS图、PAD图)。 流程图的主要缺点。 |
- 软件设计
针对软件需求,综合考虑各种制约因素,探究软件实现的解决方案
- 软件设计是需求分析和软件实现间的桥梁
- 软件设计的一般性过程
- 软件设计的约束和原则
①抽象与逐步求精 ②模块化,高内聚度、低耦合度
③信息隐藏 ④多视点和关注点分离
⑤软件重用 ⑥迭代设计
⑦可追踪性
- 抽象
- 模块化、高内聚度和低耦合度原则(分而治之)
将软件系统的整体结构分解为一组相关模块(模块:包、子系统、构件、类、方法等等)
每个模块实现单一的功能。通过模块之间的交互来组装模块,形成整体框架
- 耦合性
- 软件体系结构设计
- 软件体系结构模型的表示方法
- 包图
(1)功效:刻画包间的构成和依赖关系
(2)图的构成:节点:包。边:包间的关系
(3)包间的关系:组成和依赖
(4)包:一组具有逻辑关联的UML模型元素(例如用例、类等)、模型图(用例图、类图、交互图、状态图、活动图等),以及其他的包。
包在模型管理过程中是配置管理的基本单元,同时也为访问控制提供基本手段
- 包的作用
①作为软件模型的组织单元
②作为模型管理的基本单元
③作为系统高层结构中的组成元素。
④作为访问控制的基本手段
- 部署图
(1)功效:
表示软件系统可执行工件(artifact)在运行环境中的部署和分布情况
(工件是指软件中相对独立的物理实现单元,如Java类库文件)
(2)图的构成①节点:计算节点、工件、构件②边:通信和依赖
(3)两种部署图
①逻辑层面的描述性部署图描述软件的逻辑布局
②物理层面的实例性部署图针对具体运行环境和特定的系统配置描述软件系统的物理部署情况
- 构件图
(1)功效:描述软件系统中构件及构件间的构成和依赖关系
(2)图的构成:
①节点:构件,具有对外接口、可分离和独立功能物理模块②边:构件间的依赖关系
(3)构件
一个或者多个可独立部署的执行码文件
具有精确定义的供给接口和需求接口
可分离,接口和实现分离
可替换,构件实例可被任何实现相同接口的同一构件实例所替换
(4)接口
一组操作 和/或 属性的说明(不含操作的实现),它用作服务提供方和使用方之间的协议
每个构件还可以定义一些端口(port),每个端口绑定了一组供给接口和/或需求接口
接口由类或构件实现
相关文章:
软件工程笔记下
从程序到软件☆ 章节 知识点 概论☆ 软件的定义,特点,生存周期。软件工程的概论。软件危机。 1.☆软件:软件程序数据文档 (1)软件:是指在计算机系统的支持下,能够完成特定功能与性能的包括…...
探索DeepSeek:牛仔技术的未来在哪里?
引言 在当今快速发展的科技世界中,DeepSeek作为一种前沿技术,正逐渐改变我们对信息搜索和数据处理的认知。本文将深入探讨DeepSeek技术的核心优势、应用场景以及未来发展趋势,带您全面了解这一技术的魅力所在。 一、DeepSeek技术简介 1.1 什…...
Wireshark抓包标准化流程
1. 软件安装与验证 安装路径规范 按企业要求部署至指定目录: xxxx/xxxx/xxxx/xxxx验证安装完整性: 检查是否勾选 Install TShark(默认已选)确认安装后生成 Wireshark.exe 和 tshark.exe 可执行文件 权限配置 右键点击安装目录下…...
3月8日星期六今日早报简报微语报早读
3月8日星期六,农历二月初九,早报#微语早读。 1、国家卫健委主任:正会同有关部门起草育儿补贴的操作方案; 2、中国代表团出征第12届世界冬季特奥会,共48名运动员; 3、研究显示:2035年中国女性…...
计算机视觉之dlib人脸关键点绘制及微笑测试
dlib人脸关键点绘制及微笑测试 目录 dlib人脸关键点绘制及微笑测试1 dlib人脸关键点1.1 dlib1.2 人脸关键点检测1.3 检测模型1.4 凸包1.5 笑容检测1.6 函数 2 人脸检测代码2.1 关键点绘制2.2 关键点连线2.3 微笑检测 1 dlib人脸关键点 1.1 dlib dlib 是一个强大的机器学习库&a…...
周末总结(2024/03/08)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
Linux第一课
一、Linux背景与发展 1. 发展史 1968年,研究人员开发了Multics操作系统,为后续发展奠定了基础。 1969−1970年,Ken Thompson和Dennis Ritchie在Multics基础上开发了UNIX系统。 1991年,Linus Torvalds发布了Linux操作系统&#…...
【Java基础】Java中new一个对象时,JVM到底做了什么?
Java中new一个对象时,JVM到底做了什么? 在Java编程中,new关键字是我们创建对象的最常用方式。但你是否想过,当你写下new MyClass()时,Java虚拟机(JVM)到底在背后做了哪些工作?今天&…...
《白帽子讲 Web 安全》之身份认证
目录 引言 一、概述 二、密码安全性 三、认证方式 (一)HTTP 认证 (二)表单登录 (三)客户端证书 (四)一次性密码(OTP) (五)多因…...
发行基础:宣传片
转载自官方文件 --------------- 宣传片 概览 作为 Steam 发行流程的一部分,您需要上传自己产品的宣传片。 宣传片将会显示在您的产品商店页的顶端,通常是您的潜在客户第一眼会看见的内容。 最佳实践 在 Steam 平台上,宣传片是产品营销中…...
PAT线上考试注意细节(甲/乙级)
闲谈 从此以后!参加竞赛! 都要为自己留够足够的时间练习! 都要为自己留够足够的时间练习! 都要为自己留够足够的时间练习! 重要的事情说三遍,毕竟这只是我参加各种竞赛的开始! \(ÿ…...
测试用大模型组词
已经把hanzi-writer的js的调用、hanzi-writer调用的数千个汉字的json文件,全都放在本地了。虽然用的办法还是比较笨的。我注意到 大模型也可以部署本地,虽然使用频率低的情况下不划算。 尝试直接通过html的javascript通过api key调用大语言模型&#x…...
【算法 C/C++】一维差分
2025 - 03 - 08 - 第 69 篇 Author: 郑龙浩 / 仟濹 【一维差分】 文章目录 前缀和与差分 - 我的博客差分(一维)1 大体介绍(1)**1 原数组 2 差分数组 3 差分数组的前缀和数组**(2)记录区间操作的边界 2 差分原理是什么??ÿ…...
前后端数据加密传输【最佳方案】
AES和RSA区别 算法类型安全性密钥长度/输出长度速度应用场景AES对称加密高128位、192位、256位快适用于大规模数据加密,入HTTPS协议的数据传输RSA非对称加密高1024位、2048位、4096位较慢适用于数据安全传输、数字签名和身份验证 综上:兼顾安全性和性能…...
爬虫案例七Python协程爬取视频
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python协程爬取视频 前言 提示:这里可以添加本文要记录的大概内容: 爬虫案例七协程爬取视频 提示:以下是本篇文章正文…...
算法每日一练 (9)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 算法每日一练 (9)最小路径和题目描述解题思路解题代码…...
对接RAGflow的API接口报错
对接RAGflow的API接口,报错: {"status":"success","message":"API连接正常","response":{"code":109,"data":false,"message":"Authentication error: API key …...
智慧城市智慧社区项目建设方案
一、项目背景 在全球化进程加速的今天,城市化问题日益凸显,传统的城市管理模式已难以满足现代社会对高效、智能化管理的需求。智慧城市和智慧社区的概念应运而生,其核心目标是通过信息技术手段,提升城市资源的利用效率࿰…...
Orale数据文件加错位置,你直接rm引发的故障
数据库可能面临硬件故障、人为错误、恶意攻击、自然灾害等多种潜在风险,那么今天这个故障就是由于业务人员加错数据文件的位置,然后直接从物理层面rm -f了,导致了生产的故障! 以下是针对Oracle数据库物理删除数据文件后的快速修复…...
Web网页开发——水果忍者
1.介绍 复刻经典小游戏——水果忍者 2.预览 3.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…...
51 单片机中断控制寄存器 TCON
在 51 单片机中,中断控制寄存器 TCON(Timer/Counter Control Register,定时器 / 计数器控制寄存器)主要用于控制定时器 / 计数器的启动、停止以及外部中断的触发方式等。它既可以按字节寻址,也可以按位寻址,…...
电脑如何在系统默认的壁纸中切换自己喜欢的
1、声明:该切换壁纸仅支持win10。 当你想去切换系统默认的壁纸,但是不知道该怎么切换,别慌,小亦教你几招帮你快速切换自定义壁纸。 我们平常使用的win10桌面壁纸大部分都是 简单、朴素的壁纸,但如果你想要切换自己喜…...
AcWing 600. 仰视奶牛 单调栈模板题
https://www.acwing.com/problem/content/description/602/ 找x右边第一个大于x的数的位置 const int N 1e5 10,T 20;int n; LL a[N],stk[N],top,r[N];void solve() {cin >> n;for (int i 1;i < n;i ) cin >> a[i];for (int i n;i > 1;i --){while(top…...
使用Galaxy创建生物信息学工作流的步骤详解
李升伟 整理 Galaxy 是一个基于 Web 的生物信息学平台,提供了直观的用户界面和丰富的工具,帮助用户创建和管理生物信息学工作流。以下是使用 Galaxy 创建生物信息学工作流的主要步骤: 1. 访问 Galaxy 平台 打开 Galaxy 的官方网站ÿ…...
OmniDrive(2):环境搭建
文章目录 1. 环境安装1.1 cuda 和cudnn安装1.2 依赖包安装2. 准备数据集及权重2.1 下载nuScenes数据2.2 下载预训练权重3. 模型训练及推理3.1 训练3.2 推理根据OmniDrive 官方的环境配置 Environment Setup python 3.9 ubantu 22.04 cuda 11.7 torch1.13.11. 环境安装 1.1 cu…...
计算机底层知识一——从编程语言到可执行程序
好久没写博客了,近段时间事情比较杂,最近终于有时间回归了。其余代码写久了就会遇到许多奇奇怪怪的问题,这些问题绕不开许多底层知识,比如缺少动态依赖库、idea编译失败等等,虽然通过百度等搜索引擎,亦或是…...
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践 引言 在万物互联时代,操作系统对编译技术的需求已从单纯的代码转换演变为跨设备协同、高效资源调度与极致性能优化的综合挑战。华为鸿蒙系统(HarmonyOS)自主研发的ArkCompiler…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_modules
声明在 src/core/ngx_module.h ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);实现在 src/core/ngx_module.c ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle) {/** create a list of modules to be used for this cycle,* copy static modules to it*/cycle->modul…...
Java多线程与高并发专题——关于CopyOnWrite 容器特点
引入 在 CopyOnWriteArrayList 出现之前,我们已经有了 ArrayList 和 LinkedList 作为 List 的数组和链表的实现,而且也有了线程安全的 Vector 和Collections.synchronizedList() 可以使用。 首先我们来看看Vector是如何实现线程安全的 ,还是…...
Wpf-ReactiveUI-Usercontrol与主界面交互
文章目录 Usercontrol与主界面方法一、使用属性绑定UserControl 部分(MyUserControl.xaml.cs)UserControl 视图模型部分(MyUserControlViewModel.cs)主界面部分(MainWindow.xaml)主界面视图模型部分(MainWindowViewModel.cs)方法二、使用消息传递UserControl 视图模型部…...
MySQL中like模糊查询如何优化?
大家好,我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中,LIKE 模糊查询虽然非常常见,…...
用Ruby的Faraday库来进行网络请求抓取数据
在 Ruby 中,Faraday 是一个非常强大的 HTTP 客户端库,它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据,处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求,抓取数据并处理响应。 1.…...
2025天梯训练1
PTA | L3-1 直捣黄龙 30分 思路:多关键字最短路,同时还要记录最短路径条数。 typedef struct node{int from,d,pass,kl;bool operator<(const node &x)const{if(d!x.d) return d>x.d;if(pass!x.pass) return pass<x.pass;return kl<x.…...
DeepSeek教我写词典爬虫获取单词的音标和拼写
Python在爬虫领域展现出了卓越的功能性,不仅能够高效地抓取目标数据,还能便捷地将数据存储至本地。在众多Python爬虫应用中,词典数据的爬取尤为常见。接下来,我们将以dict.cn为例,详细演示如何编写一个用于爬取词典数据…...
揭开AI-OPS 的神秘面纱 第四讲 AI 模型服务层(自研方向)
AI 模型服务层技术架构与组件选型分析(自研方向) 基于自有开发寻训练方向 AI 模型服务层 是 AI-Ops 架构的 核心智能引擎,负责构建、训练、部署、管理和监控各种 AI 模型,为上层应用服务层提供智能分析和决策能力。 AI 模型服务层需要提供一个灵活、可扩展、高性能的平台…...
[通俗易懂C++]:std::optional
[通俗易懂C]:std::optional 考虑下面这样一个函数: int doIntDivision(int x, int y) {return x / y; }如果调用者传入一个语义上无效的值(例如 y 0 ),此函数无法计算一个返回值(因为除以 0 在数学上是未定义的)。在…...
深入理解与配置 Nginx TCP 日志输出
一、背景介绍 在现代网络架构中,Nginx 作为一款高性能的 Web 服务器和反向代理服务器,广泛应用于各种场景。除了对 HTTP/HTTPS 协议的出色支持,Nginx 从 1.9.0 版本开始引入了对 TCP 和 UDP 协议的代理功能,这使得它在处理数据库…...
使用 vxe-table 导出 excel,支持带数值、货币、图片等带格式导出
使用 vxe-table 导出 excel,支持带数值、货币、图片等带格式导出,通过官方自动的导出插件 plugin-export-xlsx 实现导出功能 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:htt…...
Spring-事务
Spring 事务 事务的基本概念 🔹 什么是事务? 事务是一组数据库操作,它们作为一个整体,要么全部成功,要么全部回滚。 常见的事务场景: 银行转账(扣款和存款必须同时成功) 订单系统…...
开源项目介绍:Native-LLM-for-Android
项目地址:Native-LLM-for-Android 创作活动时间:2025年 支持在 Android 设备上运行大型语言模型 (LLM) ,具体支持的模型包括: DeepSeek-R1-Distill-Qwen: 1.5B Qwen2.5-Instruct: 0.5B, 1.5B Qwen2/2.5VL:…...
vocabulary is from your listening,other speaking and your thought.
不要把单词放在自己的大脑里,放在自己的嘴巴里,自己在那疯狂重复的recite,its futile.只是单点记忆单词,记住也是temporary,而且是单点的记忆,当别人说此词汇,你也听不懂或分辨就是这个单词&…...
前端知识点---路由模式-实例模式和单例模式(ts)
在 ArkTS(Ark UI 框架)中,路由实例模式(Standard Instance Mode)主要用于管理页面跳转。当创建一个新页面时,可以选择标准实例模式(Standard Mode)或单实例模式(Single M…...
Matplotlib库中color 参数颜色有多少种
**当我们绘图超过十几种颜色。我都是 定义颜色列表( ** colors [blue, green, red, cyan, magenta, yellow, greenyellow, orange, purple, brown, pink, gray]1、 颜色名称 Matplotlib常用的颜色名称: red 或 r green 或 g blue 或 b yellow 或 y cy…...
LINUX虚拟机中,不能播放RTSP设备,怎么办
首先,主机能够打开RTSP设备。虚拟机无法打开。 虚拟机网络设置 桥接网卡,选择正确的网卡。 虚拟机IP设置 需要是同一个网段。交换机的设备是192.168.1.192 用ffplay测试...
宝塔的ssl文件验证域名后,会在域名解析列表中留下记录吗?
在使用宝塔面板进行SSL证书验证域名后,通常不会在域名解析列表中留下记录。验证过程中添加的TXT记录仅用于验证域名的所有权,一旦验证完成,就可以安全地删除这些记录,不会影响SSL证书的正常使用。根据搜索结果,DNS验证…...
mitt 依赖库详解
一、概述 mitt 是一个极其轻量级的 JavaScript 事件发射器库,实现了发布-订阅模式。该模式允许对象间松散耦合,一个对象(发布者)可以发布事件,而其他对象(订阅者)可以监听这些事件并作出响应。…...
OSPF网络类型:NBMA与P2MP
一、NBMA网络 NBMA网络的特点 连接方式: 支持多台设备连接到同一个网络段,但网络本身不支持广播或组播。典型例子:帧中继、ATM。 DR/BDR选举: 由于网络不支持广播,OSPF需要手动配置邻居。 仍然会选举DR(…...
VUE叉的工作原理?
Vuex 是 Vue.js 的一个专门用于状态管理的库,其工作原理基于单向数据流和集中式存储,旨在解决跨组件之间状态共享和管理的复杂性。以下是 Vuex 的核心工作原理及其关键组成部分: 核心概念 State(状态) Vuex 使用一个单…...
H.264语法结构分析之frame_cropping_flag
技术背景 开发者对接我们轻量级RTSP服务的时候,利用部分开源的播放器,播放流数据的时候,说分辨率不对,导致看到的图像有问题,用我们的player或常见的通用播放器,又都是好的,这就扯到了今天的主…...
【智能体】本地安装Conda和搭建OpenManus环境
整理不易,请不要令色你的赞和收藏。 1. 前言 没体验到 Manus?不妨使用 MetaGPT 开源的 OpenManus 搭建自己的 Manus。本文将带你安装 Conda 并搭建自己的 Manus。 2. 前提条件 已安装 conda,没安装的话,下文有介绍。 OpenManu…...