软件生命周期
软件生命周期(Software Development Life Cycle, SDLC)是指从软件产品构思开始直到其不再使用的整个时间段内的一系列阶段。这些阶段覆盖了软件开发过程的所有方面,包括需求分析、设计、实现、测试、部署和维护等。
软件生命周期可以分为几个主要阶段:
- 项目规划:
- 在这个阶段确定项目的范围,评估资源需求,并制定项目计划。
- 这包括定义项目目标、里程碑和交付时间表。
- 需求分析:
- 收集并分析用户的需求,明确软件的功能和性能需求。
- 创建需求规格说明书,作为后续设计和开发的基础。
- 设计:
- 根据需求分析的结果设计软件架构和系统设计。
- 包括总体设计和详细设计两个部分,确保软件的结构能够满足需求。
- 实现/编码:
- 开发人员根据设计文档编写代码。
- 通常会采用模块化的方式进行开发,便于测试和维护。
- 测试:
- 对软件进行各种类型的测试,例如单元测试、集成测试、系统测试和验收测试。
- 目的是找出并修复软件中的缺陷和错误。
- 部署/实施:
- 将软件发布给最终用户。
- 可能涉及安装配置、数据迁移和培训等工作。
- 维护:
- 软件上线后需要持续进行维护,修复新发现的问题,改进功能,适应新的技术或业务需求。
- 维护阶段可能持续很长时间,直到软件被替换或退役。
- 退役:
- 当软件不再满足业务需求或技术要求时,可能会被新的软件所替代。
- 这个阶段涉及到软件的下线、数据归档或转移等工作。
每个组织可能会根据自己特定的需求和流程定制不同的软件生命周期模型,常见的模型有瀑布模型、迭代模型、敏捷开发模型等。
软件开发模型
敏捷开发(Agile Development)是一种以用户需求进化为核心、迭代发布的开发方法。它的出现是为了应对传统瀑布模型中的一些不足之处,特别是当需求变化频繁时,瀑布模型难以适应。敏捷开发强调团队合作、客户协作、响应变化和快速交付。
敏捷开发的主要特点包括:
- 迭代和增量开发:软件被分成若干个小的部分,每一部分在短周期内完成,然后发布给客户以收集反馈。这种迭代方式使得开发团队可以及时调整方向,确保产品的价值最大化。
- 用户参与:用户(通常是产品的最终用户或者代表用户利益的产品负责人)积极参与到整个开发过程中,确保产品能够满足用户的真实需求。
- 团队协作:强调跨职能团队之间的密切合作,鼓励团队成员之间的开放沟通,促进知识共享。
- 适应性规划:虽然有总体计划,但是计划会随着项目的进展而不断调整。敏捷方法认为计划应当是灵活的,以应对不断变化的需求。
- 持续改进:在每个迭代周期结束后,团队都会评估工作流程的有效性,并寻找改进的机会。
- 简化:敏捷开发鼓励简化复杂度,关注最有价值的功能优先开发。
- 质量保证:持续集成和测试是敏捷开发的重要组成部分,目的是尽早发现并解决问题。
- 响应变化:敏捷开发重视响应变化胜过遵循计划,这意味着即使是在后期阶段,也能接受变更请求。
敏捷开发有许多不同的框架和实践,其中最著名的包括 Scrum、Kanban、XP(极限编程)、Crystal 等。每个框架都有自己独特的方法和实践,但它们都遵循敏捷宣言的原则:
- 我们最重要的目标,是通过尽早地、持续地交付有价值的软件来使客户满意。
- 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化的优势来为客户创造竞争优势。
- 频繁地交付可以工作的软件,间隔可以从几个星期到几个月,交付的时间间隔越短越好。
- 业务人员和开发人员必须每天共同工作。
- 激发个体和互动。构建项目的内外部团队氛围。
- 可工作的软件是进度的首要度量标准。
- 敏捷过程倡导可持续开发。责任人、开发人员和用户应该能够保持恒久的工作节奏。
- 坚持不懈地追求技术卓越和良好设计以增强敏捷能力。
- 简洁是必不可少的。
- 最佳的构架、需求和设计出自自组织团队。
- 团队定期反思如何更有效地工作,并相应地调整自身的行为。
软件性能测试
| 性能测试的类型 |
| 性能测试类型包括负载测试、强度测试和容量测试等。 |
| (1)负载测试:负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。 |
| (2)强度测试:强度测试是在系统资源特别低的情况下考查软件系统运行情况。 |
| (3)容量测试:确定系统可处理的同时在线的最大用户数。 |
软件开发模型
https://blog.csdn.net/lonelymanontheway/category_10805425.html
软件产品从形成概念开始,经过开发、使用和维护,直到最后退役的全过程,叫软件生存周期模型,又叫软件开发方法、软件开发模型(Software Develop Model)、软件过程模型 (Software Process Model)
大体来说,有3类:
- 软件需求完全确定为前提,可以采用瀑布模型;
- 软件开发初期阶段只能提供基本需求,可以采用迭代式或渐进式模型,如喷泉模型,螺旋模型、统一开发过程和敏捷方法、极限编程。开发人员对算法的效率,操作系统的兼容性和人机交互的形式不明确等情况下,快速原型开发
- 形式化为基础的变换模型
原型模型
又称快速原型模型,是快速建立起来的可以在计算上运行的程序,是软件的一个早期可运行的版本,它的功能是最终产品的子集。用途主要是获取用户的真正的需求。
原型模型主要有两个阶段:
- 原型开发阶段。软件开发人员根据用户提出的软件系统的定义,快速地开发一个原型。该原型应该包含目标系统的关键问题和反映目标系统的大致面貌,展示目标系统的全部或部分功能、性能等
- 目标软件开发阶段。在征求用户对原型的意见后对原型进行修改完善,确认软件系统的需求并达到一致的理解,进一步开发实际系统
瀑布模型
特点:
阶段间具有顺序性和依赖性,前一阶段结束后才能开始后一阶段的工作,前一阶段的输出是后一阶段的输入;推迟实现观点,尽可能推迟程序的物理实现;强调质量保证观点,每个阶段必须完成规定的文档,每个阶段结束前完成文档以便及早改正错误。
瀑布模型可以说是最早使用的软件生存周期模型之一。由于这个模型描述软件生存的一些基本过程活动,所以它被称为软件生存周期模型。这些活动从一个阶段到另一个阶段逐次下降,形式上很像瀑布。瀑布模型的特点是因果关系紧密相连,前一个阶段工作的结果是后一个阶段工作的输入。
每一个阶段都是建立在前一个阶段的正确结果之上,前一个阶段的错误和疏漏会隐蔽地带入后一个阶段。这种错误有时甚至可能是灾难性的,因此每一个阶段工作完成后,都要进行审查和确认。
优点:
- 原理简单,容易掌握
- 各阶段间都有验证和确认环节,以便进行质量管理
- 主要用于支持结构化方法
缺点:
- 缺乏灵活性,不能适应用户的需求变化
- 缺乏演化性,返回上一级的开发需要付出十分高昂的代价
- 是线性的软件开发模型,回溯性差
渐增模型
也叫增量模型,其实质上是分段的线性模型,是一种非整体开发模型,渐增模型把软件产品作为一系列增量构件来设计、编码、集成和测试,在项目开发过程中以一系列的增量方式来逐步开发系统。
优点:
- 可分批次提交软件产品,方便用户及时了解软件开发进展情况,及早发现问题
- 以组件为单位进行开发,降低软件开发风险
- 开发顺序灵活,优先级最高的服务首先交付
缺点:
- 由于对整个软件系统的需求没有一个完整的定义,会给总体设计带来麻烦
- 在把每个新的增量构件集成到现有软件结构中时,必须不破坏原来已开发出的产品
- 软件的体系结构必须是开放的,即向产品中加入新构件的过程必须简单、方便。每次增量开发的产品都应当是可测试的,可扩充的
适用场合:
- 软件产品可以分批次地进行交互
- 待开发的软件系统能够被模块化
- 软件开发人员对应用领域不熟悉、难以一次性地进行软件开发时
- 项目管理人员把握全局的水平较高时
- 对软件需求把握不准确、设计方案有一定风险的项目
螺旋模型
螺旋模型是在结合瀑布模型与快速原型模型基础上演变而成,加入风险分析。
软考很恶心的地方在于抠字眼(单选题):
- 有瀑布和原型两个选项,选择原型
- 有快速、原型、瀑布三个选项,选择快速
其基本思想,使用原型及其它方法来尽量降低风险。沿着螺线进行若干次迭代。两个显著特点:
- 采用循环的方式逐步加深系统定义和实现的深度,降低风险
- 确定一系列里程碑,确保项目开发过程中的相关利益者都支持可行的和令人满意的系统解决方案
形式化方法
形式化方法是一种具有坚实数学基础的方法,从而允许对系统和开发过程做严格处理和论证,适用于那些系统安全级别要求极高的软件的开发。
主要优越性:能够数学(精确)地表述和研究应用问题及软件实现。
但是它要求开发人员具备良好的数学基础。用形式化语言书写的大型应用问题的软件规格说明往往过于细节化,并且难以为用户和软件设计人员所理解。由于这些缺陷,形式化方法在目前的软件开发实践中并未得到普遍应用。
敏捷方法
目标:尽可能早地、持续地对有价值的软件的交付
1.极限编程–XP
价值观:沟通、简单、反馈、勇气
原则:快速反馈,简单性假设,逐步修改,提倡更改和优质工作
2.水晶法(Crystal)
水晶法认为每个不同的项目都需要不通的策略、约定和方法论,认为人对软件质量有重要的影响,软件质量随开发人员素质的提高而提高
3.并列争求法(Scrum)
用迭代的方法,把每30天一次的迭代看做一次冲刺,并按需求的优先级来实现产品
企业集成
- 企业信息集成是一个十分复杂的问题,按照组织范围来分,分为企业内部的信息集成和外部的信息集成两个方面。
- 1.企业内部的信息集成
- 按集成内容,企业内部的信息集成一般可分为以下四个方面:
- (1)技术平台的集成
- 系统底层的体系结构、软件、硬件以及异构网络的特殊需求首先必须得到集成。这个集成包括信息技术硬件所组成的新型操作平台,如各类大型机、小型机、工作站、微机、通信网络等信息技术设备,还包括置入信息技术或者说经过信息技术改造的机床、车床、自动化工具、流水线设备等新型设施和设备。
- (2)数据的集成
- 为了完成应用集成和业务流程集成,需要解决数据和数据库的集成问题。数据集成的目的是实现不同系统的数据交流与共享,是进行其他更进一步集成的基础。数据集成的特点是简单、低成本,易于实施,但需要对系统内部业务的深入了解。
- 数据集成是对数据进行标识并编成目录,确定元数据模型。只有在建立统一的模型后,数据才能在数据库系统中分布和共享。数据集成采用的主要数据处理技术有数据复制、数据聚合和接口集成等。
- (3)应用系统的集成
- 应用系统集成是实现不同系统之间的互操作,使得不同应用系统之间能够实现数据和方法的共享。它为进一步的过程集成打下了基础。
- (4)业务过程的集成
- 对业务过程进行集成的时候,企业必须在各种业务系统中定义、授权和管理各种业务信息的交换,以便改进操作、减少成本、提高响应速度。业务流程的集成使得在不同应用系统中的流程能够无缝连接,实现流程的协调运作和流程信息的充分共享。
配置库
配置库有三种:开发库、受控库、产品库。
信息系统项目完成后,最终产品或项目成果应置于产品库内,当需要在此基础上进行后续开发时,应将其转移到受控库后进行。
电子政务与电子商务
B2B:企业与企业之间通过互联网进行产品、服务及信息的交换
B2C:是指企业直接面向消费者提供商品或服务
G2E:指政府(Government)与政府公务员即政府雇员(Employee)之间的电子政务
G2B:是指政府(Government )与企业(Business)之间的电子政务
软件集成测试
软件集成测试也称为组装测试、联合测试(对于子系统而言,则称为部件测试)。它将已通过单元测试的模块集成在一起,主要测试模块之间的协作性。从组装策略而言,可以分为一次性组装测试和增量式组装(包括自顶向下、自底向上及混合式)两种。集成测试计划通常是在软件概要设计阶段完成的,集成测试一般采用黑盒测试方法。一般来说:单元测试所对应的是详细设计环节;
集成测试对应概要设计;
系统测试,就是根据需求分析;验收测试与用户需求对应,是非设计流程。
- UML中将各种事物构造块归纳成了以下4类。
- (1)结构事物:UML的静态部分,用于描述概念或物理元素。包含包括类、对象、接口、用例、协作、构件、节点等。
- (2)行为事物:UML的动态部分,描述一种跨越时间、空间的行为。行为事物包括交互、状态机等。
- (3)分组事物:类的分组。
- (4)注释事物:注释图形。
软件文档是影响软件可维护性的决定因素。软件系统文档可以分为用户文档和(系统文档)两类。其中,用户文档主要描述(系统功能)和使用方法,并不关心这些功能是怎样实现的。