软件工程

GongJie 2025-7-3 527 7/3

基础知识

软件危机︰随着软件复杂度提升,开发成本、软件质量、生产效率等问题。
软件工程︰为了消除软件危机,以工程学思路进行软件开发,即软件工程。

软件工程三个要素

方法︰完成软件工程项目的技术手段。
工具∶支持软件的开发、管理、文档生成。
过程∶支持软件开发的各个环节控制、管理。

信息系统生命周期模型

五阶模型

系统规划(可行性分析与项目开发计划)
系统分析(需求分析、确定逻辑模型-做什么)
系统设计(概要设计、详细设计物理模型-怎么做)
系统实施(设备购置、编码、测试)
运行维护

四阶模型:立项(系统规划)、开发(系统分析、系统设计、系统实施)、运维消亡

软件生命周期

软件生命周期︰软件产品从考虑其概念到产品交付使用,直至最终退役为止的整个过程。
(1)计划阶段︰确定待开发系统的总体目标和范围,可行性研究和预算、进度估算。
(2)分析阶段∶分析、整理和提炼用户需求,编写需求规格说明书和初步用户手册。
(3)设计阶段∶根据需求规格说明书,确定软件体系结构,确定每个模块的实现算法、数据结构和接口,编写设计说明书,并组织评审。
(4)实现阶段︰将设计的各个模块编写成计算机可接受的程序代码和相关文档
(5)测试阶段︰测试各个功能模块,然后将各个模块集成起来,进行功能需求测试。
(6)运维阶段︰后期运维,增删改。

软件开发模型

典型的软件生命周期模型:瀑布模型、螺旋模型、迭代模型、V模型、原型化模型、敏捷方法

瀑布模型

一般将软件开发分为∶计划需求分析软件设计编码(含单元测试)、测试运维等几个阶段。

特点:上一项活动的输出作为当前活动的输入完成当前活动后,进行评审,通过则进下一项,否则返回之前。
也称生命周期法、预测型、计划驱动,是结构化方法中最常用的开发模型,本质是“一次通过”。

适用:需求明确或很少变更的项目、开发团队比较弱的情况、有厚实的行业实践基础、整批一次性交付有利于干系人。

优点:

(1)为项目提供了按阶段划分的检查点。
(2)当前一阶段完成后,您只需要去关注后续阶段。
(3)可在迭代模型中应用瀑布模型。
(4)它提供了一个模板,使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

缺点:

