软件危机:在计算机软件开发和维护过程中所遇到的一系列严重问题
软件危机主要表现:对软件开发成本和进度估计不准确,软件质量靠不住,软件不可维护及没有适当的文档资料,用户对已完成的软件系统不满意
软件危机爆发的主要原因:
软件,作为逻辑部件,很难检验开发的正确性且开发的质量
软件开发的过程是多人分工,分阶段完成的。人员之间的沟通和配合十分重要
开发人员只重视开发而轻视问题的定义
缺乏完整的一致的文档资料
在软件的开发和维护关系问题上存在错误的观念,认为软件维护工作通常在软件完成之后进行
软件工程的基本原理
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚的审查
开发小组人员应该少而精
承认不断改进软件工程实践的必要性
软件生命周期
软件定义:确定软件开发必须完成的总目标和可行性,导出实现工程目标应该采用的策略及系统必须完成的功能,估计完成该项工程需要的资源和成本
软件定义分三个阶段:问题定义,可行性研究,需求分析
软件开发:具体设计和实现在前一个时期定义的软件,分为四个阶段:总体设计,详细设计,编码,测试
软件维护:使软件持久的满足用户的需要,主要包括改正错误,改进软件适应新的环境和满足用户的新需要
问题定义:要解决的问题是什么
可行性研究:对于上一个阶段所确定的问题有行得通得解决办法吗?
需求分析:确定目标系统所具备得哪些功能
总体设计:概括地说明,应该如何解决这个问题
详细设计:应该怎么样具体实现这个系统
编码和单元测试:关键任务是写出正确得容易理解,容易维护的程序模块
综合测试:关键任务是通过各种类型的测试使软件达到预定的要求(集成测试和验收测试)
软件维护:关键任务是通过各种必要的维护活动使得持久的满足用户的需求
四类维护活动:改正性维护,适应性维护,完善性维护,预防性维护
软件工程方法:结构化方法,面向对象方法
软件工程方法包括三要素:方法,工具,过程
结构化方法
按照用户至上的原则,结构化,模块化,自顶向下地对系统进行分析与设计
结构化方法主要特点:
自顶向下整体的分析与设计和自底向上逐步实施的系统开发过程
用户至上
深入调查研究
严格区分工作阶段
充分预计可能发生的变化
开发过程工程化
面向对象方法
一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法
面向对象方法的优点
与人类习惯思维方法一致,使用者和维护人员都容易理解
稳定性好,对软件的局部进行修改时,不会引起整体的变化
面向对象方法的可重用好,把大问题分解成小问题
软件生存期模型:软件开发和演绎中各阶段的次序限制以及各阶段的准则
瀑布模型:按工序将问题化简,采用结构化的分析与设计方法将功能设计与实现分开,是一种线性顺序模型
阶段具有顺序性和依赖性
推迟实现:在编码之前设置了系统分析和系统设计的各个阶段,各个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现
质量保证:每个阶段必须完成规定的文档
实际的瀑布模型是可以进行反馈的,但仅限于相邻阶段的反馈
增量模型:系统的开发是建立一系列的版本(增量),每个版本添加部分功能到先前的版本,第一个增量往往是核心的产品
优点:
能在较短时间内向用户提交可以完成一些有用的工作的产品
逐步增加产品的功能可以使用户有较充裕的时间学习和适应新产品
项目失败的风险较低
优先级最高的服务首先交付
快速原型模型:在开发真实系统之前,快速构造一个原型,通过逐步调整原型使其满足用户的要求,开发人员可以确定用户的真正需求是什么
喷泉模型:以用户需求为动力,以对象为驱动的模型
优点:各个阶段没有明显的界限,开发人员可以同步进行开发
缺点:各个开发阶段是重叠的,开发过程中需要大量的开发人员,不利于项目的管理,这种模型要求严格管理文档
螺旋模型:引入风险分析
缺点:只适用于大规模软件项目
统一过程:以用例驱动,以体系结构为核心,迭代及增量的软件开发过程
初始阶段 细化阶段 构建阶段 转换阶段
敏捷开发原则:
快速迭代
让测试人员与开发者参与需求讨论
编写可测试的需求文档
多沟通,尽量减少文档
做好产品原型
尽早考虑测试
敏捷开发对团队要求:自主管理,自我组织,多功能型
可行性研究三个方面
技术可行性
采集影响系统性能,可靠性,可维护性方面的信息
论证实现系统功能和性能需要的各种设备,技术,方法和过程
分析项目开发在技术上担负的风险,以及开发成本的影响
经济可行性
项目开发成本受到项目的特性,规模等因素制约,估算成本和利润
法律可行性
需求分析
获取需求,分析需求,定义需求,验证需求
需求获取涉及到客户,用户和开发方,客户为软件投资方,用户为软件使用者
需求获取的任务:沟通,数据,过程,接口,文档化
需求获取的原则:深入浅出,以流程为主线
需求获取的过程
结构化分析方法:是面向数据流进行需求分析的方法。
结构化分析的框架主要包括功能建模(数据流图),数据建模(实体-关系模型),行为建模(状态转换图)以及框架核心(数据字典)
数据流图的基本符号
椭圆形或圆角矩形表示数据加工,其中要注明加工的名字,需要使用动词性短语
长方形或长方体表示外部实体,其中要注明数据源或数据汇点的名字
双横线或右开口长方形表示数据存储,要用名词或用名词性短语为其命名
箭头表示数据流,即被加工数据和传递方向,要用名词或名词性短语为其命名