软件工程学习之七大实际开发模型的讲解,及模块化设计的理念
因为一些需要,需要把曾经学习过的软件工程这门课程给从新学习一下,把自己的一些学习分享给大家,希望能够一起进步
软件的分类
软件的发展
软件危机的表现
为了解决软件危机,所以诞生了软件工程这门学科
软件工程的内容
软件生存周期
软件的开发一般需要这8个阶段协同发展,但是具体问题具体分析,有些软件的开发并不一定都是要走这八个步骤,实际从事软件开发工作时,软件规模、开发环境及技术方法等因素会影响到阶段划分,及各阶段的执行顺序,形成不同生存周期模型,又称过程模型。
常用的软件过程模型
瀑布模型
瀑布模型特点:
1.阶段具有顺序性和依赖性前一阶段结束后一阶段开始,前一个阶段输出文档,后一个阶段输入文档。
2.推迟实现观点瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现,保证前期工作扎实。
3.质量保证观点瀑布模型每阶段坚持两个重要做法:是每阶段都必须完成完整、准确的文档。软件开发时人员间通信、运行时期维护的重要依据。是每阶段结束前对文档评审。
瀑布模型由于是单向的,所以实际开发中如果一个步骤出现问题,是没有办法返回处理的,为了解决这个问题,实际开发中的瀑布模型是带有反馈环的,就是说开发过程中如果之前的一部出现问题的话,还可以回去解决
优缺点
快速模型
根据用户的主要需求,建立一个软件原型,然后让用户进行评价,然后根据用户的评价和提出的更多的需求来开发出相应的软件产品
优缺点
增量模型,渐增模型
瀑布模型和快速模型都是一次性把软件提交给客户的,而增量模型是分批的把软件提交给客户的,但也要担一定的风险,就是最后合在一起未必能成功
优缺点
螺旋模型
一个螺旋一个螺旋的开发,每走一圈软件都会强大一次,而且每一圈都有风险分析,包括成本经济效益等,一旦风险评估不通过,则开发立即结束,周期较长
优缺点
喷泉模型
每一个圆都是一个阶段
优缺点
Rational统一过程:二维声明周期过程
每个阶段中对每个工作流的侧重点是不一样的,有的工作流中对测试侧重,有的对其他的侧重,比如初始主要业务建模和需求
优缺点
微软工程
每个工程都有一个里程碑,只要达到里程碑就认为阶段结束,就可以进入下一阶段了,这五个阶段是递进式的,五个阶段完成就形成一个软件,形成一个版本
这样安排好处是,假如版本1出现问题,或者想要升级,直接上版本2,这都很迅速的可以实现
需求分析阶段
结构化的需求分析
具体步骤
1发现需求的办法
需求出来之后,就需要根据需求找到最有用的需求,这个过程就是求精,然后我们要为需求建立模型,用图形符号和阻止规则来描述事务,它有三个图和一个数据字典组成
规格说明:书写软件需求规格说明,作为分析阶段最终成果
复审:一定要复审,把需求问题解决,最好不要带到下一个阶段,不然会很费事
软件工程之需求阶段三大关系模式图加数据字典的介绍
结构化设计之概要设计和详细设计
经过需求分析阶段之后,系统已经知道了现在应该怎么做了。
总体设计就是概括的回答,系统应该如何实现的问题。因此总体设计又背称为概要设计,或者初步设计。
详细设计就是具体的实现所要求的数据,也就是说经过这个阶段对系统目标,应该对系统目标进行精确描述,从而在编码阶段可以直接把这个设计翻译成某种设计语言的书写程序。
结构化设计与分析关系图
设计的原理,设计应该遵循的基本原理和概念
模块独立
模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合
耦合是模块和模块直接的,尽量追求低耦合
内聚是模块内元素之间的,尽量追求低内聚
耦合
其它情况也属于耦合
耦合原则
内聚
内聚总结
启发规则
人们在长期的额软件开发中积累了经验,总结出了一些启发式规则,能够帮助他们找到改进软件设计,提高软件质量
下面介绍一下启发规则
面向数据流的设计方法就是给出设计软件结构的一个系统化的途径
人机界面设计,就是如何让用户觉得界面用着很舒服
过程设计就是设计出软件的具体逻辑实现
面向数据结构设计,数据结构既影响程序的结构也影响程序的处理过程,可从数据结构导出程序的处理过程,适合详细
设计。最后可以形成伪代码描述,根据伪代码描述进行设计会很方便写出相应的程序。
面向数据结构设计方法两种:Jackson和Warnier方法
实现
编码就是将设计文档翻译源代码
黑盒测试:如果知道产品应具有功能,可通过测试来检验是否每个功能都能正常使用。
白盒测试:如果知道产品内部工作过程可通过测试来检验产品内部动作是否按照规格说明书的规定正常进行
测试准则
(1)所有测试应能追溯到用户需求,测试的目的是发现错误,其中最严重的是不能满足用户需求的错误。
(2)应尽早地和不断地进行软件测试。
(3)充分注意测试中群集现象(Pareto原理)。 测试后程序中残存错误数与程序中已发现错误数目成正比,80%错误与20%模块有关。
(4)测试应从小规模开始,逐步进行大规模测试。
(5)不能做到穷举测试。
(6)第三方测试原则
白盒测试的技术
白盒测试之逻辑覆盖
白盒测试之控制结构测试
基本路径测试和循环测试
基本路径测试:
根据过程设计结果画出相应流图
计算流图的环形复杂度
确定线性独立路径的基本集合(n独立路径:至少包含一条在定义该路径之前不曾用过的边。)
设计测试用例覆盖基本集合的路径
循环测试:
黑盒测试技术
因为不明确软件的内部细节,所以测试软件功能
黑盒发现错误类型
常见黑盒测试技术
(1)等价类划分;
(2)边界值分析;
(3)错误推测等
测试步骤
调试
软件调试是在进行了成功的测试之后才开始的工作。它与软件测试不同,调试的任务是进一步诊断和改正程序中潜在的错误
软件可靠性