面向过程的软件工程

157 阅读9分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

面向过程

软件工程概论

  • 软件:程序、数据以及开发、使用和维护程序需要的所有文档的集合。
  • 软件工程的三要素:方法,工具,过程。
  • 软件危机:计算机软件开发和维护过程中所遇到的一系列严重问题。
  • 软件危机的表现:客户不满意,风险与成本问题,项目过程失控,无力管理团队,软件的发展跟不上用户的要求。
  • 软件工程:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
  • 软件生命周期(又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期): 软件计划阶段:1.问题定义 2.可行性分析 3.需求分析 。 软件开发阶段:1.总体设计 2.详细设计 3.编码 4.测试 。 软件运行阶段 1.运行维护(改正性维护,适应性维护,完善性维护,预防性维护)
  • 软件工程开发方法: 面向过程:算法为基本构造单元,自顶向下,将功能和数据一定程度分离 面向对象:类为基本单元,对象是类的实例化,对象之间以消息传递为基本手段 面向构件 面向服务应用业务过程由服务组成,而服务由构建组成
  • 软件开发模型: 一、面向过程: 1.瀑布模型(又称生产周期模型或线性顺序模型):阶段间具有顺序性和依赖性,以文档为驱动,适合于需求很明确、变化不大的软件项目开发;缺乏灵活性,实际上很难得到完全、精确的需求。 2.快速原型模型:首先快速建立一个能反映用户主要需求的原型系统,然后反复改进。可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。 3.增量模型(又称渐增模型):把软件产品作为一系列的增量构件,第一个增量构件往往实现软件的基本需求,提供最核心的功能开发一部分向用户展示一部分,可以让用户及早看到部分软件,及时发现问题,有较大的灵活性,适合于软件要求不明确,设计方案有一定风险的软件项目;但软件过程的控制失去整体性。 4.螺旋模型:可看作在每个阶段之前都增加了风险分析过程的快速原型模型,是一种迭代模型,把开发过程分为几个螺旋周期。 二、面向对象: 1.喷泉模型:较典型的面向对象开发模型,以用户需求为动力,以对象为驱动。有迭代性和无间隙性。 2.基于构件的开发模型:提高了软件的重用性和可靠性。 3.统一过程(RUP)模型:以构件为中心,以用例驱动,采用迭代和增量的开发策略,是基于UML的过程模型。 4.基于形式化的开发过程。

可行性研究

  • 可行性研究:经济可行性、技术可行性、操作可行性、法律可行性。
  • 可行性研究的步骤: 复查系统规模和目标;研究当前的系统;导出新系统的高层逻辑模型;重新定义问题;导出和评价可供选择的解决方案;推荐可行的行动方案;草拟开发计划;书写文档并提交审查。

软件需求分析

回答系统必须做什么

  • 软件需求分析:软件生存周期最重要的一步,是关系到软件开发成败的关键步骤。
  • 需求分析的步骤:需求获取、需求提炼、需求描述、需求验证。
  • 结构化分析方法(SA):面向数据流进行数据分析的方法。采用自顶向下逐层分解的分析策略。顶层抽象地描述整个系统,底层具体地画出系统工程的每个细节。中间层则是从抽象到具体的过渡。使用数据流图(DFD),数据字典作为描述工具,使用结构化语言,判定表,判定树描述加工逻辑。
  • 需求分析工具:数据流图、数据字典、层次方框图、维纳图、IPO图。

软件总体设计

回答系统必须怎样做

  • 总体设计(又称概要设计或初步设计):设计软件的总体结构,不要求设计模块内部过程的细节。

  • 任务:软件体系结构设计和软件模块设计。

  • 模块最重要的两个特征:抽象,隐蔽。

  • 模块独立性的度量: 1.耦合:无直接耦合、数据耦合(最好)、标记耦合、控制耦合、公共环境耦合、内容耦合。 2.内聚:偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚、功能内聚(最好)。

  • 总体设计(软件架构设计的图形)工具:软件结构图、层次图、HIPO图。

  • 结构化设计方法:以数据流图(变换型、事务型、混合型)为基础设计系统的软件架构。

  • 结构化程序设计的基本要点: 1、采用自顶向下、逐步求精的程序设计方法 2、使用三种基本控制结构构造程序。任何程序都可以由顺序、选择、重复(循环)三种基本控制结构构造,这三种基本结构的共同点是单入口、单出口。 3、主程序元组的组织形式。

软件详细设计

  • 详细设计:确定应该怎样具体实现所要求的系统,设计出程序的蓝图。

  • 详细设计工具:程序流程图、盒图(N-S图)、问题分析图(PAD图)、过程设计语言(PDL)

软件编码

  • 可靠性、可读性、可测试性、可维护性。
  • 选择一种程序设计语言的主要有哪些依据? 1.为了使程序容易测试和维护以减少生命周期的总成本,选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构; 2.为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误; 3.为了降低软件开发和维护的成本,选用的语言应该有良好的独立编译机制。 上述这些要求是选择语言的理想标准,但是在实际选用语言时不能仅仅考虑理论上的标准,还必须同时考虑实用方面的各种限制。 (1)系统用户的要求 (2)可以使用的编译程序 (3)可以得到的软件工具 (4)系统规模 (5)程序员的知识 (6)软件可移植性要求 (7)软件的应用领域

软件测试

  • 软件测试的目标: 1.测试是为了发现程序中的错误而执行程序的过程; 2.好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; 3.成功的测试是发现了至今为止尚未发现的错误的测试。

  • 软件测试的方法有动态测试(包括黑盒测试和白盒测试)、静态测试(包括人工测试和计算机辅助静态分析)和正确性证明。 1.黑盒测试(又称功能测试和数据驱动测试): 将被测软件看出一个黑盒子,只考虑系统的输入和输出,完全不考虑程序内部的逻辑结构和处理过程,只在软件接口处进行测试。 黑盒测试的依据是开发各阶段的需求规格说明。包括等价类划分法、边界值分析法、错误推测法、因果图法。 2.白盒测试(又称结构测试和逻辑驱动测试):将黑盒子打开,研究源代码和程序内部的逻辑结构和处理过程。包括语句覆盖、判定覆盖(即分支覆盖)、 条件覆盖、判定/条件覆盖、条件组合覆盖、 点覆盖、 边覆盖、路径覆盖。

  • 软件测试要经过的步骤:单元测试(发现编码和详细设计中的错误)→集成测试(发现接口、软件设计中的错误)→确认测试(发现需求分析阶段中的错误)→系统测试。

  • 单元测试中采用的方法:为被测试模块编写驱动模块和桩模块来实现被测试单元的可运行。通过驱动模块来模拟被测试模块的上级调用模块,以上级模块调用被测模块的格式驱动被测模块,接收被测模块的测试结构并输出。桩模块则用来代替被测试模块所调用的模块。它的作用是返回被测模块所需的信息。

软件维护

用时最长

  • 软件维护:软件系统交付使用后为了改正软件运行错误或者因满足新的需求而加入新功能的修改软件的过程。
  • 软件维护的分类: 1.校正(纠错)性维护。在软件交付使用后,一些隐含的错误在某些特定的使用环境下会暴露出来。为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护。 2.适应性维护。为了使应用软件适应计算机硬件、软件环境及数据环境的不断发生的变化而修改软件的过程称为适应性维护。 3.完善性维护。为增加软件功能、增强软件性能、提高软件运行效率而进行的维护活动称为完善性维护。 4.预防性维护。为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。