【细说软件工程】《软件工程》Software Engineering_engineering+-

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

CMM提供了一个成熟度等级框架:

  • 1级-初始级
  • 2级-可重复级
  • 3级-已定义级
  • 4级-已管理级
  • 5级-优化级

image-20201125143110579

2)美国国防部、美国国防工业委员会和SEI/CMU于1998年启动CMMI项目,希望CMMI是若干过程模型的综合和改进,是支持多个工程学科和领域的系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。(《复旦大学软件工程ppt》)

3)CMMI模型为每个学科的组合都提供两种表示法:阶段式模型和连续式模型。

4、敏捷宣言与敏捷过程的特点

1)敏捷宣言:

(《复旦大学软件工程ppt》)

​ (1)个人和交互高于过程和工具

不是否定过程和工具的重要性,而是强调软件开发中人的作用和交流的作用。软件是由人组成的团队来开发的,与软件项目相关的各类人员通过充分的交流和有效的合作,才能成功地开发出得到用户满意的软件。

如果光有定义良好的过程和先进的工具,而人员的技能很差,又不能很好地交流和协作,软件是很难成功地开发的。

​ (2)可运行软件高于详尽的文档

通过一个可运行的软件了解软件做了什么,远比阅读厚厚的文档要容易得多。

敏捷软件开发强调不断地快速地向用户提交可运行的软件(不一定是完整的软件),以得到用户的认可。

好的必要的文档仍是需要的,它帮助我们理解软件做什么,怎么做,以及如果使用,但软件开发的主要目标时创建可运行的软件。

​ (3)与客户协作高于合同(契约)谈判

只有客户才能明确说明需要什么样的软件,然而,大量的实践表明,在开发的早期客户常常不能完整地表达他们的全部需求,有些早期确定的需求,以后也可能会改变。

要想通过合同谈判的方式,将需求固定下来常常是困难的。

敏捷软件开发强调与客户的协作,通过与客户的交流和紧密合作来F爱心那用户的需求。

(4)对变更及时做出反应高于遵循计划

任何软件项目的开发都应该制订一个项目计划,以确定开发任务的优先顺序和起止日期。然而,随着项目的进展,需求、业务环境、技术等都可能变化,任务的优先顺序和起止日期也可能因种种原因会改变。

因此,项目计划应具有可塑性,有变动的余地。当出现变化时几十做出反应,修订计划以适应变化。

2)敏捷过程的特点

(《复旦大学软件工程ppt》)

​ (1)最优先的是通过尽早地和不断地提交有价值的软件使用户满意

​ (2)欢迎变化的需求,即使该变化出现在开发后期,为了提升对客户的竞争优势,Agile过程利用变化作为动力。

​ (3)以几周到几个月为周期,尽快、不断地发布可运行软件

​ (4)在整个项目过程中,业务人员和开发人员必须天天一起工作

​ (5)以积极向上的员工为中心建立项目组,给予他们所需要的环境和支持,对他们的工作予以充分的信任

​ (6)项目组内效率最高、最有效的信息传递方式是面对面的交流

​ (7)测量项目进展的首要依据是可运行的软件

​ (8)敏捷过程提倡可持续的开发,项目发起者、开发者和用户应能长期保持恒定的速度

​ (9)应时刻关注技术上的精益求精和好的设计,以增强敏捷性

​ (10)简单化是必不可少的,这是尽可能减少不必要工作的艺术

​ (11)最好的架构、需求和设计出自于自我组织的团队

​ (12)团队要定期反思怎样才能更有效,并据此调整自己的行为

二、软件需求

1、软件需求的概念

答:

主观需求:用户解决一个问题或达到一个目标所需要的一种状态或能力;

客观需求:系统为了满足一种约定、标准、规格说明或其它正式文件而必须满足或拥有的一种状态或能力;

功能性需求

  1. 系统需要提供的服务或功能:如图书检索;
  2. 系统对特定输入的处理方式:如对非法输入的提示;
  3. 系统在特定环境下的行为:如长时间无操作的屏保;

非功能性需求

  1. 对系统功能或服务附加的质量约束,例如响应时间、容错性、安全性等-客户所关心的(外部质量);
  2. 从系统开发和维护角度的质量属性,例如可理解下、可扩展性等-软件开发或维护者所关心的(内部质量、软件所持有)
2、需求工程的基本过程

答:

需求获取、需求分析与协商、系统建模、需求规约、需求验证、需求管理

3、分层数据流模型

答:

分层数据流图的设计方法

第一步,画子系统的输入输出

把整个系统视为一个大的加工,然后根据数据系统从哪些外部实体接受数据流,以及系统发送数据流到哪些外部实体,就可以画出输入输出图。这张图称为顶层图。

第二步,画子系统的内部

