软件工程与计算II重点整理(第20-23章)
第20、21章 软件交付、软件维护与演化1.软件维护的重要性(1)由于会出现新的需求,如不维护软件将减小甚至失去服务用户的作用。
(2)随着软件产品的生命周期越来越长,在软件生存期内外界环境发生变化的可能性越来越大,因此,软件经常需要修改以适应外界环境的改变
(3)软件产品或多或少的会有缺陷,当缺陷暴露出来时,必须予以及时的解决
2.开发可维护软件的方法(1)考虑软件的可变性:分析需求易变性、为变更进行设计
(2)为降低维护困难而开发:编写详细的技术文档并保持及时更新、保证代码可读性、维护需求跟踪链、维护回归测试基线
3.演化式生命周期模型初步开发—演化—服务—逐步淘汰—停止
(1)初步开发初始开发阶段按照传统的软件开发方式完成第一个版本的软件产品开发。第一版的软件产品可以实现全部需求,也可以(通常是)只包含部分需求——对用户来说非常重要和紧急的最高优先级需求。
(2)演化可能会有预先安排 ...
软件工程与计算II重点整理(第16-19章)
第16章 设计模式1.如何实现可修改性、可扩展性、灵活性教材263页
需要进行接口和实现的分离:通过接口和实现该接口的类;通过子类继承父类
注意:继承关系(A+B)可能使得灵活性下降,因为父类接口的变化会影响子类,这时可以通过组合关系来解决。
利用抽象类机制实现可修改性和可扩展性:只要方法的接口保持不变,方法的实现代码是比较容易修改的,不会产生连锁反应。通过简单修改创建新类的代码,就可以相当容易地做到扩展新的需求(不用修改大量与类方法调用相关的代码。
利用委托机制实现灵活性:继承的缺陷:一旦一个对象被创建完成,它的类型就无法改变,这使得单纯利用继承机制无法实现灵活性(类型的动态改变)。利用组合(委托)机制可以解决这个问题
2.策略模式设计分析:
1)首先,可以把上下文和策略分割为不同的类实现不同的职责。上下文Context类负责通过执行策略实现自己职责;而策略类Strategy只负责复杂策 ...
软件工程与计算II重点整理(第12-15章)
第12章 详细设计概述中层设计+低层设计:实现所有功能性+非功能性需求
1.详细设计的出发点需求开发的结果(需求规格说明和需求分析模型)和软件体系结构的结果(软件体系结构设计方案与原型)
明确职责建立静态模型(设计类图),明确协作建立动态模型(详细顺序图)
GRASP(General Responsibility Assignment Software Patterns)
(1)信息专家模式基本的职责分配原则之一,把职责分配给具有完成该职责所需信息的那个类
例如:总价(委托)——数目——单价——促销策略:耦合没有增加
总价(得到)——数目、单价、促销策略:增加了耦合(总价知道太多)
优点:促进低耦合、高内聚、维护封装
(2)控制器处理外部事件(用户和系统时钟发生的外部交互)
核心思想:解耦
不要界面直接调用代码,也不要代码直接调用界面,把系统/人/用例作为controller
(3)创建 ...
软件工程与计算II重点整理(第8-11章)
第八章 软件设计基础1.软件设计(名词解释)a)为使一软件系统满足规定的需求而定义系统或部件的体系结构、部件、接口和其他特征的过程;
b)设计过程的结果。
2.软件设计的核心思想复杂度控制
分解、抽象、层次性
第九、十章 软件体系结构设计与构建1.体系结构概念部件+连接件+配置
部件:承载系统主要功能,包括处理与数据
连接件:定义部件间的交互,是连接的抽象表示
配置:定义了部件和连接件之间的关联方式,将它们组织称系统的总体结构
2.体系结构的风格的优缺点常见风格模式:
(1)主程序/子程序风格部件:程序、函数、模块
连接件:它们之间的调用
控制从子程序层次结构顶部开始且向下移动
层次化分解:基于定义使用关系
单线程控制
隐含子系统结构:子程序通常合并成模块
层次化推理:子程序的正确性依赖于它调用的子程序的正确性
优点:流程清晰,易于理解;强控制性。
缺点:a.程序调用是一种强耦合的连接方式 ...
软件工程与计算II重点整理(第6-7章)
第六章 需求分析方法1.建立用例图参与者是与开发的系统进行交互的用户或其他系统等角色
用例图中一个单一的参与者可以代表多个用户(或系统)
一个单一的用户(或系统)可能扮演多种角色
参与者不一定是人,例如,需要从当前系统获取信息的外部系统也是参与者
步骤:1)目标分析与解决方向确定 2)寻找参与者 3)寻找用例 4)细化用例
【示例1】
×××连锁商店是一家刚刚发展起来的小型连锁商店,其前身是一家独立的小百货门面店。
首先是随着商店规模的扩大,顾客量大幅增长,手工作业销售迟缓,顾客购物排队现象严重,导致流失客源。其次是商店的商品品种增多,无法准确掌握库存,商品积压、缺货和报废的现象上升明显。再次是商店面临的竞争比以前更大,希望在降低成本,吸引顾客,增强竞争力的同时,保持盈利水平。
BR1:在系统使用6个月后,商品积压、缺货和报废的现象要减少50%
BR2:在系统使用3个月后,销售人员工作效 ...
软件工程与计算II重点整理(第1-5章)
第一、二章 软件工程概论1.软件工程(名词解释)(1)应用系统的、规范的、可量化的方法,来开发、运行和维护软件,即将工程应用到软件。
(2)对(1)中各种方法的研究。
2.从1950s—2000s之间的特点(简答)
1950s:科学计算;以机器为中心进行编程;像生产硬件一样生产软件。
1960s:业务应用(批量数据处理和事物计算);软件不同于硬件;用软件工艺的方式生产软件。
1970s:结构化方法;瀑布模型;强调规则和纪律。它们奠定了软件工程的基础,是后续年代软件工程发展的支撑。
1980s:追求生产力最大化;现代结构化方法/面向对象编程广泛应用;重视过程的作用。
1990s:企业为中心的大规模软件系统开发;追求快速开发、可变更性和用户价值;web应用出现
2000s:大规模web应用;大量面向大众的web产品;追求快速开发、可变更性、用户价值和创新。
第三、四章 项目启动1 ...