《软件工程导论》总结及感谢-小白版

时间:2024-04-13 11:59:38

前言

由于敬爱(canku)的大学老师要求,我不得不在一周之内看完一本书并草草写下这篇文章,不过既然很难在一周内完成这么艰难的任务(并且自己还在搭建自己的博客网站,我自己的博客网站),那我也得假装认真的分析和发表一下自己看这本书确切的说是PDF版本的《软件工程导论》。我写的很小白,有位大佬总结很到位“软件工程导论复习重点总结”,话不多说正文开始!

开始便很困难

我本人并不是在****上发布博客,我是在今日头条上发表,大家可以知道今日头条的编辑是非常简单的存在,并且关于软件方面的文章并不多。那天我打开****准备写一篇文章试试水的时候,发现了一个同简书一样的编辑器,放个图片给大家看看。
《软件工程导论》总结及感谢-小白版
Markdown编辑器并不难用,反而在用了一篇文章后觉得这样的简洁快捷而又方便。那为什么说开始便很困难呢?(417的文章!按照一天60页/天的速度也不是很多对吧,难过)不过再困难也得开始,那就来吧。
《软件工程导论》总结及感谢-小白版

开始阅读

1. 目录分析
从目录上看这本书一共有十章内容,在这里引用这本书作者的前言发现这本书应该是比较的深奥难懂了,再看看作者编辑的介绍,好了,确定是非常不好懂的存在了。

第一章概介绍软件工程学产生的历史背景以及他的基本理念、概念和方法。第二章到第九章按软件生存周期的顺序介绍各个阶段的的任务、方法、过程和工具。第十章着重讨论软件工程的管理技术。

2. 第一章:软件工程的概述
第一章主要包括软件危机、软件工程的简单介绍、软件生命周期和软件过程四个主要方面,阐述了计算机发展的简史,说明了软件开发软件的一些错误的方法和观念的形成原因,同时通过细致的分析软件开发的过程以及一部分模型的简要介绍。由于文章的长度有限不对模型做分析。(实际上我也没有这个能力去分析啊,感兴趣的可以百度百度软件开发过程模型不止有书中提到的8种)
《软件工程导论》总结及感谢-小白版
3. 第二章的好开端
第二种的主要是需求分析、可行性分析以及开发流程的一些规则符号,这个对于我来说比较轻松一点。在这里说这本书,其实对于任何的项目来说,精确的分析是非常重要的,无论是可行性分析(技术可行性、经济可行性、理论可行性、操作可行性等)还是需求分析(用户需求、功能需求还是市场需求等)对于一个完整项目来说都需要符合逻辑且精确。 对于软件的开发同样也是如此,但第二章还包括一些数据字典和符号的使用说明。
《软件工程导论》总结及感谢-小白版

4. 第3章简单分析
需求分析是软件定义时期的最后一个阶段,基本任务是准确回答系统具体做什么,确定系统必须完成那些工作,对目标系统提出完整,准确,清晰,具体的要求。需求分析的任务:

  • 确定对系统的综合要求, 分析系统的数据要求, 导出系统的逻辑模型 修正系统开发计划

    分析过程建立的三种模型:

  • 定义系统模型要区分逻辑模型和物理模型。 常用模型有数据建模、功能建模和行为建模。

    概念模型:E-R图(这个大家太多熟悉就不做过多说明);

    结构化分析方法

  • 结构化分析方法最初只是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。
    扩充后,将建模技术扩展到数据建模、功能建模和行为建模,以实体-关系图、数据流图和控制流图、状态-迁移图为工具,数据字典为核心,从不同视点建立系统的分析模型。

    数据建模:E-R图;功能建模:DFD(数据流图);行为建模:状态转换图

  • 数据建模 数据模型包括三种互相关联的信息:数据对象,描述对象的属性,描述对象间相互连接的关系。

  • 在需求分析阶段描述数据对象和它们之间的关系,使用了E-R 图。

    功能建模:DFD图

  • 行为建模 状态转换图 状态:状态是任何可以被观察到的系统的行为模式,一个状态代表了一种行为方式。初态(实心圆),终态(同心圆),中态(同心圆)。一张状态图中只能有一个初态,终态可以有0到多个。中间状态用圆角矩形表示,上面部分为状态的名称,必须有,中间部分为状态变量的名字和值,可选,下面部分是活动表,

    其他图型工具:

  • 层次方框图 层次图也叫H图,它是一个表示信息系统 结构的有效工具。同模块结构图类似,但 比较简单。层次图一个方框表示一个模块, 方框内写模块名称。用方框间的连线表示 模块间的层次关系。

  • Warnier图 法国计算机科学家Warnier提出了表示信息层 次结构的另外一种图形工具。 Warnier图可以表明信息的逻辑组织,它可以 指出一类信息或一个信息元素是重复出现的, 也可以表示特定信息在某一类信息中是有条件地出现的。 圈加== 异或符号,表明一类信息不能同时出现,px = =表示重复的次数。 IPO图 是输入—输出—处理图的简称。它也是美国IBM公司发展并完善起来的一种图形工具。它 具有简单、易用、描述清晰的特点,用来表示一 个加工比较直观,对设计很有帮助。

  • 一个完整的IPO图由三个大方框组成。左边的方框内写有关 的输入数据,称输入框;中间的方框列出对输入 数据的处理,称处理框;右边的方框写处理所产生的输出数据,称输出框。处理框中从上至下的 顺序表明系统操作的次序。

