博猪是一枚苦逼的搞基网络攻城狮,即将毕业的应届毕业生。
目前自学软件工程、Python转型搞基程序猿,感觉好像离进化成人类又进了一步呢~
以下是自学软件工程的学习笔记,总结的很粗陋,仅供自己学习记录用。
不喜勿喷,全靠一身肥膘在支撑。
----------------割割割刚割割割割割------------------
软件开发模型(讲述的是过程)
1 传统开发模型
瀑布模型(waterfall model)/文档驱动模型
特点:
1. 阶段间具有顺序性和依赖性:必须等前一阶段的工作完成后,才能开始下一阶段的工作。(弊)
2.推迟实现的观点:原所谓的实现阶段是编码与测试,而该模型设置了前期的重要工作。(优)
3.质量保证的观点:
1. 每个阶段都必须提交规定的文档
2.每个阶段结束前都要对完成的文档进行评审
快速原型模型(rapid prototype model)/反复确定需求
原型:实现了一个最基本的框架界面,具备基本功能。提供给用户初步使用,并收取意见进行不断修改。直至满足用户所有需求功能。
本模型适合中小型软件开发,需求模糊的。不要太着重于开发原型,足够使用户理解即可。
特点
快速开发工具
循环/迭代过程
低成本
种类
渐进型--初次原型符合客户需求,无需较大的修改,稍微修改即可使用。
抛弃型--初次原型只为获得需求,改动较大,将原本原型抛弃,根据详细具体需求,重新开发。
2 演化开发模型
增量模型(incremental model)/渐增模型
本模型开发软件时,把软件产品作为一系列的增量构件来设计、编程、集成和测试。
每个构件由多个相互作用的模块构成,完成特定的功能。
本模型开发的软件 :小而可用,且功能单一的软件
主要实现难度是,各个构件如何集成。增量2要和增量1要有衔接。类似于环锁一样。
特点
在前面增量的基础上开发后面的增量
每个增量的开发可用瀑布或快速原型模型
迭代的思路
螺旋模型(spiral model)/风险驱动模型
螺旋模型的基本思想是:使用原型及其他方法来尽量降低风险(包括降低成本,避免开发错误)。
每个阶段之前都增加了风险分析过程的快速原型模型。
特点
瀑布模型+快速原型+风险分析
迭代过程
一个螺旋式周期
确定目标,选择方案,选定完成目标的策略
风险角度分析该策略
启动一个开发阶段
评价前一步的结果,计划下一轮的工作
3 面向对象开发模型
构件集成模型(component integration model)
特点
面向对象
基于构件库(强大的构件库)
融合螺旋模型中的定义开发阶段
支持软件开发的迭代方法
软件重用
4 形式化开发模型
转换模型(transformational model)
转换模型是通过变换自动生成代码?(我瞅了半天都没瞅懂具体含义 哆啦A梦摊手)
净室模型(clean room model)/增量模型的专业版(一个软件增量的流水线)
一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术。
通过严格的工程化的软件过程达到开发中的零缺陷或接近零缺陷。
每当一个软件增量通过认证,它就被集成到整体系统中。因此,系统的功能随着时间增加。
参考文献:http://wiki.mbalib.com/wiki/Cleanroom_software_engineering 净室软件工程
本模型采用盒结构规格说明方法。一个“盒”在某个细节层次上封装了系统的某些方面。三种盒结构分别为:黑盒、状态盒、白盒(看起来类似于软件测试里的三种方法,实际上不是的)。
黑盒:黑盒刻画系统行为或部分系统的行为。描述一种抽象、触发和反应。
状态盒:状态盒以类似于对象的方法封装状态数据和服务。
白盒:白盒中包涵了对状态盒的程序设计。
软件开发模型--小结
软件开发模型是不断发展的
各种软件开发模型各有优缺点
选用时不必拘泥于某种模型
可组合多种模型
也可根据实际创建新的模型
参考文献:
《软件工程实践者的研究方法》(原书第7版)--Roger.S.Pressman
《软件工程导论》(第五版)--张海藩