基本概念
软件工程三要素:方法、工具、过程
软件开发方法:软件开发所遵循的办法和步骤,以保证所得到的运行系统和支持的文档满足质量要求。
软件开发过程管理
软件生命周期 :可行性研究、需求分析、概要设计、详细设计、编码、测试、运行维护七个阶段。
软件开发模型
瀑布模型
将软件生命周期划分为制订计划、需求分析、软件设计、程序编写、软件测试和运行维护等6个基本活动,并且规定了它们自上而下、相互衔接的固定次序,比如同瀑布流水,逐级下落。
优点 是可以规范化过程,有利于评审。
缺点 在于给出软件生存周期各阶段的固定顺序,上一阶段完成后才能进入下一阶段,所以过于理想,缺乏灵活性,容易产生需求偏差,导致软件开发完成才发现并非用户所需要的。
快速原型模型
第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么。第二步则在第一步的基础上开发客户满意的软件产品。
优点:减少由于软件需求不明确带来的开发风险,具有显著的效果。
演化模型
快速原型模型在获取真实需求后,将抛弃原型。而演化模型将在快速开发一个原型的基础上,逐步演化成最终的软件。
增量模型
软件被作为一系列的增量构件 来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。
优点:可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。也就是说增量模型有利于快速开发软件。
螺旋模型
综合了瀑布模型和演化模型的优点,还增加了风险分析,特别适合于大型复杂的系统。
喷泉模型
对软件复用和生存期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。
软件开发方法
结构化开发方法
强调系统结构的合理性以及所开发的软件结构的合理性,主要是面向数据流 的,
因此也被称为面向功能的软件开发方法或面向数据流的软件开发方法。
模块化开发方法
把一个待开发的软件系统分解 成若干可单独命名和编址的较为简单的部分(即模块),每个模块分别独立地开发、测试,最后再组装出整个软件系统。
面向对象开发方法
核心思想是利用面向对象的概念和方法为软件需求建立模型,进行系统设计,采用面向对象程序设计语言进行系统实现,对建成的系统进行面向对象的测试和维护。
结构化分析
系统分析是指把要解决的问题作为一个系统,对系统要素进行综合分析,找出解决问题的可行方案的方法。
结构化分析方法(StructuredAnalysis,SA)是面向数据流 的需求分析方法,适用于分析大型数据处理。釆用自顶向下 、逐层分解 ,建立系统的处理流程,以数据流图(Data Flow Diagram,DFD)和数据字典为主要工具,建立系统的逻辑模型。SA方法的分析结果由以下几部分组成:
- 一套分层的数据流图
- 一本数据词典
- 一组小说明
- 补充材料
数据流图
结构化分析是面向数据流进行需求分析 的方法,用来描述数据流从输入到输出的变换流程 。它以图形的方式描绘数据在系统中流动和处理的过程,它只反映系统必须完成的逻辑功能 ,所以是一种功能模型 。
数据字典
数据流图仅描述了系统的"分解",但没有对图中各成分进行说明。数据字典就是用来定义数据流图中的各个成分的含义 的。数据字典有4类条目,包括数据流、数据项、数据存储和基本加工。
系统设计
结构化设计(Structured Design,简称SD)是将结构化分析得到的数据流图映射成软件体系结构的一种设计方法。强调抽象化、模块化、信息隐蔽、模块独立、逐步求精、高内聚低耦合 等设计准则。分为概要设计 和详细设计两大步骤。
独立性由强到弱:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
概要设计
- 设计软件系统总体结构
- 数据结构的设计
- 数据库的设计
- 编写概要设计文档
- 评审
详细设计
- 对每个模块进行详细的算法设计
- 对模块内的数据结构进行设计
- 对数据库进行物理设计
- 其他设计。比如代码设计、用户界面设计、输入输出格式设计。
- 编写详细设计说明书
- 评审
系统开发
敏捷开发
以用户的需求进化 为核心,采用迭代、循序渐进的方法进行软件开发。核心理念就是以最简单有效的方式快速地达成目标,并在这个过程中及时地响应外界的变化,做出迅速的调整。
在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
软件测试
从是否关心软件内部结构和具体实现的角度划分:
- 白盒测试:常见的方法是逻辑覆盖法。
- 黑盒测试:常用的方法包括:等价类划分、边界值分析、错误推测法、因果图、功能图。
从是否执行代码角度:
- 静态测试:仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
- 动态测试:动态测试是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
从软件开发的过程按阶段划分:
- 单元测试:又称模块测试,
- 集成测试:又叫组装测试或联合测试,是单元测试的多级扩展,
- 确认测试:又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。
- 系统测试:为判断系统是否符合要求而对集成的软、硬件系统进行的测试活动
- 验收测试:以用户为主的测试,软件开发人员和质量保证人员参加,由用户设计测试用例。
- 回归测试:改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。
系统维护
软件维护是指因修正错误、提升性能或其他属性而进行的软件修改。分为纠错性维护、适应性维护、增强型维护、预防性维护。
软件管理
软件项目管理:
软件项目管理是软件生存周期中软件管理者所进行的一系列的活动,其目的是在一定的时间和预设的范围内有效地利用人力、资源、技术和工具,使软件系统或产品按照原定的计划和质量要求比如期完成。
有效的软件项目管理集中在4个P上,即人员(Person)、产品(Product)、过程(Procedure)和项目(Project)。
软件评审
软件评审是在软件的生命周期内所实施的对软件本身的评审,是对软件元素或者项目状态的一种评估手段,以确定其是否与计划的结果保持一致,并使其得到改进。
三层架构与MVC
三层架构:表现层、业务逻辑层和数据访问层,区分层次的目的即为了"高内聚低耦合"的思想。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
- M即Model(模型层),主要负责处理业务逻辑以及数据库的交互。
- V即View(视图层),主要负责显示数据和提交数据。
- C即Controller(控制层),主要是用作辅助捕获请求并控制请求转发。