天天看点

软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现

软件工程个人笔记

仅作个人整理,期末背答案用。

软件工程导论第六版答案见:软件工程导论(第六版)课后习题答案

mark一个详细笔记:《软件工程导论》学习笔记

mark一个软工导论简答题:软件工程复习资料简答题

章节

  • 第1章 软件工程学概述
  • 第2章 可行性研究
  • 第3章 需求分析
  • 第4章 形式化说明技术
  • 第5章 总体设计
  • 第6章 详细设计
  • 第7章 实现
  • 第8章 维护
  • 第9章 面向对象方法学引论
  • 第10-12章 面向对象分析、设计和实现

第1章 软件工程学概述

1.1 软件生命周期各阶段任务是什么?

软件生命周期由软件定义,软件开发和运行维护三个时期组成。每个时期又分为若干阶段。

软件定义时期:问题定义、可行性研究、需求分析。

开发时期:总体设计、详细设计、编码和单元测试、综合测试。

运行维护时期:软件维护。

1、问题定义:要解决的问题是什么

2、可行性研究:确定问题是否值得解,技术可行性、经济可行性、操作可行性

3、需求分析:系统必须做什么

4、总体设计:系统如何实现,包括系统设计和结构设计

5、详细设计:具体实现设计的系统

6、实现:编码和测试

7、运行维护:保证软件正常运行。

各阶段说明见:软件开发生命周期各阶段的任务

1.2 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?

软件危机是指在计算机软件开发、 使用与维护过程中遇到的一系列严重问题和难题。 它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。

软件危机的典型表现:

(1) 对软件开发成本和进度的估计常常很不准确。

(2) 用户对已完成的软件不满意的现象时有发生。

(3) 软件产品的质量往往是靠不住的。

(4) 软件常常是不可维护的。

(5) 软件通常没有适当的文档资料。 文档资料不全或不合格, 必将给软件开发和维护工作带来许多难以想象的困难和难以解决的问题。