把顶层图的加工分解成若干个加工,并用数据流将这些加工连接起来,使得顶层图的输入数据经过若干加工处理后,变成顶层图的输出数据流。这张图称为0层图。从一个加工画出一张数据流图的过程就是对加工的分解。可以用下述方法来确定加工:在数据流的组成或值发生变化的地方应该画出一个加工,这个加工的功能就是实现这一变化,也可以当作一个单位来处理(这些数据一起到达、一起处理)时,可以把这些数据看成一个数据流。关于数据存储,对于一些以后某个时间要使用的数据,可以组织成为一个数据存储来表示。

第三步,画加工的内部

把每个加工看作一个小系统,把加工的输入输出数据流看成小系统的输入输出流。于是可以像画0层图一样画出每个小系统的加工DFD图。

第四步,画子加工的分解图

对第三步分解出来的DFD图中的每个加工,重复第三步的分解过程,直到图中尚未分解的加工都是足够简单的(即不可再分解)。至此,得到一套分层数据流图。

第五步,对数据流图和加工编号

对于一个软件系统,其数据流图可能有许多层,每一层又有许多张图。为了区分不同的加工和不同的DFD子图,应该对每张图进行编号,以便于管理。

  • 顶层图只有一张,图中的加工也只有一个,所以不必为其编号。
  • 0层图只有一张,图中的加工号分别为0.1、0.2、…,或者1,2.
  • 子图就是父图中被分解的加工号。
  • 子图中的加工号是由图号、圆点和序号组成,如:1.12、1、3等等。
4、用例和场景建模及其UML表达(用例图、活动图、泳道图、顺序图)

用例图:

用例是对一个活动者使用系统的一项功能时所进行的交互过程的一个文字描述序列。对系统的用户需求的描述,表达的是系统的功能和所提供的服务,它只描述活动者和系统在交互过程中做些什么,并不描述怎么做。

image-20201202140233031

活动图:

活动图是状态图的一种特殊情况。用于简化描述一个过程或者操作的工作步骤。活动用圆角矩形表示-比状态图更窄,更接近椭圆。一个活动中的处理一旦完成,则自动引起下一个活动的发生。箭头表示从一个活动转移到下一个活动。和状态图类似,活动图中的起点用一个实心圆表示,终点用一个同心圆(内圆是实心圆)表示。在活动图中可以带判定点,即一组条件引发一条执行路径,另一组条件则引发另一条执行路径,并且这两条执行路径时互斥的。判定点常用小的菱形图标表示,同时在相关路径的附近指明引起这条路径被执行的条件,条件用方括号括起来。请用活动图描述打电话过程。

image-20201202142229171

泳道图:

泳道将活动图中的活动划分为若干组。并将一组指定给负责这组活动的业务组织。在活动图中,泳道使用垂直的实线绘制。

image-20201202142408417

顺序图:

顺序图是强调消息时间的交互图,其描述了对象之间传送消息的时间顺序,用来表示用例中的行为顺序。在该二维图中,对象由左至右排列,消息则沿着纵轴由时间顺序排列。在构筑改图时,应布局简洁。

示意图,购买小车简图。

image-20201202144912288

5、数据模型建模及其UML表达(类图)

答:

类图(Class Diagram)是描述类、接口、协作以及它们之间关系的图,用来显示系统中各个类的静态结构。类图是定义其他图的基础,在类图基础上,可以使用状态图、协作图、组件图和配置图等进一步描述系统其他方面的特性。

在UML中,类被表述成为具有相同结构、行为和关系的一组对象的描述符号。所用的属性与操作都被附在类中。类定义了一组具有状态和行为的对象。其中,属性和关联用来描述状态。属性通常使用没有身份的数据值来表示,如数字和字符串。关联则使用有身份的对象之间的关系表示。行为由操作来描述,方法是操作的具体实现。对象的生命周期则由附加给类的状态机来描述。

在UML的图形表示中,类的表示法是一个矩形,这个矩形由三个部分构成,分别是类的名称(Name)、类的属性(Attribute)和类的操作(Operation)。类的名称位于矩形的顶端,类的属性位于矩形的中间部位,而矩形的底部显示类的操作。中间部位不仅显示类的属性,还可以显示属性的类型以及属性的初始化值等。矩形的底部也可以显示操作的参数表和返回类型等,如图1所示。

image-20201202150918016

在类的构成中还应当包含类的职责(Resopnsibility)、类的约束(Constraint)和类的注释(Note)等信息。

6、行为模型建模及其UML表达(状态机图)

答:

状态机图是用来为对象的状态及造成状态改变的事件建模。UML的状态机图主要用于建立对象类或对象的动态行为模型,表现一个对象所经历的状态序列,引起状态或活动转移的事件,以及因状态或活动转移而伴随的动作。状态机图也可用于描述Use Case,以及全系统的动态行为。

image-20201202151324737

三、软件设计与构造

1、软件体系结构及体系结构风格的概念

答:

软件体系结构(百度版):具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,链接构件把体系结构的不同部分分组组合连接起来。这一定义注重区分处理构件、数据构件和连接构件,这一方法在其他的定义和方法中基本上得到保持。由于软件系统具有的一些共同特性,这种模型可以在多个系统之间传递,特别是可以应用到具有相似质量属性和功能需求的系统中,并能够促进大规模软件的系统级复用。

