课程简介
“软件工程”课程是软件工程专业的核心课程,是用工程化方法指导软件开发、维护与管理的一门综合性课程,内容涉及软件分析、设计、实现、维护及项目管理相关的理论、技术、方法和CASE工具。
考试大纲
⚫重点掌握软件工程的基本概念和基本原理;
⚫结合当前我国软件企业对软件开发的需求,掌握并能运用软件工程的基本原理和实用的软件开发技术和基本的管理技术;
⚫了解软件工程学科的知识结构。
⚫(一) 软件工程概念与软件工程的基本要素
⚫(二) 软件过程
⚫(三) 软件需求与软件需求规约
⚫(四) 系统规约及软件设计
⚫(五) 软件测试
⚫(六) 软件工程管理
⚫(七) 软件质量、质量特征以及软件质量保证
⚫(八) 计算机辅助软件工程CASE 工具与环境
软件工程概念与软件工程的基本要素
1.1 软件与软件危机
软件的概念
【软件】:程序、数据及开发、使用和维护程序所需要的所有文档。
其中
程序:计算事务的处理对象和处理规则的描述,为指令的集合;
数据:程序加工、处理的对象。
文档:有关计算机程序功能、设计、编制、使用的文字或图形资料。
特点:软件是一个逻辑产品
软件的分类
❖ 软件功能划分:系统软件;支撑软件;应用软件
❖ 软件工作方式划分:实时处理;分时处理;交互式;批处理
❖ 软件规模划分:微型;小型;中型;大型……
❖ 软件服务对象范围划分:定制软件;通用软件
❖ 软件失效影响划分:关键软件;非关键软件
❖ 收费模式分:商业软件;共享软件(有限使用);免费软件
❖ 源代码是否公开:闭源软件(源代码不公开);开源软件(源代码公开);自由软件(开源、自由使用)
软件危机
1968年,北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题 ,正式提出并使用了“软件工程”的概念,标志软件工程正式诞生。
【软件危机】:
在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含两方面的问题:
如何开发软件,以满足不断增长,日趋复杂的需求。
如何维护数量不断膨胀的软件产品
1.2 软件工程
软件工程定义
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的技术方法结合起来,来指导软件的开发与维护。
软件工程技术的两个明显特点:
强调规范化
强调文档化
软件工程维度
软件工程的框架是由
软件工程目标、
软件工程活动
软件工程原则
三个方面的内容构成的。
软件工程目标维度
目标:生产具有正确性、可用性以及开销适宜的软件产品。
正确性:软件产品达到预期功能的程度。
可用性:软件基本结构、实现及文档为用户可用的程度。
合算性:软件开发、运行的整个开销满足用户要求的程度。
决定了:软件过程、过程模型和工程方法的选择。
软件工程活动维度
活动:生产一个最终满足需求且达到工程目 标的软件产品所需要的步骤。
1、需求:问题分析:需求获取和定义,又称软件需求规约。需求分析:生成软件功能规约。
2、设计:概要设计:建立整个软件的体系结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义等。详细设计:产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。
3、实现:把设计结果转换为可执行的程序代码。
4、确认:贯穿整个开发过程,对完成的结果进行确认,保证产品满足用户的要求。
5、支持: 修改和完善活动。
软件工程的四条基本原则:
采取适宜的开发模型:控制易变的需求;
采用合适的设计方法:需要软件模块化、抽象与信息隐藏、局部化、一致性以及适应性等,需要合适的设计方法的支持。
提供高质量的工程支持:软件工具和环境对软件过程的支持。
重视开发过程的管理:有效利用可用的资源、生产满足目标的软件产品、提高软件组织的生产能力等。
软件工程的基本特征:
1、关注于大型的程序构造
2、中心课题是控制复杂性
3、控制需求经常变化
4、提高开发软件的效率
5、支持协作开发
6、获取有效的客户支持
软件工程的基本原理:
1 用分阶段(生命周期)计划管理
2 进行阶段评审
3 实行严格的产品控制
4 采用现代程序设计技术
5 清楚地审查结果
6 承认不断改进软件工程实践的必要性
软件工程方法学
在软件生命周期全过程中使用的一整套技术、方法和工具的集合称为方法学。
软件工程方法学:包括技术和管理两个方面,紧密结合所形成的工程学科。
通常把软件生命周期全过程中使用的一整套技术方法的集合称为方法学(也称为范型 paradigm)
方法 : 完成软件开发的各项任务(分析、设计等)的技术方法,回答“怎样做”的问题。
过程 :为了获得高质量的软件所需要完成的一系列任务的框架,规定了完成各项任务的工作步骤。
工具 : 为过程、方法提供的自动的或半自动的软件工程支撑环境。
1.3 软件生存周期过程
基本过程
生产直接相关活动活动
1.获取过程:为需方而定义的活动,启动,招标,合同,对供方监督,验收等 ;
2.供应过程:为供方而定义的活动,启动,准备投标,签订合同,编制计划,执行,交付和完成;
3.开发过程:为开发方而定义的活动:需求、设计、编码、测试、安装、验收;
4.运作过程:为操作方而定义的活动:运行测试,系统运行,用户支持 ;
5.维护过程:为维护方而定义的活动:问题和修改分析,修改实现,维护评审/验收,迁移,软件退役
支持过程
组织过程
1.4 软件生存周期模型
软件生存周期模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。亦称为:软件开发模型,软件开发过程模型。
软件过程是工作产品构建时所执行的一系列活动、动作和任务的集合。
活动( activity)主要实现宽泛的目标(如与利益相关者进行沟通),与应用领域、项目大小、结果复杂性或者实施软件工程的重要程度没有直接关系。
动作( action,如体系结构设计)包含了主要工作产品(如体系结构设计模型)生产过程中的一系列任务。
任务( task)关注小而明确的目标,能够产生实际产品(如构建一个单元测试)。
什么是过程框架?
过程框架( process framework)定义了若干个框架活动(frameworkactivity),为实现完整的软件工程过程建立了基础。这些活动可广泛应用于所有软件开发项目,无论项目的规模和复杂性如何。
此外,过程框架还包含一些适用于整个软件过程的普适性活动(umbrella activity)。
一个通用的软件工程过程框架通常包含沟通、策划、建模、构建、部署5个活动。对许多软件项目来说,随着项目的开展,框架活动可以迭代应用。也就是说,在项目的多次迭代过程中,沟通、策划、建模、构建、部署等活动不断重复。每次项目迭代都会产生一个软件增量(software increment),每个软件增量实现了部分的软件特性和功能。随着每一次增量的产生,软件将逐渐完善。
什么是软件过程的普适性活动?
软件工程过程框架活动由很多普适性活动来补充实现。通常,这些普适性活动贯穿软件项目始终,以帮助软件团队管理和控制项目进度、质量、变更和风险。典型的普适性活动包括软件项目控制和跟踪、风险管理、软件质量保证、技术评审、测量、软件配置和管理、可复用管理、工作产品的准备和生产。
过程适应性调整:
软件工程过程并不是教条的法则,也不要求软件团队机械地执行;而应该是灵活可适应的(根据软件所需解决的问题、项目特点开发团队和组织文化等进行适应性调整)。因此,不同项目所采用的项目过程可能有很大不同。这些不同主要体现在以下几个方面:
●活动、动作和任务的总体流程以及相互依赖关系。
●在每一个框架活动中,动作和任务细化的程度。
●工作产品的定义和要求的程度。
●质量保证活动应用的方式。
●项目跟踪和控制活动应用的方式。
●过程描述的详细程度和严谨程度。
●客户和利益相关者对项目的参与程度。
●软件团队所赋予的自主权。
●队伍组织和角色的明确程度。
软件工程实践的框架。通用的框架活动——沟通、策划、建模、构建和部署和普适性活动构成了软件工程工作的体系结构的轮廓。
软件工程整体实践的7个原则:
存在价值、保持简介、保持愿景、关注使用者、面向未来、提前计划复用、认真思考。
1.4.1瀑布模型
阶段划分与基本任务
1.问题定义:通过对系统实际用户和使用部门负责人的访问调查,明确要解决问题性质、工程目标和规模。
2.可行性研究:导出系统的高层逻辑模型(数据流图),并在此基础上更准确、更具体的确定工程的规模和目标;更准确的估计系统的成本和效益。
3.需求分析:和用户密切配合,充分交流信息,以得到用户确认的系统逻辑模型(数据流图、数据字典及简要的算法表示的系统逻辑模型)
4.总体设计:
1)提出几种可能的解决方案,权衡各种方案的利弊,并推荐出最佳方案;
2)设计软件的结构,确定软件的模块构成及模块之间的关系。
5.详细设计:把解决问题的方案具体化,设计出程序的详细规格说明,并包含必要的细节信息。
6.编码和单元测试:将详细设计的结果翻译成高级程序设计语言的源程序,并仔细测试编写的每一个模块。
7.综合测试:通过各类型的严格测试与调试,使软件达到预定的要求。
1)集成测试:各模块装配后测试;
2)验收测试:按规格说明书。
8.软件维护:通过必要的维护工作使得系统持久的满足用户的需要:
1)改正性维护;2)适应性维护;
3)完善性维护;4)预防性维护
1.4.2 增量模型(递增模型、增殖模型)
开发策略:
分子系统(组件)逐次开发,直到完成整个系统。
开发过程:
定义总体需求
确定开发增量
设计系统体系架构
开发系统增量
最终系统
主要优点:
核心功能率先开发,降低项目失败风险;
软件可以逐次交付,用户早日使用并获得收益;
早期增量可作为原型,有助于获取后续增量的需求。
主要缺点:
系统体系架构必须最先确定且保持稳定
瀑布模型或快速原型模型目标是一次就把一个满足所有需求的产品提交给用户。
增量模型把整个软件产品分解成许多个增量构件,分批地逐步向用户提交产品。
1.4.3 演化模型
开发策略:
多次迭代,由粗到细、逐步求精。
主要优点:
核心功能率先开发;
软件逐次交付,用户早日使用并获得收益;
用户反馈导向下次迭代方向。
主要缺点:
设计缺乏整体性,复用上次
迭代开发成果需要更多代价
增量模型VS演化模型
1.4.4 原型模型(快速成型模型)
开发策略:
原型(Prototype)是软件系统的初期版本, 用于展示、验证设计方案,发现存在的问题和寻找可能的解诀方法。
主要优点:
启发和验证系统需求;
探索和验证设计方案;
抛弃 or 最终产品发布。
主要缺点:
忽略健壮性、可靠性、性能等非功能需求;
缺乏必要文档,不利维护。
适用领域:
需求不确定领域
1.4.5 螺旋模型
开发策略:
螺旋模型= 瀑布模型+ 原型模型+ 风险分析
主要优点:
分阶段构造;
风险驱动;
客户全程参与。
主要缺点:
开发周期长。
应用领域:
大型高风险软件。
1.4.6 喷泉模型
主要特点:
主要用于支持面向对象开发过程,体现了软件创建所固有的迭代和无间隙的特征
喷泉模型的优点:
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
喷泉模型的缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
举例:
某企业的App开发项目采用喷泉模型进行开发,开发团队每2周进行一次迭代开发,每次迭代前会对需求进行重新评估和调整,以确保最终产品符合用户需求。
1.4.7 Rational 统一过程(RUP)
RUP核心工作流
RUP包含6个过程工作流(Process Workflow)和3个支持工作流(Supporting Workflow)。
1.商业建模(Business Modeling):对系统的商业环境和范围进行建模,确保所有参与人员对开发系统有共同的认识。
2.需求分析(Requirements):定义系统功能及其他非功能需求,成果是软件需求说明书(SRS)。
3.分析与设计(Analysis and Design):根据系统需求给出实现方案,成果为软件设计说明书(SDS)。
4.实施(Implementation):定义代码的组织结构、实现代码、单元测试、系统集成
5. 测试(Test) :验证各子系统的交互和集成。测试分别从可靠性、功能性和系统性能来进行。
6. 部署(Deployment):成功的生成版本并将软件分发给最终用户
7. 配置和变更管理(Configuration and Change Management):管理并行开发、分布式开发;自动化创建工程;记录产品修改原因、时间、人员、审计记录 。
8. 项目管理(Project Management):为计划、执行和监控软件开发项目提供有效支持
9. 环境(Environment):为组织提供过程管理和工具的支持。
RUP的四个阶段
RUP将软件的生命周期分成多个单独的开发周期,
并划归为初始、细化、构造和交付四个阶段。 。
1.初始阶段(Inception)
主要任务是构思未来系统的概貌、确定项目的必要性和可行性。
需要建立商业用例(Business Case),建立基本的用例模型、项目计划、初始风险评估和项目描述。
该阶段的焦点是业务建模和需求
2.细化阶段(Elaboration)
主要任务是进一步分析问题领域,捕获系统大部分的功能需求,建立系统的基本框架,找出项目实施会遭遇的风险和应对措施,确定开发的技术措施,确定资金和资源的配置,制定项目的开发计划。
细化阶段约占整个项目开发过程1/5时间。当开发人员能够精确估计对每一个用例需要投入的人力,重要的风险已经被确认,并有应对方法时,细化阶段就可以结束了。
该阶段的焦点是需求、分析和设计工作流
3.构造阶段(Construction)
主要任务是完成所有的需求、分析和设计。所有剩余的构件和应用程序功能被并发并集成为产品,所有的功能被详细测试。
4.交付阶段(Transition)
主要任务是将开发的软件发布给用户,在用户的实际生产环境安装部署开发好的软件,进行用户培训,获取用户的反馈意见,并对软件做必要的调整和优化
1.5 过程规划与监控
过程建立:成果《项目过程计划》
1、选择软件生存周期模型
2、细化所选择的生存周期模型
3、为每一个活动或任务标识合适的实例数目
4、确定活动的时序关系,并检查信息流
5、建立过程计划的文档
过程监控:
1.软件生存周期过程的监控
2.软件生存周期过程改变所产生的影响评估
3.改变的实施
4.实现改变
1.6能力成熟度模型CMM
1.6.1 CMM 五个级别的定义
1)初始级(Initial):软件开发过程中偶尔会出现混乱的现象,只有很少的工作过程是经过严格定义的,开发成功往往依靠的是某个人的智慧和努力。
2)可重复级(Repeatable):建立了基本的项目管理过程。按部就班地设计功能、跟踪费用,根据项目进度表进行开发。对于相似的项目,可以重用以前已经开发成功的部分。
3)已定义级(Defined):软件开发的工程活动和管理活动都是文档化、标准化的,它被集成为一个组织的标准的开发过程。所有项目的开发和维护都在这个标准基础上进行定制。
4)已管理级(Managed):对于软件开发过程和产品质量的测试细节都有很好的归纳, 产品和开发过程都可以定量地分解和控制。
5)优化级(Optimizing):通过建立开发过程的定量反馈机制,不断产生新的思想,采用 新的技术来优化开发过程。
1.6.2 CMM 等级的内部结构
总结
本系列博客是软件工程的相关博客,本文是第一部分软件工程概述及软件过程。