(1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
(2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险
(3)不适应用户需求的变化

螺旋模型

螺旋模型是一个演化软件过程模型,在瀑布模型和原型化模型的基础上的演进而来的。每一次迭代都包含了四个步骤︰制订计划、风险分析、实施工程、客户评估

在螺旋模型中,软件开发是一系列的增量发布
螺旋模型在每一次迭代中增加了风险分析

迭代模型

迭代模型中,每个阶段都执行一次传统的、完整的串行过程串,执行一次过程串就是一次迭代。每次迭代涉及的过程都包括不同比例的所有活动。【多次交付

RUP软件统一过程就是迭代模型的一种。RUP中被分解为4个顺序的阶段∶初始阶段(Inception)、细化阶段(Elaboration)、构建阶段(Construction)和交付阶段(Transition),这4个阶段的顺序执行就形成了一个周期。

增量模型

融合了瀑布模型的基本成分和原型实现的迭代特征。在预定的时间区间内渐进增加产品功能的一系列迭代来产出可交付成果。

本质上是一种非整体开发模型。只有在最后一次迭代之后,可交付成果具有了必要和足够的能力,才能被视为完整的。渐进地增加,属于“功能型迭代”。

V模型

V模型从整体上看起来,就是一个V字型的结构,由左右两边组成。

软件工程
·左边的下画线分别代表了用户需求、需求分析、概要设计、详细设计
·右边的上画线代表了单元测试、集成测试、系统测试和验收测试

特点∶细化了瀑布模型中的测试部分、开发阶段清楚、便于控制开发
适用∶需求明确、需求变更不频繁的情况

原型化模型

原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。

原型特点︰

(1)实际可行。
(2)具有最终系统的基本特征。
(3)构造方便、快速,造价低。

原型分类∶

(1)抛弃型原型∶原型在系统真正实现以后就放弃不用了。
(2)进化型原型∶通过修改和追加功能的过程逐渐丰富,演化成最终系统。

敏捷开发模型

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,相对于传统软件开发方法的“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、奏而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。

特点∶较小增量、快速迭代(2~4周)、变更驱动、每次交付最有价值成果
适用∶小型或中型软件开发团队,并且客户的需求模糊或多变

常见的敏捷开发方法∶极限编程(XP)、Scrum、自适应软件开发、水晶方法、特性驱动开发

软件工程

软件开发方法

常用开发方法∶结构化方法、面向对象方法、原型化方法、面向服务的方法

结构化方法

结构化方法由结构化分析( SA)结构化设计(SD)结构化程序设计(SP)组成。

精髓︰自顶向下逐步求精模块化设计

结构化方法主要特点︰

(1)开发目标清晰化。(2)开发工作阶段化。(3)开发文档规范化。(4)设计方法结构化。

结构化方法缺点∶

(1)开发周期长。(2)难以适应需求变化。(3)很少考虑数据结构

结构化方法特别适合于数据处理领域的问题,但不适应于规模较大、比较复杂的系统开发

面向对象方法

面向对象(OO )方法∶认为客观世界是由各种对象组成的,任何事物都是对象。与结构化方法类似,00方法也划分阶段,但其中的系统分析、系统设计和系统实现三个阶段之间已经没有“缝隙”。也就是说,这三个阶段的界限变得不明确

面向对象的方法(OO)构建在类和对象之上,随后发展起来的建模技术将相关对象按照业务功能进行分组,就形成了构件(Component )的概念。

大型信息系统的开发,通常是将结构化方法和OO方法结合起来。首先,使用结构化方法进行自顶向下的整体划分﹔然后,自底向上地采用OO方法进行开发

优点∶具有更好的复用性,有利于用户和开发人员沟通,缩短开发时间.

面向对象三大特征:封装性、继承性和多态性

原型化方法

原型化方法也称为快速原型法(简称原型法)。根据用户初步需求,利用系统开发工具,快速地建立一个系统模型展示给用户,在此基础上与用户交流,最终实现用户需求的信息系统快速开发。

水平原型━通常只是功能的导航,但并未真实实现功能。水平原型主要用在界面上。DEMO
垂直原型一也称为结构化原型,实现了一部分功能。垂直原型主要用在复杂的算法实现上

抛弃式原型一也称为探索式原型,是指达到预期目的后,原型本身被抛弃。
演化式原型一为开发增量式产品提供基础,逐步将原型演化成最终系统。主要用在必须易于升级和优化的场合,特别适用于Web项目。

原型法特点︰

(1)原型法可以使系统开发的周期缩短、成本和风险降低、速度加快,获得较高的综合开发效益
(2)原型法是以用户为中心来开发系统的,用户参与的程度大大提高,开发的系统符合用户的需求,因而增加了用户的满意度,提高了系统开发的成功率。
(3 )由于用户参与了系统开发的全过程,对系统的功能和结构容易理解和接受,有利于系统的移交,有利于系统的运行与维护。

原型法不足︰ (1)开发的环境要求高。(2)管理水平要求高

原型法优点︰能更有效地确认用户需求。从直观上来看,原型法适用于那些需求不明确的系统开发。对于分析层面难度大、技术层面难度不大的系统,适合于原型法开发;而对于技术层面的困难远大于其分析层面的系统,则不宜用原型法。

面向服务的方法

对于跨构件的功能调用,则采用接口的形式暴露出来。
进一步将接口的定义与实现进行解耦,则催生了服务和面向服务的开发方法。【粗粒度、松耦合】
如何使信息系统快速响应需求与环境变化,提高系统可复用性、信息资源共享和系统之间的互操作性,成为影响信息化建设效率的关键问题,而SO的思维方式恰好满足了这种需求。

关注的是业务,以业务驱动技术,强调IT与业务的对齐,以开放标准封装业务流程和已有的应用系统,实现应用系统之间的相互访问。

软件工程

软件开发语言

( 1)标记语言︰一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。常用于格式化和链接,

典型的标记语言有:HTML、XML。

( 2)脚本语言︰又称为动态语言,是一种编程语言,用来控制软件应用程序,只在调用时进行解释,可以定义函数和变量,比编译型语言的语法和规则更简单灵活,跨平台移植难度低。

典型的脚本语言:Python、JavaScript、VBScript、PHP

( 3)编译型语言∶程序在执行之前需要一个专门的编译过程,把程序编译成机器语言,比如exe文件。程序执行效率高,依赖编译器,跨平台移植难度大

典型的编译型语言有:C、C++、Java

软件测试

软件测试方法可分为静态测试和动态测试

静态测试︰不运行程序,人工检测或计算机辅助静态分析(文档或代码)。

文档静态测试主要以检查单形式进行,代码静态测试一般采用桌前检查、代码走查和代码审查

动态测试:运行程序进行软件测试,一般采用白盒测试和黑盒测试

白盒测试︰(也称为结构测试),主要用于软件单元测试中。
·主要思想∶将程序看作是一个透明的白盒,测试人员完全清楚程序的结构和处理算法,按照程序内部逻辑结构设计测试用例。白盒测试方法主要有控制流测试、数据流测试和程序变异测试等。另外,使用静态测试的方法也可以实现白盒测试。例如,使用人工检查代码的方法来检查代码的逻辑问题,也属于白盒测试的范畴。白盒测试方法中,最常用的技术是逻辑覆盖,即使用测试数据运行被测程序,考察对程序逻辑的覆盖程度。

黑盒测试(也称为功能测试),主要用于集成测试、确认测试和系统测试中。
黑盒测试将程序看作是一个不透明的黑盒,完全不考虑(或不了解)程序的内部结构和处理算法。一般包括等价类划分、边界值分析、判定表、因果图、状态图、随机测试、猜错法和正交试验法等。

测试类型

软件工程

测试分类

软件工程

- THE END -

GongJie

7月03日17:29

最后修改:2025年7月3日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论

您必须 后可评论