(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。

(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。

软件危机出现的原因:

(1) (客观)来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。

(2) (主观)软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。

(3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。

1.3 什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机?

1993 年 IEEE的定义:软件工程是:① 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;② 研究①中提到的途径。

软件工程的本质特征:

(1) 软件工程关注于大型程序 ( 软件系统 ) 的构造 。

(2) 软件工程的中心课题是分解问题,控制复杂性。

(3) 软件是经常变化的,开发过程中必须考虑软件将来可能的变化。

(4) 开发软件的效率非常重要,因此,软件工程的一个重要课题就是,寻求开发与维护软件的更好更有效的方法和工具。

(5) 和谐地合作是开发软件的关键。

(6) 软件必须有效地支持它的用户。

(7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人 ( 完成一些工作 )。

消除软件危机的途径:(技术措施:方法、工具;组织管理措施)

(1) 对计算机软件有一个正确的认识 ( 软件≠程序,软件是程序、数据及相关文档的完整集合)

(2) 必须充分认识到软件开发不是某种个体劳动的神秘技巧, 而应该是一种组织良好、 管理严密、各类人员协同配合、共同完成的工程项目

(3) 推广使用在实践中总结出来的开发软件的成功技术和方法

(4) 开发和使用更好的软件工具

1.4 软件工程方法学包含三个要素:方法、工具和过程。

简述结构化范型和面向对象范型的要点,并分析他们的优缺点。

  1. 传统方法学:也称为生命周期方法学或结构化范型。

    优点:把软件生命周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作, 从而降低了整个软件开发过程的困难程度。

    缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。

  2. 面向对象方法学=对象+类+继承+用消息通信

    优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作; 促进了软件重用。

    缺点:没有准确的定义、维护困难、不适合所有的应用。

第2章 可行性研究

2.1可行性研究的任务

可行性研究的目的就是用最小代价在尽可能短的时间内确定问题是否能够解决。

可行性研究应从以下几个方面来分析:

(1)技术可行性∶使用现有技术能实现这个系统吗?

(2)经济可行性:该系统的经济效益能超过他的开发成本吗?

(3)操作可行性∶系统的操作方式在这个用户组织内性的通吗?

(4)有时需从法律、社会效益等更广泛方面分析可行性。

2.2 数据流图DFD(自行看题)

数据流图有4种成分:源点或终点,处理,数据存储和数据流。

数据字典由下列4类元素定义组成:数据流、数据流分量、数据存储、处理。

点\边遍历方法

银行计算机储蓄系统数据流图和结构图:银行拟开发计算机储蓄系统

航空公司机票预定系统数据流图:机票预定系统

第3章 需求分析

3.1 为什么要进行需求分析?通常对软件系统有哪些要求?

用户需求、系统需求。

1)为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件, 不论我们把设计和编码工作做得如何出色, 不能真正满足用户需求的程序只会令用户失望,给开发者带来烦恼。

2)确定对系统的综合要求: 1、功能需求; 2、性能需求; 3、可靠性和可用性需求; 4、出错处理需求; 5、接口需求; 6、约束; 7、逆向需求; 8、将来可以提出的要求,分析系统的数据要求。

3.2 IPO图、E-R图(自行看题)

3.3 用例图、类图、对象图

第4章 形式化说明技术

4.1 形式化说明技术和欠形式化方法的优缺点。

自然语言系统规格说明书,可能存在矛盾、二义性、含糊性、不完整性及抽象层次混乱等问题。

形式化说明优点:1,简洁准确的描述物理现象,对象获动作的结果。2,可以在不同软件工程活动之间平滑的过度。3,它提供了高层确认的手段。

缺点:大多形式化的规格说明主要关注系统的功能和数据,而时序的问题,控制和行为等方面的需求却更难于表示。

4.2 其他都好难、应该不考吧

第5章 总体设计

5.1 总体设计由两个主要阶段构成:

  1. 系统设计阶段——确定系统具体实现方案
  2. 结构设计阶段——确定软件结构

共9个步骤:设想供选择的方案、选取合理的方案、推荐最佳方案、功能分解、设计软件结构、设计数据库、制定测试计划、书写文档、审查和复审。

5.2 设计原理

对比面向对象的设计原理10.2

  1. 模块化
  2. 抽象
  3. 逐步求精
  4. 信息隐藏和局部化
  5. 模块独立:

    耦合(由低到高):度量模块之间互相连接的紧密程度。

    非直接耦合、数据耦合、控制耦合、特征耦合、公共环境耦合、内容耦合。

    内聚(由高到低):度量一个模块内部各个元素彼此结合的紧密程度。

    功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚。

5.3 层次图、结构图(自行看题)

5.4事务流-事务分析、变换流-变换分析(自行看题):将数据流图转换为软件结构

5.5 面向过程(结构化)的启发规则:见10.3

5.6 某BBS模板的发帖子系统有如下功能:(1)记录发帖内容:访客在表单中输入文字,系统进行检查,存入文件。

(2)显示发帖内容:读出文件,按一定格式显示在屏幕上。请根据功能要求画出该系统的数据流图,并将其转换为软件结构图。

软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现
软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现

第6章 详细设计

6.1 为了实现使用程序流程图描述结构化程序,必须限制程序流程图只使用以下五种基本控制结构:顺序型 、 选择型 、 DO while 型循环、DO until 型循环、 DO case型选择。

6.2 软件的详细设计可以采用图、表、过程设计语言 三种形式的描述工具表示模块的处理过程。

6.3 狭义的定义结构化程序设计:程序代码仅通过顺序、选择和循环这3种基本控制结构进行连接,并且代码块单入口单出口。

6.4 程序流程图、盒图(N-S图)、PAD图(自行看题)

6.5 程序流图转数据流图

第7章 实现

7.1 把编码和测试统称为实现

7.2 软件测试的目标:

测试是为了发现程序中的错误而执行程序的过程。

好的测试方案是极有可能发现迄今为止尚未发现的错误的测试方案。

成功的测试是发现了至今为止尚未发现的错误的测试。

7.3 软件测试包括哪些步骤?分别说明这些步骤的对象是什么,

(1)模块测试(单元测试),测试对象为单元模块。这个步骤往往发现的是编码和详细设计的错误。

(2)集成测试 ,测试对象为组装后的程序模块。子系统测试着重测试模块接口,系统测试发现的往往是软件设计中的错误及需求说明中的错误。

(3)验收测试(确认测试) ,测试对象为可运行的目标软件系统。往往发现系统需求说明书的错误。

(4)最后一步是平行运行 ,同时运行新开发的系统和旧系统,比较两个系统处理结果。

7.4 白盒测试中的逻辑覆盖有哪几种常用的覆盖技术?试对它们的检错能力进行比较。

答: (1)语句覆盖

(2) 判定覆盖 (比语句覆盖严格些 )

(3) 条件覆盖 (比单是判定覆盖要严格 )

(4) 判定 /条件测试 (条件覆盖也不一定满足判定覆盖, 因为只符合条件覆盖的用例

可能会不满足每个判定语句均有真值或假值出现。因此要两者兼顾)

(5) 条件组合覆盖 (是前两个覆盖的组合)

(6) 路径覆盖 (指设计足够的测试用例,覆盖被测程序中所有可能的路径)

点覆盖:同语句覆盖

边覆盖:同判定覆盖

条件组合发现错误的能力较强,凡满足其标准的测试用例,也必然满足前四种覆盖标准,在实际的逻辑测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例来达到路径覆盖的测试标准。

7.5 黑盒测试技术:等价划分、边界值分析、错误推测。

7.6 黑盒测试、白盒测试的区别、优缺点

7.7 输入三个整数,判断是否构成三角形。如构成三角形,则输出三条边的值,否则输出“不能构成三角形”。

3.输入三个整数,判断是否构成三角形。如构成三角形,则输出三条边的值,否则输出“不能构成三角形”。

(1)用程序流程图表示该问题的算法;(2)计算程序的环形复杂度;(3)设计路径覆盖的测试用例。

软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现
软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现
软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现
软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现

7.8 4.某企业进行公开招聘,规定报名者年龄应在16~35岁之间(1982年1月1日到1999年12月31日为止),出生年日不早于1967年2月,不晚于1986年3月。报名程序具有自动检验输入教据的功能,如出生年日不在上述范围内将拒绝接受,并显示“年龄不合格”等出错信息。

(1)试用等价分类法,设计出生年月的等价分类表:(2)设计有效等价类、无效等价类需要的测试用例:(3)采用边界值分析法来选择测试用例。

软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现
软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现
软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现
软件工程个人笔记第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现第8章 维护第9章 面向对象方法学引论第10-12章 面向对象分析、设计和实现

第8章 维护

8.1 软件的可维护性与哪些因素有关?

(1)可理解性(2)可预测性(3)可修改性(4)可移植性(5)可重用性

8.2 软件维护是软件生命周期的最后一个阶段。主要任务:维护软件的正常运行,不断改进软件的性能和质量,为软件的进一步推广应用和更新替换做积极工作。

8.3 软件文档分为用户文档和系统文档两大类。用户文档主要描述系统文档和使用方法(功能描述、安装文档、使用手册、参考手册、操作员指南)。系统文档包含系统设计、实现、测试等方面。

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

9.1 什么是面向对象方法学?它有什么什么优点?

面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。

面向对象方法学的优点:

  1. 与人类习惯的思维方法一致。
  2. 稳定性好。
  3. 可重用性好。
  4. 较易开发软件产品。
  5. 可维护性好。

    补:面向对象方法四个要点:对象、类、继承和消息

9.2 请分析UML2.0中的顺序图和协作图两者之间的主要差别和各自的优缺点。

答:协作图可视化地表示了对象之间随事件发生的交互,他除了展示对象之间的关联,还显示出对象之间的消息传递。与顺序图一样,协作图也展示对象之间的交互关系。顺序图强调的是交互的时间顺序,而协作图强调的是交互的语境和参与交互的对象的整体组织。顺序图按照时间顺序布图,而协作图按照空间组织布图。顺序图可以清晰地表示消息之间的顺序和时间关系,但需要较多的水平方向的空间协作图在增加对象时比较容易,而且分支也比较少,但如果消息比较多,则难以表示消息之间的顺序。

9.3 面向对象建模:3种形式的模型

第一是描述系统数据结构 的对象模型(UML类图),

第二是描述系统控制结构的动态模型(状态转化图);

第三是描述系统功能的功能模型(用例图)。

9.4 类与类之间通常有关联、泛化(继承)、依赖和 细化等4种关系。

第10-12章 面向对象分析、设计和实现

10.1 面向对象建模是OOA的关键。OOA的模型要表示出系统的数据、功能和行为三方面的基本特征,因此通常需要建立三种模型,分别是对象模型、动态模型和功能模型。其中:

(1)对象模型描述系统的数据结构,它是用来描述系统包含的对象及对象之间关系的模型;

(2)动态模型描述系统的控制结构,它是用来确定各个对象之间交互及整体的控制结构的模型;

(3)功能模型描述系统的功能,它是用来描述系统要实现的功能的模型

10.2 面向对象设计的准则,简述每条准则内容

模块化:对象就是模块。

抽象:类实际上是一种抽象数据类型,对外开放公共接口。

信息隐藏:通过对象的封装性实现,类结构分离了接口与实现,从而支持了信息隐藏。

弱耦合:对象是最基本的模块,耦合指不同对象之间相互关联的紧密程度。对象不可能完全孤立,两个对象相互依赖时通过公共接口耦合,不应该依赖类的具体实现细节。

强内聚:内聚衡量一个模块内各个元素彼此结合的紧密程度,面向对象设计存在三种内聚:服务内聚、类内聚、一般-特殊内聚。

可重用:一方面指使用已有的类,二是创建新类时考虑将来的可重复使用性。

10.3 面向对象设计的启发式规则

  1. 设计结果应该清晰易懂
  2. 一般/特殊结构的深度应适当
  3. 设计简单的类
  4. 使用简单的协议
  5. 设计简单的服务
  6. 最小设计变动

   对比结构化设计的启发规则:

  1. 改进软件结构提高模块独立性
  2. 模块规模应该适中
  3. 深度、宽度、扇入和扇出都应该适中
  4. 模块的作用域应该在控制域之内
  5. 力争降低模块接口的复杂程度
  6. 设计单入口单出口的模块
  7. 模块功能应该可以预测

10.4 面向对象实现应该选用哪种设计语言?

  1. 是否能占主导地位
  2. 可重用性
  3. 类库和开发环境等
  4. 其他因素

10.6 程序设计风格

  1. 提高可重用性
  2. 提高可扩充性
  3. 提高健壮性