《软件工程导论》总结及感谢-小白版
5. 第四章分析-形式化说明技术
按照形式化的程度,可以把软件工程使用的 方法划分为非形式化、半形式化、形式化3类。这里说的太多深奥的你们自己看,我也不明白。

  • 用自然语言描述需求规格说明是典型的非形式化方法.
  • 用数据流图或E-R图建立的模型是典型的半形式化方法。
  • 形式化方法是描述系统性质的基于数学 的技术,即如果一种方法有坚实的数学基础,那么它就是形式化的。

6. 第五章分析-总体设计
总体设计包括:系统设计阶段,(确定系统的具体实施方案)和结构设计阶段(确定软件结构)。从工程管理角度来看,软件设计分两步完成:概要设计和详细设计

  • 概要设计:将软件需求转化为软件体系结构 ,确定系统级接口, 全局数据结构或数据库模式。

  • 详细设计:确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节
    设计原理:

  • 模块化

  • 抽象(自顶向下由抽象到具体的方式分配控制),

  • 逐步求精,

  • 信息隐藏和局部化,

  • 模块独立(低耦合,高内聚)

    软件设计的主要手段
    设计应遵循抽象化的原则,包含数据抽象和过程抽象。

  • 过程抽象:是指在软件设计中将处理过程的实现细节隐藏在数据抽象中,可以直接通过模块接口使用这些处理操作。

  • 数据抽象 :是指采用抽象数据类型表示数据,实现数据封装,使得使用者可通过接口使用数据而不必关心数据结构的实现。

    功能独立性

  • 耦合性: 耦合是模块间互相连接的紧密程度的度量,它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。

  • 非直接耦合(Nondirect Coupling):两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
    非直接耦合的模块独立性最强。

  • 内容耦合 (Content Coupling)

  • 内聚性:内聚是一个模块内部各个元素彼此结合的紧密程度的度量。

  • 功能内聚 (Functional Cohesion):一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。

  • 巧合内聚(Coincidental Cohesion):当几个模块内正好有一段代码是相同的,将它们抽取出来形成单独的模块,即巧合内聚模块。这种模块没有独立功能,各部分之间没有联系,或联系很松散。

    层次图和结构图是描述软件的常用工具

6. 最后几章说明
为什么说这里是说明而不是总结或者分析,因为我发现难度实在太大,即便是有了大纲我也很难理清以及梳理好前后的逻辑。因此我就最后几张进行简单的说明和感悟。

  • 在第六章详细设计中主要还是介绍界面设计、人机交互以及实现过程的工具和方法等,我们可以看到文章的程序流程图以及判定表等我只能做一个就简单的阅读(程序流程图理论上还是比较熟悉的),而面向数据结构的设计以及程序复杂度的定量度量都是比较困难的。下面是Nassi和Shneiderman 提出了盒图,又称为N-S图。
    《软件工程导论》总结及感谢-小白版
    最于最后的几章的难度虽然没有之前的大,但是其长度和复杂度都是无比巨大的,看了感觉和没看一模一样

  • 第8章 维护

  • 第9章 面向对象方法学引论

  • 第10章 面向对象分析

  • 第11章 面向对象设计

  • 第12章 面向对象实现

  • 第13章 软件项目管理

    面向对象即使用对象又使用类和继承等机制,而且对象直接仅能通过传递消息实现彼此通信,因此我通过以前学的java和网上查询的资料得知面向对象方法学的优点:

  • 与人类习惯的思维方法一致。 稳定性好。 可重用性好。 较易开发软件产品。 可维护性好。 面向对象的概念:

  • 对象:对问题域中某个实体的抽象,设立某个对象就表示系统具有保存有关它的信息与它进行的交互能力。特点:以数据为中心,对象是主动的,实现了数据的封装,本质上有并行性,模块独立性好。

    其他概念

  • 类:具有相同数据和数据操作的一组相似对象的定义。

  • 实例:由某个实例的类所描述的一个具体的对象

  • 消息:要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明,接收消息的对象,消息选择符,零个或多个变元。

  • 方法:对象所能执行的所有操作,就是类中所定义的服务。

  • 属性:类中所定义的数据,即对客观世界所具有的性质的抽象。

  • 封装:有清晰的边界,有确定的接口(协议),受保护的内部实现,

  • 继承:直接获得已有的性质和特性。

  • 多态性:在类等级的不同层次中可以共享一个行为的名字。

  • 重载:函数重载,在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字,运算符重载,同一运算符可以施加于不同类型的操作数上。

文章总结

说了这么多废话感觉和没说一样,对于一个小白来说做出这些总结还是比较困难的,但我还是要在这里再来几句废话。一个合格甚至是优秀的软件工程师究竟是怎样衡量出来的呢?随着一个个方面的剖析,实则在告诉着我们究竟是需要在哪方面去培养我们自己。其后列举的多条自我晋级之路无疑是条条大道,或许现在我还无法果断的言明我就是要选择其中的种方法,但这些都是些好的参考,或许我们都能参照其中的某些提醒,培养出属于自身的核心竞争力。
本章中多次提到了核心竞争力,但也如书中所言——口诀是公开的,大家学有同样的东西,到底得学会些什么才算是有了属于自己的核心竞争力呢?我相信只要努力学习并坚持着,日积月累你的优势就会发挥出来,不能什么都想学或者太过盲目跟随潮流。
————————————————
企校锦囊-邓木,欢迎大家关注我