目录
第1章_软件工程概述
第2章_软件开发过程和活动
第3章_软件过程模型
软件工程是一门工程学。
软件开发过程中存在周期长、成本高、质量低等问题。
软件危机是软件工程产生的背景。
1.1_软件危机
政府、教育、金融、制造业、媒体、航空航天、生命科学等处处有软件系统。
软件系统越来越复杂,软件的高性能计算和事务处理能力倍受依赖。
软件开发的特性与软件危机
难以描述性:软件需求来源广泛,不完整,存在二义性。没有统一的描述规范。
缺乏可见性:难以衡量软件开发的质量和进度。
具有复杂性:软件规模增加,程序的复杂性呈指数上升。
具有变化性:业务规则变化,软件环境变化。
具有风险性:风险源自用户,项目,技术和商业风险。软件重开发代价巨大。
具有强合作性:规模大,复杂度高,需要更多人分工协作,短时间开发出高质量产品。软件危机
缺乏计划性:进度安排与成本估计不准确。易造成项目超时、成本超支。
软件需求获取不充分、不准确:不恰当的需求采集和分析方法。软件产品不能满足用户实际需求。
缺乏团队开发的合作、协调能力:大、中型软件需要按照一定标准进行团队分工协作。
缺乏良好的软件质量评测手段:软件错误发现不及时,软件质量得不到保证。
软件的可维护性差:缺乏统一的开发规范,缺乏完整的、规范的软件文档。
软件的可复用性差:存在大量重复性劳动,软件开发效率低。
软件开发过程不规范:项目大幅度返工,边建边改。
缺乏自动化的工具来协助开发:手工方式进行建模与测试开发效率低。
缺乏变更管理措施:需求、设计方案与代码经常变更。无序的变更导致项目混乱。
缺乏风险管理手段:大规模复杂软件需要有效的识别、评估、应对和监控源自项目、技术和商业的风险。
1.2_软件工程概念
软件工程的定义:软件工程是以质量为核心,为了经济地开发满足客户需求的软件而研究、建立和应用的系统化的、有规则的、可度量的和可控制的工程原则、方法,涉及软件过程、项目管理、开发方法、开发工具,甚至企业文化等各方面。
以质量为中心:软件工程的核心目标是保证和提高软件质量。
经济性:指在软件开发中生产出满足预算、按期交付的软件。
满足客户需求:软件产品必须提供用户所需的功能。
研究、建立和应用:软件工程的方法理论、模式、框架等并列为标准并应用到实践当中。
系统化:将软件过程、项目管理、开发方法、软件度量、开发工具等相关知识有机地组织在一起。
有规则:软件工程具有一定的标准和规范。
可度量:软件规模、复杂性、可使用性、可靠性、生产率、成本是被度量的因素。
可控制:需求获取、系统分析、系统设计、系统实现、系统测试和部署等活动应处于受控状态。
软件过程:将用户需求转化为软件系统所进行的一系列活动的集合。
项目管理:涉及人力资源管理、项目计划、风险管理、项目跟踪、质量保证、配置管理等。
开发方法:结构化传统软件工程方法、面向对象的软件工程方法。
开发工具:自动化工具辅助需求分析、优化软件设计、加快代码实现速度、提高软件测试水平。
企业文化:企业文化会逐步潜移默化地融入项目团队,影响软件开发效率和质量。
1.3_项目案例
网上商城系统www.dcse.neu.edu.cn功能、性能、代码数量、复杂度。
系统主要功能:商品销售
列举商品类别、提供搜索功能。显示商品列表、商品具体信息。实现用户登录验证、注册新用户、维护用户信息等功能。
管理购物车。实现结账处理。查询订货情况。统计销售记录。系统需要解决的问题:相关非技术问题
项目开发的起点。技术的选择及其优缺点(最先进技术、团队最熟悉的技术、用户最期待的技术)。系统开发所需时间。
系统开发所需人力及其分工。项目的开发计划。是否需要需求分析。
需求是否清晰完整,是否需要需求分析文档,文档编写的规范。
代码编写前的设计方案和模型,设计方案所遵循的原则。
人机交互界面的设计。实现功能的先后顺序及其优先级。系统开发的风险识别、评估、监控、应对方案。
系统的可扩展性,需求增加、技术变更。是否有可复用的构件或框架。系统设计中是否有可参考的设计模式。
系统开发过程中的编码规范。应对需求变更的最小化项目变更策略。测试工作的起点,测试方法,测试工具。
系统开发所采用的过程模型。开发过程的控制。需求分析、系统设计、编码、测试、部署。
软件质量的度量。项目延期的应对策略。总结:软件开发周期长、质量低、成本高。
软件工程以质量为核心。研究、建立、并应用系统化、有规则、可度量、可控制的工程原则和方法。
习题:
1.1_软件开发的特点。
1.2_软件危机是什么。软件危机的表现。软件危机的解决方法。
1.3_软件工程是什么。
1.4_软件的开发方法有哪些。
1.5_项目管理有哪些方面。
1.6_软件工程工具的作用。
软件开发的团队成员需按照一定的步骤,有序地,协作开发软件。
2.1_过程概念
软件开发过程的一系列活动:
基本活动:问题定义、可行性研究、需求分析、系统设计、代码编写、系统测试、软件部署、软件交付。
管理活动:风险管理、开发计划、项目跟踪、质量保证、软件配置管理。
软件过程由开发和维护软件及其相关产品的一系列活动构成,这些活动从不同方面定义了软件开发过程中的步骤、交付物、涉众及其职责等流程要素。
软件开发过程黑箱:
客户需求:启动软件开发。
开发资源:员工和工具(人力、物力)。
开发控制:预算、计划、标准控制软件开发的费用、进度、质量。
产品输出:软件程序代码、用户需求规约文档、系统设计文档、测试报告、用户说明书。
2.2_问题定义活动
软件项目的开发从问题定义开始
What确定解决的问题和系统范围。系统应用价值,所需的资源配置。
Why系统的大致范围和投资额。
When问题定义处于项目日程表最前端。
Who涉众人员包括系统分析师、出资方领导、出资方技术人员、开发方领导、项目经理和市场人员。
Where现场调用:观察用户现有系统或手工方式下的工作环境、业务流程、关键功能。
How标识用户的问题而不是解决问题。定义业务词汇表。
2.3_可行性研究活动
问题定义活动后是可行性研究活动。
概念:以相对短的时间和相对低的成本来确定给定的问题在其约束条件内是否有解、有几种解以及哪个是最佳解。
软件质量保证人员(Software Quality Assure简称SQA)
客户不一定是用户,用户是软件产品的使用者,而客户是软件开发项目的出资方。
展开这一活动的最佳场所是用户现场。
本活动的最终交付物是提交一份可行性研究报告。
典型的可行性研究活动流程:复查系统规模和目标-->研究现行系统-->导出新系统逻辑模型-->导出新系统方案-->复查。
分析现行系统:在物理模型(业务流程图、数据流程图、用例图、时序图)的基础上抽象出逻辑模型。
2.4_需求分析活动
需求分析活动是软件开发过程中的关键活动之一。
软件需求文档的分类:用户需求文档、系统需求文档、软件需求规约文档。
功能性需求与非功能性需求。
需求活动贯穿于整个软件开发过程,但大部分需求应在早期确认。
典型需求分析活动的核心流程:启动需求-->网罗需求-->定义系统-->复审-->管理系统规模。
2.5_设计活动
交付物:设计说明书。
设计部件的分类:系统、子系统、框架、构件、组件、模块、类和方法。
2.6_实施活动
实施活动分为编码、单元测试和集成三个方面。
集成方式分为递增式集成和分阶段的集成。
2.7_测试活动
测试只能证明程序有错,不能保证程序无错。
测试的6种阶段:单元测试、集成测试、系统测试、α测试、β测试、验收测试。
α测试:客户和用户在软件开发团队的管理下执行的测试。
β测试:客户和用户在工作现场进行的测试。
2.8_部署活动
三种部署模式:自定义安装、现场支持、网络部署。
将软件开发过程的组织策略抽象为模型
3.1_过程模型概念
软件生命周期三阶段:软件定义、软件开发、运行维护
3.2_线形系列模型
3.2.2_瀑布模型
增加了活动的“反馈”机制。
3.2.3_RAD模型
快速应用开发Rapid Application Development
多小组并行开发,各小组分别负责项目的一部分。
3.3_演进系列模型
3.3.1_边建边改模型
一种投机渐进的方法。
3.3.2_增量模型
一次开发一个部分,每个迭代都发布一个可操作的工作版本。
3.3.3_螺旋模型
加入了保护性活动(计划和风险分析)
3.3.4_RUP模型
迭代,增量
4大阶段:先启、精化、构建、产品化。
核心工作流:业务建模、需求、分析设计、实施、测试、部署。
体系完整、理论成熟、实践性强、可裁剪、可扩充。