一、信息系统生命周期
1.软件工程基本原理:用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制,采用现代程序设计技术、结果应能清楚的审查、开发小组的人员应少而精、承认不断改进软件工程实践的必要性
2.软件工程的基本要素:方法、工具、过程
3.软件生产周期:可行性分析与项目开发计划、需求分析、概要设计(系统解决方案,规划子系统)、详细设计(设计子系统内部具体实现),编码、测试、维护
4.信息系统生命周期
系统规划阶段:初步调查,对建设新系统的需求做出分析和预测,输出可行性研究报告、系统设计任务书
系统分析阶段:对现行系统进行详细调查,提出新系统的逻辑模型,也称为逻辑设计阶段,整个系统建设的关键阶段,也是信息系统建设与一般工程项目的重要区别所在,输出:系统说明书
系统设计阶段:要回答的问题是怎么做,具体设计实现逻辑模型的技术方案,设计新系统的物理模型,称为物理设计阶段,分为总体设计(概要设计)和详细设计,输出:系统设计说明书(概要设计、详细设计说明书)
系统实施阶段:将设计的系统付诸实施的阶段,输出:实施进展报告、系统测试分析报告
系统运行和维护阶段:记录系统运行的情况,评估系统的工作质量和经济效益
二、能力成熟度模型
1.能力成熟模型
2.呢李成熟模型集成CMMI:是若干过程模型的综合改进,支持多个工程学科和领域的,它关注组织的成熟度
3.2-5级对应的过程域
三、软件过程模型
1.瀑布模型(SDLC):可行性分析、需求分析、软件设计、编码、测试、运行维护
2.瀑布模型特点:从上一项开发活动接受该项活动的工作对象作为输入;实施该项活动应完成的工作内容;工作成果作为输出;对该项活动的实施工作成果进行评审
3.螺旋模型是一个演化软件过程模型,将原型实现的迭代特征与线性顺序模型中控制的和系统化的方面结合,软件开发是一系列的增量发布
开发过程具有周期性重复的螺旋线状,每个周期分四阶段:制定计划、风险分析、实施工程和客户评估,强调了风险分析,特别适用于庞大而复杂得、高风险的系统
4.V模型:
单元测试:针对编码过程中可能村咋的各种错误
集成测试:针对详细设计中可能存在的问题
系统测试:主要针对概要设计,检查系统作为一个整体是否有效的运行
验收测试:由业务专家或用户进行,确认产品能真正符合用户业务的需求
v模型用于需求明确和需求变更不频繁的情形
5.原型化模型:第一步就是创建一个快速原型,能满足项目干系与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求
特点:
实际可行
具有最终系统的基本特征
构造方便、快速、造价低,对用户的需求是动态响应,逐步纳入
6.增量模型:首先开发核心模块功能,与用户确认后,再次开发次核心模块功能,每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付
缺点:不利于模块划分,如何将客户需求划分为多个增量
优点:增量模型的每一次增量版本都可以作为独立可操作的作品,原型的构造一般是为了演示
7.喷泉模型:以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法,使开发具有迭代性和无间隙性
基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统,增强了复用性
8.形式化方法模型,建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机软件形式化的数学规格说明
四、信息系统开发方法
1.结构化方法(生命周期法):一种传统的信息开发方法,由结构分析、结构化设计、结构化程序设计三部分组成
特点:
开发目标清晰化,用户第一原则
开发工作阶段化:根据阶段工作目标和要求进行审查
开发文档规范化:按照要求完成相应的文档
设计方法结构化:系统分析与设计,自顶向下地分解;系统实现时,自底向上逐步实现整个系统
缺点:
开发周期长:按顺序经历各个阶段,直至实施阶段结束后,用户才能使用系统
难以适应需求变化:不适用月需求不明确或经常变更的项目
很少考虑数据结构化:结构化方法是一种面向过程,面向数据流开发方法
使用工具:数据流图、数据字典、结构化语言、判断表以及判定树
2.面向对象:任何事物都是对象,每一个对象都有自己的运动规律和内部状态,属于某个对象类
特点:使用00方法构造的系统具有更好的复用性,用例模型和分析模型
优点:普遍适用于各类信息系统的开发
缺点:必须依靠一定的面向对象技术支持,在大型项目的开发上具有一定的局限性,不能涉足系统分析以前的开发环节
3.原型化方法:快速建立一个系统模型展示给用户
按是否实现功能分类:分为水平原型、垂直原型
按最终结果分类:抛弃式原型、演化式原型
特点:使系统开发的周期缩短,成本和风险降低,速度加快,获得较高的综合开发效益
不足:开发环境要求高,管理水平要求高
优点:能更有效地确认客户需求,使用需求不明确的系统开发,分析层面难度大、技术层面难度不大的系统
4.敏捷开发:以人为核心、迭代、循序渐进的开发方法,强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档有效)、频繁交付新的软件版本,能很好的适应需求变化的代码编写额团队组织方法,更注重软件开发中人的作用
结对编程:一个程序员开发、另一个程序员在一旁观察审查代码
自适应开发:侧重为软件的重要性提供最根本的基础
水晶方法:每一个不同的项目需要一套不同的策略、约定和方法论
特性驱动开发:针对中小型软件开发项目的开发模式,是一个模型驱动的快速迭代开发过程,他强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目
极限编程XP:核心是沟通、简明、反馈和勇气,XP无需开发人员在软件开始初期做出很多文档,提倡测试先行
并列争球法SCRUM:是一种迭代的增量化过程,把每段时间一次的迭代称为一个冲刺
统一过程:
分派任务和责任的纪律化方法,在可预见的日程和预算前提下,确保满足最终用户需求的高质量产品
3个显著特点:用例驱动、以架构为中心、迭代和增量
4个流程:初始阶段、细化阶段、构建阶段和交付阶段
适用:一个通用过程框架
五、系统分析设计概述
1.软件需求:用户对系统在功能、行为、性能、设计约束等方面的期望,是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件需要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明
2.需求开发和需求管理
3.系统设计主要目的:为系统制定蓝图,在各种技术和实施方法汇总权衡利弊,合理使用各种资源,最终勾画出新系统的详细设计方法
设计方法:结构化设计方法、面向对象设计方法
设计主要内容:概要设计、详细设计
概要设计基本任务:系统总体结构设计,形成软件的模块结构图,即系统结构图
详细设计基本任务:模块内详细算法设计,模块内数据结构设计、数据库的物理设计、其他设计(代码、输入\输出格式、用户界面)
4.系统设计基本原理
抽象化
自顶而下,逐步求精
信息隐蔽
模块独立(高内聚,低耦合)
5.系统设计原则
保持模块的大小适中
尽可能减少调用的深度
多扇入、少扇出
单入口,单出口
模块的作用域应该在模块之内
功能应该是可预测的
6.耦合性与内聚性
7.耦合程度高低
六、结构化开发方法
1.结构化方法的分析结果:一套分层的数据流图、一本数据词典、一组小说明、补充材料
2.数据流图DFD
基本图形元素:
1)数据流:数据流的流向必须经过加工
2)加工:描述了输入数据流到输出数据流之间的变换,常见错误三种
黑洞:有输入没有输出
奇迹:有输出但没有输入
灰洞:输入不足以产生输出
3)数据存储:用来存储数据
4)外部实体:存在于软件系统之外的人员或组织,它指系统所需数据的发源地和系统所产生的数据归宿地
3.数据字典DD:数据字典就是为了数据流图中的每个数据流、文件、加工、以及组成数据流或文件的数据项做出说明
有一下4类条目:数据流、数据项、数据存储和基本加工
常用的加工逻辑方法:结构化语言、判定表和判定树
七、系统运行与维护
1.遗留系统:基本上不能进行修改和演化以满足新的变化了的业务需求的信息系统
不能满足需求、技术已经过时、维护工作十分困难、很难理解
2.系统转换:新系统开发完毕,投入运行,取代现有系统的过程
直接转换:现有系统被新系统直接取代,风险大,优点是节约成本
并行转换:新系统和老系统并行工作一段时间,风险小,使用大型系统,缺点是耗费人力和时间资源,难以控制两个系统间的数据转换
分段转换:分期分批逐步转换,将大型系统分为两个子系统,一次运行每个子系统,耗时,现有系统和新系统间混合使用,需要协调号接口等问题
数据转换与迁移:系统切换前通过工具迁移,系统切换前采用手工录入,系统切换后通过新系统生成
3.可维护性:维护人员理解、改正、改动和改进这个软件的难以程度
易分析性:诊断软件中的缺陷或失效原因或识别修改部分的能力
易改变性:使指定的修改可以被实现的能力,包括编码,设计和文档的更改
稳定性:避免由于软件修改而造成意外结果的能力
易测试性:已修改软件能被确认的能力
维护性的依从:遵循与维护性相关的标准或约定的能力
4.软件维护类型
正确性维护:发现了Bug而进行修改
适应性维护:由于外部环境发生了改变,被动进行的对软件的修改和升级
完善性维护:增加更多的功能,使其比之前的软件功能、性能更高、更加完善
预防性维护:对未来可能发生的bug进行预防性的维护