一、软件生命周期
软件生命周期分为5个:获取过程、供应过程、开发过程、运行过程、维护过程,具体如下:
二、软件开发方法
2.1 形式化方法
该方法的思想是利用形式化语言,严格定义需求,并用数据推演的方法证明需求的性质。形式化规格包含了严格的语法定义以及一系列数据推演规则。
2.1.1净室软件工程
净室软件工程是形式化方法的一种实现,它用盒结构规约进行分析和建模,并将正确性验证作为发现和排错的主要机,使用统计测试来验证软件可靠性。
2.2 逆向工程
维护次数增加会导致软件结构混乱,可维护性降低,束缚软件发展。因此需要对就软件进行再工程,提高其可维护性。
2.2.1 再工程
再工程是对现有系统重新开发的过程,包括逆向工程(反工程)、新需求考虑(软件重构)、正向工程三个步骤。
2.2.2 逆向工程
逆向工程是分析程序,力求比源代码更高的抽象层次上建立程序表示的过程。
逆向工程应该能够抽象出 过程设计模型(实现级)、程序和数据结构信息(结构级)、对象模型、数据和控制流模型(功能级)、UML状态和部署图(领域级)。领域级层次最高,实现级层次最低。层次越高,离代码越远,难度越大。
2.2.3 软件重构
软件重构是对源代码和数据进行修改,使其易于修改和维护,以适应将来的变更。通常重构不修改软件体系结构,而是关注模块细节。
三、软件开发模型
软件开发模型有:瀑布模型、增量模型、螺旋模型、喷泉模型、V模型、构建组装模型、敏捷方法和统一过程等。
3.1 开发模型概述
3.1.1 瀑布模型
瀑布模型也称为生命周期法,它仅适用于需求明确或变更非常少的项目。分6个阶段,自上而下执行,如下所示:
3.1.2 演化模型(原型模型)
演化模型根据客户需求快速画出原型,再基于原型进行开发上线。再针对客户的需求或建议对原型修改,再进而开发,重复这一过程,最终获得信息版本。适合需求不明确的项目。
3.1.3 快速原型模型
快速原型模型是出了第一版原型,开发出版本后就抛弃原型,直接对产品迭代开发。
3.1.4 增量模型
增量模型融合了瀑布模型的基本成分(重复的应用)和原型实现迭代的特征。第一个发布的应用往往是核心应用,其它功能的应用后续迭代发布。
3.1.5 螺旋模型
瀑布模型将瀑布与演化模型结合,软件开发为一系列的增量迭代发布,每次迭代都包含制定计划、风险分析、实施工程和客户评估4个方面,与其它模型(比如增量模型)相比,它强调了风险分析。
3.1.6 V模型
v模型是在快速开发模型演变而来,注重质量,每个开发阶段都有对应的测试。具体如下所示:
3.1.7 喷泉模型
主要支持面向对象的开发方法,有无间歇迭代的特点。无间隙是指分析、设计、编码之间不存在明显的边界。
3.1.8 智能模型
基于支持的软件开发模型,它综合了若干模型,并把专家系统(规则知识库)结合在一起。
3.1.9 迭代模型
每次迭代包含一次完整的流程,且每次迭代会产生一个可以发布的产品,该产品是最终产品的子集。
3.1.10 变换模型
基于形式化说明语言和程序变换的软件开发模型。不断明确原型和形式化的规格说明,直到生成计算机可以接受的目标代码。
3.1.11 构件组装模型
基于构件软件开发(CBSD)利用模块化方法,将系统模块化,在一定构件模型的支持下,副总构件库中的一个或多个构件,高效高质量的构造应用。它的本质是演化型的,开发过程是迭代的。核心就是制造可复用构件提升开发效率。比如构造公共组件或API等。
3.2 快速应用开发
快速应用开发(RAD)比传统的生命周期发快的多,它是瀑布模型的一个高速变种,通过基于构件的开发方法获得快速开发。该方法核心就是创建可复用构件(公共组件,比如使用或改造开源的组件,开发公共API包等),进而加快进度。
3.3 统一过程
统一过程(UP)是一个通过通用框架,可以用于种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。比如UML建模,建立的逻辑模型生成物理模型后可以生成不同数据库的SQL,适配不同的项目数据源。其优点是兼容性强。
RUP是用例驱动,以架构为中心,迭代增量式开发过程(方法论)。每次迭代分为4个步骤:初始、细化、构建、交付。具体细节如下:
可以看出统一过程比较费时费力,对于小组织和项目来说,统一过程费力不讨好。
3.4 敏捷方法
敏捷方法强调程序员团队和业务之间的紧密协作、面对面沟通、频繁交付新版本、紧凑而自我组织型团队等。可以理解尽可能为面对面沟通,快速了解需求开发交付。
敏捷开发的方法有:极限编程(XP)、自适应软件开发、水晶方法、特性驱动开发等。
开发者关注点:短平快会议、小版本发布、较少的文档、合作为重、客户直接参与、自动化测试、结对编程、适应性计划调整。
管理者关注点:测试驱动开发、持续集成、重构。
敏捷方法主要适用于小规模软件或小团队开发,不适合所有项目,因为其设计时间少,匆匆上线容易引起架构等问题,加之文档少,规模大了都理不清或记不起关键需求或代码实现,交接也困难。
四、系统规划与问题定义
系统规划步骤有:1、对现有系统进行初步调查;2、分析和确定系统目标;3、分析子系统的组成和基本功能;4、拟定系统的实施方案;5、进行系统的可行性研究;6、制定系统建设方案。
4.1 项目的提出与选择
4.1.1 项目的立项目标和动机
企业对于信息系统的建设有多种动机,可归结为4种模式:基础性研究、进行应用研发(比如研发办公软件售卖)、提供技术服务(比如提供定制开发或集成或咨询)和产品使用者(比如对现有产品改造)。
4.1.2 项目立项价值判断
企业最终需要达成的目标才是价值的体现,比如:获取利润、占有市场份额、提高影响力、社会效益等。需要思考目标并确定开发边界等。
4.1.3 项目的选择和确定
需要多方面考虑,比如:选择有核心价值的项目、评估选择的项目、对项目优先级排序、评估项目的实施方式、平衡选择合适的方案。
4.2 初步调查
初步调查的对象有:(1)企业高管,了解他们的目标以及系统边界、资金、工期等;(2)IT部门负责人,了解现有系统、取得的效果和存在的问题;(3)业务部门领导,征求他们对新信息系统的意见以及功能要求。
初步调查的内容:(1)用户提出新系统建设的缘由,对新系统的需求和目标;(2)企业的基本状况,包括企业性质、规模、人员等;(3)管理方式和基础数据管理状况;(4)现有系统状况。
4.3 可行性分析
一般要从技术可行性、经济可行性、操作可行性三方面考虑。其中操作可行性指法律和操作使用可行性,法律指涉及的合同、侵权等问题,操作使用指行政管理、人员素质等是否满足要求。
最终需要出可行性研究报告,它分析了项目的要求、目标和环境,提出了几种可选方案(评价矩阵),并从技术、经济、法律等方面进行了分析。
4.4 成本效益分析
成本是信息系统周期内各阶段所有投入之和。而受益是信息系统建成后所有产出之和。
4.4.1 成本
按投资时间分类,可分为:基础性建设投资、其他一次性投资、非一次性投资。
按成本性态分类,可分为:固定成本、变动成本、混合成本。
4.4.2 收益
收益可分为有形收益和无形收益。
有形收益:也称为经济收益,可以分为一次性经济收益和非一次性经济收益。一次性经济收益主要体现在应用系统使用价值提升而引起的收益,也可以是其他方面的收入,比如多余设备出售回收等。非一次性经济收益则是信息系统生命周期内,运行系统按月按年能用货币数目表示的收益,比如信息系统使用提升了工作效率,节约了人员工资等。
无形收益:比如服务质量的提高,会使企业形象改善等,进而抢占市场份额等。
4.4.3 盈亏临界分析
利润=(销售单价-单位变动成本)×销售量-总固定成本
盈亏临界点销售量=总固定成本/(销售单价-单位变动成本)
盈亏临界点销售额=总固定成本/(1-总变动成本/销售收入)
以上公式比较复杂,较难理解,可以看下面这个说明:
销售额=固定成本+可变成本+利润,其中利润为0时,销售额为盈亏临界销售额,即:盈亏临界销售额=固定成本+可变成本。可变成本会随着销售额(量)的变化而变化,它们的比值一般是固定的。
这里举例计算,数据如下,求盈亏临界点时的销售额:
这里求临界销售额,即利润为0时的销售收入。这里可以看出当销售额为800时,固定成本130+150=280,利润120,则可变成本400。这里得到比例:可变成本/销售额=400/800=0.5,即可变成本占销售额的一半!
根据公式 临界销售额=固定成本+可变成本,而这里可变成本为销售额的一半,即 销售额=280+0.5×销售额,得出销售额=560。
4.4.3 净现值分析
单利:每年都按本金计算利息,已取得的利息不再计算利息。F=P×(1+i×n),其中P为本金,i为利率,n为年限,F为P在n年后的价值。
复利:以本金与累计利息纸盒为基数计算利息:F=P×(1+i)^n。F为本金P在n年后的价值。
现值:未来的钱在现在的价值,比如利率10%,一年后的110就相当于现在的100!
净值:
由于有利率的存在,会导致我们手里的钱会贬值或升值!具体计算如下题,求折现后的成本和收入。
这里从静态看没啥问题,2年投入500,5年后收入1000。动态计算折现就有问题了,我们都以年初和年末按照F=P×(1+i)^n,利率=10% 来折现来看看成本和收入。
甲方案第一年投入350,第二年需要投入150,实际若150存银行1年的话,出来的是不止150,同理,第二年投入150,那么准备资金是不需要150的,根据F=P×(1+i)^n,其中i=0.1,n=1,F=150,得出P=150/1.1=136.4,成本为:350+136.4=486.4。即只要第一年准备486.4即可,先付350,剩余136.4存银行吃利息,第二年增值成为150后付第二年的款。
同理,得乙方案成本为:300+200/1.1=481.8,丙方案成本为:400+100/1.1=490.9。
利润也是一样,需要把每年的利息算进去,甲方案利润为:150×1.1^3+200×1.1^2+250×1.1+400=1116.65。同理得乙方案利润:1105.1,丙方案利润为:1143.7。
最后纯利润为:甲方案是630.25,乙方案是623.3,丙方案是652.8。显然,丙方案盈利是最高的。