软件体系结构(指定教材版本):程序或计算机系统的软件体系结构是指系统的一个或者多个结构,它包括软件构件、构件的外部可以见属性以及它们之间的相互关系。

体系结构并非可运行的程序。它是一种表达,能达到以下三种目的:

1)对设计在满足既定需求方面的有效性分析

2)在设计变更相对容易的阶段,考虑体系结构可能的选择方案

3)降低与软件构建相关的风险

体系结构风格:对软件体系结构风格的研究和实践促进了对设计的复用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。体系结构风格的不变部分使不同的系统可以分享同一个实现代码。只要系统是使用常用的、规范的方法来组织,就可使别的设计者很容易地理解系统的体系结构。例如,如果某人把系统描述为“客户/服务器”模式,则不必给出设计细节,我们立刻就会明白系统是如何组合和工作的。

下面是Garlan和Shaw对通用体系结构风格的分类:

1)数据流风格:批处理序列;管道/过滤器

2)调用/返回风格:主程序/子程序;面向对象风格;层次结构

3)独立构件风格:进程通讯;事件系统

4)虚拟机风格:解释器;基于规则的系统

5)仓库风格:数据库系统;超文本系统;黑板系统

2、设计模式的概念(来自百度)

答:

软件设计模式(Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

3、模块化设计的基本思想及概念(抽象、分解、模块化、封装、信息隐藏、功能独立)(来自教材)

1)模块化:模块化设计思想是把整个软件划分为几个独立命名的或者独立访问的构成成分,这些模块集合起来就满足了问题的需要,就能把一个大而复杂的软件系统划分成易于理解的比较单纯的模块化结构。

模块化的要求:需要满足信息隐蔽原则,模块之间相互独立,并且尽量符合高内聚低耦合的要求。

2)封装:是一种信息隐蔽技术,用户只能看到对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用和生产者分离。使对象的定义和实现分开。一个对象通常由对象名、属性和操作三部分组成。

3)信息隐蔽:每个模块的实现细节对于其它模块来说是隐蔽的(不可访问),即模块中所包含的信息(数据和过程)不允许其它不需要这些信息的模块使用。

信息隐蔽作用:设计时把一些可能发生变化的因素隐蔽在某个模块中,以提高可维护性,并且可以减少错误向外传播。

4、软件重构的概念;软件体系结构的UML建模(包图、类图、构件图、顺序图、部署图);(来自博客与教材)

答:

1)重构:以不改变代码外部行为而改进其内部结构的方式来修改软件系统的过程。这是一种净化代码以尽可能减少引入错误的严格方法。

2)包图(略,非重点):属于静态图的一种

3)类图(重点):展示系统类的静态结构,即类与类之间的相互联系。

image-20201210104320458

具体含义及其画法(看网站一学就会)https://blog.csdn.net/monkey_d_meng/article/details/6005764(博客 )

4)构件图

构件图显示代码的静态结构、是用代码组件来显示代码物理结构的。

img

5)顺序图(重点)

用来显示对象之间发送消息的顺序,以及对象之间的交互,例题:

image-20201210131328790

6)部署图(略,非重点)

展现系统中硬件和软件的物理机构

画法:https://blog.csdn.net/wangyongxia921/article/details/8250129

5、接口的概念;面向对象设计原则(开闭原则、Liskov替换原则、依赖转置原则、接口隔离原则)

开闭原则

类的改动是通过增加代码进行的,而不是修改源代码。

里氏代换原则

任何抽象类出现的地方都可以用他的实现类进行替换,实际就是虚拟机制,语言级别实现面向对象功能。

依赖倒转原则

依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。

接口隔离原则

不应该强迫用户的程序依赖他们不需要的接口方法。一个接口应该只提供一种对外功能,不应该把所有的操作都封装到一个接口中去。

6、内聚与耦合的概念,常见的内聚和耦合类型

答:

“高内聚,低耦合”

起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准-耦合性和内聚性。

耦合性也称块间联系。指软件系统结构中各模块间互相联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

耦合性分类(低-高):无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;内容耦合;

1)无直接耦合:两个模块之间没有直接联系,它们之间的联系完全是通过主模块的控制和调用来实现的;

2)数据耦合:指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;

3)标记耦合:指连个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;

4)控制耦合:指一个模块调用另外一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;

5)公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。

6)内容耦合:这是最高程度的耦合,也是最差的耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。

内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。

内聚性分类(低-高):偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚;功能内聚;

1)偶然内聚:指一个模块内的各处理元素之间没有任何联系。

2)逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一功能。

3)时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。

4)通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的数据数据。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

联系。

2)逻辑内聚:指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一功能。

3)时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。

4)通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的数据数据。

[外链图片转存中…(img-EZ88wWpp-1715792026953)]
[外链图片转存中…(img-1h2qn7lQ-1715792026953)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值