软件工程总结

写在开头:

              为什么需要软件工程?鄙人拙见:IT领域不论是数据结构,算法,设计模式,编程思想,甚至测试,产品设计,项目管理,运维等,最终的价值还是要在软件上体现出来。如何更好的开发出优秀的软件,这是软件工程要解决的。

           但是不幸的是,打开软工课本满满的长篇大论,老师讲的枯燥乏味,于是一些人便觉得这很无聊。

           个人建议尽量参与实际项目,这样带着问题去学习,然后把理论带回实践中,会取得良性循环。

             (软件工程=工具+方法+过程)

 

一、概述

           我们来说软件工程。

          它为啥会出现?

          答:一开始开发软件时,开发的人不清楚具体会用多少时间,他自己理解的用户需求和用户实际想要的往往存在偏差。

                 而且因为这行业刚开始,也没规范的文档查阅。缺乏工程化的管理和约束,开发的软件也不容易维护。于此同时,市场上对软件的要求越来越高,软件也越来越大,越来越复杂。

                   这一直下去肯定不行,不是每个地方都有大佬程序眼,运气也靠不住。

                 所以。业界各位大佬通过分析总结了一套比较规范的开发方法,经过后来各位道友加持下,发展成了今天的软件工程

      软件生命周期

问题定义:(要解决什么问题)

可行性研究:(问题是否有可值得)

需求分析:(确定目标系统有什么功能)

总体设计:(如何实现目标系统)

详细设计:(抽象的提出解决办法)

编码和单元测试(写出规范的代码并测试)

综合测试(通过多种测试使软件达到预期效果)

软件维护(通过维护使系统持久的满足用户需求)

        用盖房子来说,问题定义明确用户要啥样的房子,可行性研究解决这个房子能不能盖,需求分析解决用户需要啥样的房子(三室一厅,还是大别墅),总体设计给出几种可行方案,详细设计给出具体的设计图纸,编码和单元测试好比开始砌墙打梁,综合测试好比房子检验是否合格。

           人话再说:你接到了客户一个项目,

               首先你得知道,这是个啥问题,这叫问题定义

                接着,你得看看这个问题,现有的技术和资源能否区做这个事, 这叫可行性研究

                然后,通过上面分析,觉得可以操作,考虑客户这个项目需要啥,做的软件有啥功能,这叫需求分析

               接下来考虑,知道大概有啥功能要求,考虑如何去实现这个软件,提出几种可能的方案,设计软件结构,这叫总体设计

             总的弄完,接下来肯定是详细的把上面的方案具体化,即具体操作如何去实现,此时因该设计各个模块,每个模块的算法和数据结构。这就叫详细设计

                上面的各种方案弄好,都清楚了,接下来程序员就去编码,写的每个模块需要进行单元测试。这个阶段就叫编码和单元测试。

                 代码写完了,各个模块都确定了,所以要最整个系统进行测试,这个阶段就叫综合测试

                测试完,软件投入使用了。在使用过程中经常会出现各种问题或者通用户提出了新的需求,所以需要软件维护

————————————————————————————————————————————————————————

这里简述 几个软件过程。

这里简述 几个软件过程以及各自特点。

瀑布模型:

               它基本按照软件生命周期进行。包括需求分析,规格说明,设计,编码。下个阶段要进行,必须保证上个阶段已经结束并验证。

                特点:

               优点:因为严格顺序执行,整体开发比较规范。每个阶段都有文档,所以软件质量有保证而且有利于后期维护。

                缺点:因为缺乏与用户的交流,因此需求确定容易产生错误,而且大量的文档导致耗费部分时间。

快速原型:

                快速建立起来可在计算机上运行的程序,它时最终产品的子集。这个快速原型,方便给用户展示与交流。

                 包括快速原型,规格说明,设计,编码测试,综合测试,维护。维护期有变化的需求,可及时回去修正。

                 特点:

                 优点:保证用户真实需求得到满足。

                 缺点::过度关注非主要因素,文档更新比较慢。

增量模型:

               包括需求分析,规格说明,概要设计,每个构建经过测试交付用户,维护

               特点:

                优点:较短时间内提交部分产品,使用户有足够时间适应新产品,

                 缺点:存在新增模块与已经开发系统无法集成。

