软件工程的三要素:
五阶模型:系统规划——系统分析——系统设计——系统实施——运行维护
四阶模型:立项——开发——运维——消亡
系统规划:确定信息系统的发展战略,研究建设新系统的必要性和可能性、给出拟建系统的备选方案并进行可行性研究。
系统分析:进行详细调查、描述业务流程、指出局限性和不足、确定逻辑模型。
系统设计:概要设计(设计软件的结构、组成模块和模块间调用关键和每个模块的功能)和详细设计物理模型。
系统实施:计算机等设备的配置、安装和调试、程序的编写和调试、人员培训、数据文件转换、系统调试与转换。
运行维护:记录系统运行情况、进行必要的修改、评价系统的工作质量和经济效益。
软件产品从考虑其概念到产品交付使用,直至最终退役为止的整个过程。
瀑布模型是一个经典的软件生命周期模型,一般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码(含单元测试)、测试、运行维护等几个阶段。
瀑布模型中,上一项活动的输出作为当前活动的输入完成当前活动后,进行评审,通过则进下一项,否则返回之前。
特点:也称为生命周期法、预测型、计划驱动,是结构化方法中最常用的开发模型,本质是“一次通过”。适用范围是需求明确或很少变更的项目,或开发团队比较弱、有厚实的行业实践基础、整批一次性交付有利于干系人。
螺旋模型是一个演化软件过程模型,在瀑布模型和原型化模型的基础上的演进而来的。每一次迭代都包含了四个步骤:制订计划、风险分析、实施工程、客户评估。
在螺旋模型中,软件开发是一系列的增量发布。
螺旋模型在每一次迭代中增加了风险分析。
迭代模型中,每个阶段都执行一次传统的、完整的串行过程串,执行一次过程串就是一次迭代。每次迭代涉及的过程都包括不同比例的所有活动。(多次交付)
RUP软件统一过程就是迭代模型的一种。RUP中被分解为4个顺序的阶段:初始阶段(Inception)、细化阶段(Elaboration)、构建阶段(Construction)和交付阶段(Transition),这4个阶段的顺序执行就形成了一个周期。
V模型从整体上看起来,就是一个V字型的结构 ,由左右两边组成。
特点:细化了瀑布模型中的测试部分、开发阶段清楚、便于控制开发。适用于需求明确、需求变更不频繁的情况。
V模型特点:
原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,在原型的基础上开发出用户满意的产品。
原型特点:
原型分类:
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,相对于传统软件开发方法的“非敏捷”,更强调程序员团队和业务专家之间的紧密写作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、奏而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织的方法,也更注重软件开发中人的作用。Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。
特点:较小增量、快速迭代(2-4周)、变更驱动、每次交付最有价值成果、
适用:小型或中型软件开发团队,并且客户的需求模糊或多变。
常见的敏捷开发方法有:
常用开发方法:结构化方法、面向对象方法、原型化方法、面向服务的方法。
结构化方法由结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)组成。
精髓:自顶向下、逐步求精和模块化设计。
结构化方法主要特点:
结构化方法的缺点:
结构化方法特别适合于数据处理领域的问题,但不适应于规模较大、比较复杂的系统开发。
面向对象(OO)方法:认为客观世界是由各种对象组成的,任何事物都是对象,与结构化方法类似,OO方法也划分阶段,但其中的系统分析
、系统设计和系统实现三个阶段之间已经没有“缝隙”,也就说,这三个阶段的界限变得不明确。
面向对象的方法(OO)构建在类和对象之上,随后发展起来的建模技术将相关对象按照业务功能进行分组,就形成了构件(Component)的概念。
大型信息系统的开发,通常是将结构化方法和OO方法结合起来。首先,使用结构化方法进行自顶向下的整体划分;然后,自底向上地采用OO方法进行开发。
优点:具有更好的复用性,有利于用户和开发人员沟通,缩短开发时间。
面向对象三大特征:封装性、继承性和多态性。
原型化方法也称为快速原型法(简称为原型法)。根据用户初步需求,利用系统开发工具,快速地建立一个系统模型展示给用户,在此基础上与用户交流,最终实现用户需求的信息系统快速开发。
通常只是功能的导航,但并未真实实现功能,主要用在界面上。
也称为结构化原型,实现了一部分功能,垂直原型主要用在复杂的算法实现上。
探索式原型,指的是达到预期的目的之后,原型本身被抛弃。
演化式原型为开发增量式产品提供基础,逐步将原型演化成最终系统,主要用在必须易于升级和优化的场合,尤其是WEB项目。
对于跨构件的功能调用,采用接口的形式暴露出来。
进一步将接口的定义与实现进行解耦合,催生了服务和面向服务的开发方法。
如何使信息系统快速响应需求和环境变化,提高系统可复用性,信息资源共享和系统之间的互操作性,成为了影响信息化建设效率的关键问题,而SO的思维方式恰好满足了这种需求。
关注业务,业务驱动,以开放标准封装业务流程和已有的应用系统,实现应用系统之间的互相访问。
一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码,常用于格式化和链接,如HTML、XML。
又称为动态语言,是一种编程语言,用来控制软件应用程序,只在调用时进行解释,可以定义函数和变量,比编译型语言的语法和规则更简单灵活,跨平台移植难度低。典型的脚本语言:Python、JavaScript、VBScript、PHP。
程序在执行之前需要一个专门的编译过程,把程序编译成机器语言,比如exe文件。程序执行效率高,依赖编译器,跨平台移植难度大,编译型语言代表有:C、C++、Java。
是否生成目标代码是编译和解释的最根本区别。
这是历年的网工高频考点,务必掌握。
不运行程序,检查文档(检查单)或代码(桌面检查、代码走查、代码审查)。
用于软件单元测试中。
按照程序内部逻辑结构设计测试用例,进行测试。最常用的技术是逻辑覆盖。
用于集成测试、确认测试和系统测试。
根据SRS的规定来设计测试用例。
技术有:等价类划分、边界值分析、判定表、因果图、状态图、随机测试、猜错法、正交试验法。