标签:proxy 间接 重构 识别 lsp sof 计算机技术 运行环境 算法
软件工程方法学包括3个要素:即方法、工具和过程
软件工程的框架可概括为:目标、过程和原则
1.目标
生产具有正确性、可用性、开销合宜的产品
2.过程
生产满足需求并达到工程目标的软件产品所需要的步骤,主要包括:开发、运作和维护过程,他们覆盖了需求、设计、实现、确认及维护等活动。
需求活动:问题分析和需求分析
设计活动:概要设计和详细设计
实现活动:设计结果转化为可执行的代码
确认活动:贯穿于整个开发过程
维护活动:使用过程中的扩充、修改和完善
3.原则
在软件开发中必须遵循的原则
(1)用分阶段的生存周期计划进行严格管理
(2)坚持进行阶段评审
(3)实行严格的产品控制
(4)采用现代程序设计技术
(5)软件工程结果应能清楚的审查
(6)开发小组的人员应该少而精
(7)承认不断改进软件工程实践的必要性
软件生存周期(software life cycle)指从形成软件概念起,开发的软件使用以后直到失去使用价值为止的整个过程。整个生存周期划分为若干个阶段,每个阶段都有明确的任务,这样使规模大、结构复杂且管理复杂的软件开发变得容易控制和管理。
软件生存周期一般包括如下阶段:
(1)计划和可行性研究(问题定义和可行性研究)
(2)需求分析
(3)设计(概要设计、详细设计)
(4)编码
(5)测试
(6)运行和维护
生存周期的划分降低了每个阶段任务的复杂性,简化了不同阶段之间的联系,有利于软件开发过程中的组织和管理。
在正式和非正式设计复审期间应该从容易修改、模块化、功能独立的目标出发评价软件的结构和过程,设计中应该对将来可能修改的部分做准备。
代码复审应该强调编码风格的内部说明文档这两个影响可维护性的因素
每个测试步骤都可以提示软件正式交付使用前程序中可能需要做预防性维护的部分,在测试结束阶段进行正式的维护性复审,又称“配置复审”。其目的是保证软件配置的所有成分是完整的、一致的、可理解的
软件的易理解和可维护程度是衡量软件质量的重要指标。
1.首先,要有详细且正确的软件文档,同时文档应始终与软件代码保持一致
2.其次,编写的代码应具有良好的编程风格:如
(1)采用较好的程序结构
(2)增加必要的程序注释
(3)尽量使用行业或项目规定的标准
为提高软件的可维护性,在软件开发阶段必须采取相关措施:如
(1)编制相关软件文档
(2)规范软件编码规范
(3)进行充分有效的测试
(4)组织阶段复审
软件的文档分为:开发文档、管理文档、用户文档
(1)开发文档:在软件开发阶段,是前一阶段的工作成果体现,也是后一阶段执行的依据
(2)管理文档:可以提高软件开发过程的能见度和开发效率
(3)用户文档:为用户准备的软件使用、操作及维护的资料
瀑布模型(Waterfall Model)是早期广泛采用的软件开发模型。其核心思想是按工序将问题简化,将功能的实现和设计分开,将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试、运行维护6个阶段,并且规定了自上而下的相互衔接的固定顺序,如同瀑布流水、逐级下落。
瀑布模型的优点:
(1)为项目提供了按阶段划分的检查点
(2)当前一阶段完成后只需关注后一阶段的任务
(3)可在迭代模型中应用瀑布模型,每次迭代产生一个可运行的版本,同时增加更多的功能
瀑布模型的主要问题:
(1)各个阶段划分完全固定,在各个项目间极少有反馈。阶段之间产生大量文档,极大增加了工作量
(2)由于开发模型是线性的,因此用户只有等到整个过程末期才能见到开发结果,从而增加了开发的风险
(3)早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果
按照用户的原则结构化且模块化,自顶向下的分析与设计系统,基于数据流进行需求分析和软件设计,用抽象模型,自顶向下逐层分解问题和功能
它从目标系统的输入输出数据结构入手,导出程序框架结构,也称为“面向数据结构的软件设计方法”
Jackson方法的5个步骤:
(1)分析并确定输入和输出数据的逻辑结构,并用jackson结构图表示这些数据结构
(2)找出输入和输出数据有对应关系的数据单元
(3)按照一定的规则由输入输出数据结构导出程序结构
(4)列出基本操作与条件,并将其分配到适当位置
(5)用伪代码写出程序
(1)Booch方法
(2)Coad方法
(3)OMT方法
(4)UML统一建模语言
敏捷开发(Agile Development)是一种以人为核心,迭代且循序渐进的开发方法,其中软件项目的构建被切分为多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目拆成多个相互联系且可以独立运行的小项目并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发的宣言如下:
(1)个体和交互胜过过程和工具
(2)可以工作的软件胜过面面俱到的文档
(3)客户合作胜过合同谈判
(4)相应变化胜过遵循计划
敏捷宣言提出的12条原则:
(1)优先要做的是通过今早且持续交付有价值的软件来使客户满意
(2)即使到了开发的后期,也欢迎改变需求,敏捷过程利用变化来为客户创造竞争的优势
(3)经常性的交付可以工作的软件,交付的间隔可以从几个星期到几个月,这个间隔越短越好
(4)在整个项目开发期间业务和开发人员必须天天在一起工作
(5)围绕被激励的个体来构建项目,提供所需的环境和支持,并且信任其能够完成工作
(6)在团队中最具有效果并附有效率的传递信息的方法就是面对面交谈
(7)工作的软件是首要的进度度量标准
(8)敏捷过程提倡可持续的开发速度,负责人、开发人员、用户应该能够保证一个长期且恒定的开发速度
(9)不断的关注优秀的技能和良好的设计会增强敏捷能力
(10)简单是最根本的
(11)好的构架、需求和设计处于自组织团队
(12)每隔一定的时间团队会在如何才能更有效的工作方面进行反省,然后相应的调整工作
原型模型也称“样品模型”,主要思想是:首先借用已有系统作为原型模型,通过“样品”不断改进,使得最后的产品就是用户所需要的
原型模型的特点:
(1)开发人员和用户在“原型”上达成一致,这样可以减少设计中的错误和开发中的风险,也减少了培训用户的时间,并提高了系统的实用性、正确性及用户的满意程度
(2)缩短了开发周期,加快了工程进度
(3)降低了成本
螺旋模型属于渐增式开发方法的模型,它将瀑布模型和快速原型模型结合起来,强调了风险分析,适合于大型复杂的系统
螺旋模型的4个象限的活动如下所示:
(1)制定计划:确定软件目标、选定实施方案、弄清项目开发的限制条件
(2)风险分析:分析评估所选方案、考虑识别和消除风险
(3)实施工程:实施软件开发和验证
(4)客户评估:评价开发工作、提出修正建议、制定下一步计划
螺旋模型的限制条件:
(1)螺旋模型强调风险分析,但要求许多客户接受和相信这种分析是不容易的,只适用于大规模的内部软件开发场合
(2)执行风险分析将大大影响项目的利润
(3)软件开发人员难以寻找可能的风险并作出准确的分析
螺旋模型的缺点是:很难让用户确信这种演化方式的结果可以控制,建设周期长,而软件技术发展比较迅速,经常出现开发完毕后与当前技术水平有一定差距,无法满足用户需求
面向对象有如下概念:
(1)对象
(2)类
(3)消息和方法
面向对象有如下特征:
(1)对象唯一性
(2)分类性
(3)继承性
继承性是面向对象设计语言不同于其他语言的最重要的特点
单重继承:子类只继承一个父类的数据结构和方法
多重继承:子类只继承多个父类的数据结构和方法
(4)多态性
(5)抽象
(6)封装性
对象是封装的最基本单位
(7)共享性
·同一类中的共享
·同一应用中的共享
·不同应用中的共享
重构:不改变系统外部行为下对内部结构进行整理优化,使得代码尽量简单、优美且可扩展
·确定类
·准备数字字典
·确定关联
·确定属性
·使用继承来细化类
·完善对象模型
·准备脚本
·确定事件
·准备事件跟踪表
·构造状态图
·确定输入输出值
·建立数据流图
·最后确定类的操作
面向对象设计的准则如下:
(1)模块化:把系统分解成模块的设计原则
(2)抽象:不仅支持过程抽象,还支持数据抽象
(3)信息隐藏:通过对象的封装性来实现
(4)低耦合:耦合指的是不同对象之间的相互关联程度
(5)高内聚:内聚指的是一个模块中各个元素的相关性和紧密程度
·系统分解
·确定并发性
·处理器及任务分配
·数据存储管理
·全局资源的处理
·选择软件控制机制
·人机交互接口设计
包括:模型结合、算法设计、优化设计、控制的实现、调整继承性、关联设计
(1)选择面向对象语言
(2)确定程序设计风格
(3)类的实现
(4)应用系统的实现
设计模式是一套被反复使用的、多数人知晓的代码设计经验的总结,使用设计模式可重复使用代码、使代码更容易被他人理解
一个模式通常包括:
(1)模式名称(pattern name)
(2)问题(problem)
(3)解决方案(solution)
(4)效果(consequences)
(1)abstract factory(抽象工厂模式)
(2)adapter(适配器模式)
(3)bridge(桥梁模式)
(4)builder(建造模式)
(5)chain of responsibility(责任链模式)
(6)command(命令模式)
(7)composite(合成模式)
(8)decorator(装饰模式)
(9)facade(外观模式)
(10)factory method(工厂方法模式)
(11)flyweight(享元模式)
(12)interpreter(解释器模式)
(13)iterator(迭代模式)
(14)mediator(调停者模式)
(15)memento(备忘录模式)
(16)observer(观察者模式)
(17)prototype(原型模式)
(18)proxy(代理模式)
(19)singleton(单件模式)
(20)state(状态模式)
(21)strategy(策略模式)
(22)template method(模板方法模式)
(23)visitor(访问者模式)
(1)为复杂子系统提供接口时
(2)客户程序与抽象类的实现部分存在很大依赖性时
(3)当需要构造层次结构的子系统时
(1)动态透明的方式为单个对象添加职责
(2)处理可撤销的职责
(3)不能采用生成子类方法进行扩充
(1)当类只能有一个实例时
(2)客户无需修改代码即可使用一个扩展的实例时
(1)一次性实现算法的不变部分
(2)各个子类的公共行为被提取到一个父类中避免代码重复时
(3)控制子类扩展时
流程图是流经一个系统的信息流、观点流或部件流的图形代表,它由一些图框和流程线完成,其中图形框表示各种类型的操作图框中的文字和符号表示操作的内容,流程线表示操作的次序。
绘制流程图的习惯做法是
(1)用椭圆表示“开始”与“结束”
(2)用矩形表示行动方案以及普通工作环节
(3)用菱形表示问题判断或条件判定(审核/审批/评审)
(4)用箭头表示工作流方向
(5)用平行四边形表示输入/输出
盒图(N-S图)也是一种新的流程图,它把整个程序放在一个大框内
几种基本的结构如下:
(1)顺序结构N-S图
(2)选择结构N-S图
(3)循环结构N-S图
·当型循环
·直到型循环
盒图(N-S图)的顺序结构图如下所示:
它是由二维树形结构的图表示程序的控制流,这种图转换代码比较容易。
PAD图的优点:
(1)使用优化控制结构的PAD图符号设计的程序必然是结构化程序
(2)结构十分清晰
(3)表现程序逻辑易读、易懂、易记
(4)很容易将PAD图转化为高级语言源程序
(5)即可以表示程序逻辑,又可以描述数据结构
(6)支持自顶向下的逐步求精方法
PAD图面向高级程序设计语言,为FORTRAN、COBOL、PASCAL等常用高级设计语言提供了一套完整的图形符号。
耦合是指程序结构中各个模块之间的相互关联的度量,它取决于各个模块之间接口的复杂程度、调用模块的方式、以及哪些信息通过接口
一般模块之间可能的连接方式有7种,耦合性由高到低分别如下:
(1)内容耦合:一个模块直接修改或操作另一个模块的数据
(2)公共耦合:两个以上的模块共同引用一个全局数据项
(3)外部耦合:一组模块都访问同一全局简单变量
(4)控制耦合:一个模块在界面上传递一个信号控制另一个模块
(5)标记耦合:模块间通过参数传递复杂的内部数据结构
(6)数据耦合:模块间通过参数传递基本类型的数据
(7)非直接耦合:模块间没有消息的传递
内聚是一个模块内部各个成分之间相关联程度的度量,标志一个模块内各个单元彼此结合的紧密程度
内聚有7中类型,他们的内聚度由弱到强的排列如下:
(1)偶然内聚:一个模块的各成分之间毫无关系
(2)逻辑内聚:一个模块把多种相关功能组合在一起
(3)时间内聚:一个模块完成的功能必须在同一时间内执行
(4)过程内聚:一个模块内部处理成分是相关的
(5)通信内聚:一个模块所有成分都操作一个数据集或生成一个数据集
(6)顺序内聚:一个模块各个成分和同一个功能紧密相关
(7)功能内聚:一个模块所有成分对于完成单一功能都是必须的
数据流程图的基本成分包括:系统的外部实体、处理过程(加工)、数据存储、系统中数据流这4个组成部分:
(1)外部实体S
外部实体指系统以外与系统有联系的人或事物,用正方形框表示
(2)处理过程(加工)P
处理指处理数据的逻辑,即数据变换。用带圆角的长方形表示
(3)数据存储F
数据存储表示数据的存储处,用右边开口的长方形表示
(4)数据流D
数据流指处理功能的输入或输出,用来表示中间数据流值,用水平或垂直箭头表示
数据流程图的特征如下:
(1)抽象性
(2)概括性
(1)视图
视图是用户看到并与之交互的界面
(2)模型
模型表示企业数据和业务规划
(3)控制器
控制器接受用户的输入并调用模型和视图完成用户的需求
模型-视图-控制器MVC优点如下
(1)低耦合
(2)高重用性和可适用性
(3)较低的生命周期成本
(4)快速部署
(5)可维护性
(6)有利于软件工程化管理
软件质量是“软件与明确地和隐含地定义的需求相一致的程度”,即软件符合明确叙述的功能和性能的需求、文档中明确描述的开发标准、以及所有专业开发软件都应该具有的隐含特征的程度
(1)软件需求是度量软件质量的基础,与需求不一一致就是质量不高
(2)指定的标准定义了一组指导软件开发的准则,如果没有这些准则,几乎可以肯定软件质量不会很高
(3)通常有一组没有显示描述的隐含需求(如期望软件是容易维护的)。如果软件满足明确描述的需求,但是不满足隐含需求,那么软件质量仍然是值得怀疑的
质量因素划分为以下3组:
(1)产品运行:正确性、健壮性、效率、完整性、可用性、风险
(2)产品修改:可理解性、可维修性、灵活性、可测试性
(3)产品转移:可移植性、可再用性、互运行性
(1)功能性
软件实现的功能,即满足用户要求的程度
包括:适合性、准确性、互操作性、保密安全性、功能依从性等子特性
(2)可靠性
软件产品最重要的质量特性,反应软件在稳定状态下维持正常工作的能力
包括:成熟性、容错性、易恢复性、可靠性依从性等子特性
(3)易用性
反应软件与用户的友善性,即用户使用软件的方便程度
包括:易理解性、易操作性、易学性、吸引性、易用性依从性等子特性
(4)效率
在规定条件下,软件实现某种功能耗费物理资源的有效程度
包括:时间特性、资源利用性、效率依从性等子特性
(5)可维护性
软件在环境改变或发生错误时修改的难易程度
包括:易分析性、易改变性、稳定性、易测试性、可维护性依从性等子特性
(6)可移植性
软件能够方便的移植到不同运行环境的程度
包括:适应性、易安装型、共存性、易替换性、可移植性依从性等子特性
软件质量保证(SQA)是建立一套有计划系统性的方法,用于管理层保证拟定出的标准、步骤、实践、方法能够正确的被所有项目所采用
软件质量保证(SQA)目的是使软件过程对于管理人员来说是可见的,它通过软件产品和活动进行评审和审计来验证软件合乎标准
软件质量保证(SQA)的基本目标如下:
(1)软件质量保证工作按计划进行
(2)客观地检验软件项目产品和工作是否遵循恰当的标准、步骤、和需求
(3)将软件质量保证工作及结果通知给相关组别和个人
(4)帮助高级管理层了解在项目内部不能解决的问题
软件质量保证可以保证软件和开发过程符合相应的标准个规程,但是不能保证不存在软件缺陷。
能力成熟度模型(CMM)是对软件组织在定义、实施、度量、控制和改善其软件过程的实施中各个发展阶段的描述,其核心是把软件开发视为一个过程。
CMM已经成为软件行业最权威的评估认证体系,包括5个级别,18个关键过程域,52个目标和300多个关键实践。
表7-2 CMM级别及关键过程域
等级 |
要点 |
关键过程域(KPA) |
优化级 |
持续过程改进 |
缺陷预防(defect prevention) 技术变更管理(technology change management) 过程变更管理(process change management) |
已管理级 |
量化管理 |
定量管理过程(quantitative process management) 软件质量管理(software quality management) |
已定义级 |
过程标准化 |
组织过程焦点(organization process focus) 组织过程定义(organization process definition) 培训大纲(training program) 集成软件管理(integrated software management) 软件产品工程(software product engineering) 组间协调(intergroup coordination) 同行评审(peer review) |
可重复级 |
基本项目管理 |
需求管理(requirement management) 软件项目计划(software project planning) 软件项目跟踪和监控(software project tracking oversight) 软件子合同管理(software subcontract management) 软件质量保证(software quality assurance) 软件配置管理(software configuration management) |
初始级 |
|
|
(1)初始级(initial)
处于这个最低级的组织,基本上没有健全的软件工程管理制度,每件事情都以特殊的方法来做。
(2)可重复级(repeatable)
有基本的软件项目管理行为、设计和管理技术基于相似产品中的经验,故称为“可重复”
(3)已定义级(defined)
已经为软件生产过程编制了完整的文档,软件过程的管理和技术方面都明确做了定义
(4)已管理级(managed)
为每个项目设定质量和生产目标,这两个量将不断的被测量,当偏离目标太远时立刻采取行动去修正。
(5)优化级(optimizing)
目标是连续的改进软件过程,这样的组织使用统计质量和过程控制技术作为指导
UML定义包括UML语义和UML表示法
标准建模语言UML的重要内容可以由如下5类图来定义:
(1)用例图
从用户的角度描述系统功能,并指出各功能的操作者
(2)静态图
包括类图、对象图、包图
(3)行为图
包括状态图、活动图
(4)交互图
包括顺序图、协作图
(5)实现图
包括构件图、部署图
类之间的关系有如下几种:
(1)泛化关系:特殊类可以继承一般类的通用属性和方法,具有“特殊/一般”的特质
(2)关联关系
(3)聚合关系:它继承了关联关系的特质,具有“整体-部分”的特质
(4)组合关系
全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(七)软件工程知识
标签:proxy 间接 重构 识别 lsp sof 计算机技术 运行环境 算法
原文地址:http://www.cnblogs.com/linyuchen2008/p/6109028.html