螺旋模型:

                 使用原型降低分线,可看作每个阶段都增加风险分析的亏啊u是原型。

                特点:

               优点:对可选方案和约束条件的重视有利于软件的重构和保证软件质量,减少了过多测试带来的风险。

                缺点:对开发人员的风险评估能力有较高要求。风险分析占用一部分资源,增加了成本。适合大型复杂软件开发。

喷泉模型:

                是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。

                特点:

               优点:各个阶段可同步进行,提高了软件开发效率,节省开发时间,适应于面向对象开发。

               缺点:需要大量开发人员使得项目管理困难,而且许多文档需要审核,审核难度较大。

二、可行性研究

可行性研究目的是较短时间确定问题是否能够研究。

                  首先,分析和澄清问题定义。

                  接着导出系统逻辑模型。

                 最后探索若干选择方案:

                     (1)技术可行性方面,现有技术能否实现这个系统。

                    (2)经济可行性,经济效益是否超过开发成本

                    (3)操作可行性,系统的操作方式在这个组织是否行得通

 

系统流程图基本符号

数据流图基本要素

数据字典通常由:数据流,数据流分量,数据存储,处理。

三、需求分析

需求分析对目标系统提出完整准确的要求。即回答“系统必须做什么”

         任务:

                  (1)确定系统的综合要求

                    功能需求,性能需求,可靠性和可用性,接口需求,约束,出错处理等。

                  (2)分析数据要求

                    常采用建立数据模型的方法描述

                  (3)导出系统的逻辑模型

                          常用数据流图,实体联系图,数据字典等描述

                   (4)修正系统开发计划

四、形式化说明技术

(1)有穷状态机(当前状态+事件+谓词➡下个状态)

        特点:易于书写和验证,容易转变为设计或代码。

(2)Petri网(一组位置,一组转换,输入函数,输出函数)

        特点:适合于描述异步的、并发的计算机系统模型。 

(3)Z语言(给定集合,状态定义,初始状态,操作)

五、总体设计

         系统应该如何实现,设计软件的结构

        总体设计设计过程:系统设计阶段确定系统的具体实现方案;结构设计阶段,确定软件结构

 

             书写文档:(1)系统说明(2)用户手册(3)测试计划(4)测试计划(5)实现计划(6)数据库设计结果

           模块化是软件工程中一个重要手段。

              模块独立是模块化,抽象,信息隐藏和局部化概念的直接结果。

              耦合衡量不同模块相互依赖的紧密程度。  内聚衡量一个模块内部各个元素彼此结合的紧密程度。

耦合:数据耦合,控制耦合,特征耦合,公共环境耦合,内容耦合(从低到高)

内聚:偶然内聚,逻辑内聚,时间内据,过程内聚,通信内聚,顺序内聚,功能内聚

         软件模块应遵循高内聚低耦合的原则。

启发式规则:提高模块独立性,模块规模适中,深度、宽度、扇出、扇入适当,降低模块接口的复杂度,设计单入单出的模块,模块功能易预测。

六、详细设计

                     怎样具体实现所要求的系统

过程设计的工具有:程序流程图、盒图、判定表、判定树、PAD图、过程设计语言(PDL)

七、实现

集成测试:非渐增测试,渐增测试

当渐增方式把魔魁啊结合到程序中,对应自顶向下集成和自顶向上集成

白盒测试:语句覆盖,判定覆盖,条件覆盖,条件/判定覆盖,条件组合覆盖

黑盒测试:等价划分、边界值分析、错误推测。

八、软件项目管理

甘特图可以形象描绘任务分解情况,以及每个子任务的开始和结束时间。

缺点:不能显式描述各作业的依赖关系

          进度计划关键部分不明确,难判定主要对象

           有潜力的部分和潜力大小不确定,会造成潜力浪费

工程网络:描绘任务分解情况以及每项作业的开始时间和结束时间。可以描绘各个作业的依赖关系

—————————————————————————————————————————————————

(仓促对软工课本考试内容进行了总结,不当之处,请多理解)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值