系统分析与设计/引言
企业和组织使用各种类型的信息系统来支持其业务职能所需的许多流程。这些信息系统中的每一个都有特定的目的或重点,每一个都有自己的生命周期。这个“生命周期”的概念被称为系统开发生命周期或SDLC,它包括计划、构建、部署、使用、更新和维护信息系统的整个过程。新信息系统的开发涉及几个不同但相关的活动。这些活动或阶段通常包括规划、分析、设计、实施和维护/支持。换句话说,SDLC 是一个概念模型,它指导信息系统开发中的项目管理。[1]
根据作者 Harold Kerzner 博士的说法,有十六个要点将导致项目管理成熟度
- 采用项目管理方法并始终如一地使用它。
- 实施一种推动组织走向项目管理成熟度的理念,并将其传达给每个人。
- 承诺在每个项目开始时制定有效的计划。
- 通过承诺现实的目标来尽量减少范围变更。
- 认识到成本和进度管理是不可分割的。
- 选择合适的人担任项目经理。
- 为高管提供项目赞助商信息,而不是项目管理信息。
- 加强所有适当管理层的参与和支持。
- 关注可交付成果,而不是资源。
- 培养有效的沟通、合作和信任。
- 分享项目成功的认可。
- 消除无效率的会议。
- 专注于尽早、快速、经济有效地识别和解决问题。
- 定期衡量进度。
- 使用项目管理软件作为工具;不要将其作为有效规划或人际交往能力的替代品。
- 建立所有员工培训计划,并根据记录的经验教训定期更新。
正如 NIST(国家标准与技术研究院)指出的那样,在 SDLC 的早期包含安全通常会导致比将其添加到运行系统中成本更低且更有效的安全。在确定系统所需的安全性控制时,应解决以下问题
- 系统在实现组织使命中的重要程度如何?
- 系统所需的安全性目标是什么,例如机密性、完整性和可用性 (CIA)?
- 机密性是指将信息访问限制为仅授权用户——“合适的人”——并防止未经授权的人员——“不合适的人”——访问。
- 完整性是指信息资源的可信度。它包括“数据完整性”的概念——即数据没有被不适当地更改,无论是意外还是故意恶意活动。它还包括“来源”或“来源完整性”——即数据确实来自您认为的那个人或实体,而不是冒名顶替者。
- 可用性是指信息资源的可用性。当您需要它时不可用的信息系统几乎与没有信息系统一样糟糕。
- 哪些法规和政策适用于确定要保护的内容?
- 系统将在其运行的环境中适用的威胁有哪些?
将安全纳入 SDLC(NIST 特别出版物 800-64 修订版 2))
本节介绍了一些安全性注意事项,这些注意事项将有助于将信息安全集成到 SDLC 的每个阶段。
规划
在开发生命周期的第一阶段,安全性考虑对于尽早集成至关重要,从而确保考虑威胁、要求和功能和集成方面的潜在约束。在这一点上,安全性更多地从业务风险的角度来看待,并得到信息安全办公室的意见。例如,一个机构可能会发现由于重要网站在关键业务期间被修改或变得不可用而导致的政治风险,从而导致公民信任度下降。该阶段的关键安全活动包括
- 从机密性、完整性和可用性的角度对业务要求进行初步界定;
- 确定信息分类并识别已知的特殊处理要求,以传输、存储或创建信息,例如个人身份信息;以及
- 确定任何隐私要求。
分析
本节探讨了 SDLC 第二阶段特有的安全性考虑因素。该阶段的关键安全活动包括
- 进行风险评估并使用结果补充基线安全性控制;
- 分析安全性要求;
- 执行功能和安全性测试;
- 准备系统认证和授权的初始文档;
虽然本节以自上而下的顺序介绍了信息安全组件,但完成顺序不一定固定。复杂系统的安全性分析需要迭代,直到实现一致性和完整性。
设计
在 SDLC 的此阶段,设计安全性架构。
实施
在此阶段,系统将在组织的操作环境中安装和评估。该阶段的关键安全活动包括
- 将信息系统集成到其环境中;
- 计划和执行系统认证活动,与安全性控制测试同步;以及
- 完成系统授权活动。
维护/支持
在此阶段,系统已到位并运行,对系统的增强和/或修改已开发和测试,以及硬件和/或软件已添加或更换。根据安全性要求监控系统以确保其持续性能,并将必要的系统修改纳入其中。定期评估运行系统,以确定如何使系统更有效、更安全和更高效。操作持续进行,只要系统能够有效地适应以响应组织的需求,同时保持商定的风险水平。当发现必要的修改或更改时,系统可能会重新进入 SDLC 的先前阶段。该阶段的关键安全活动包括
- 进行运行就绪审查;
- 管理系统的配置;
- 建立流程和程序以确保操作和持续监控信息系统的安全性控制;以及
- 根据需要执行重新授权。
处置 通常,系统没有明确的结束。由于需求的变化或技术进步,系统通常会演变或过渡到下一代。系统安全计划应随着系统不断发展。许多环境、管理和运营信息仍然相关且有用,可用于为后续系统开发安全计划。处置活动确保系统有序终止并保留有关系统的关键信息,以便在必要时,可以重新激活部分或全部信息。特别强调正确保存系统处理的数据,以便根据适用的记录管理法规和政策,将数据有效地迁移到另一个系统或存档,以便将来访问。该阶段的关键安全活动包括
- 构建和执行处置/过渡计划;
- 关键信息的存档;
- 介质的消毒;以及
- 处置硬件和软件。
系统规划需要用户定义问题是什么。规划可能还包括用户希望如何解决问题。在这一阶段,定义问题的范围也很重要。定义范围有助于防止项目出现范围蔓延。确定问题并选择一种或多种解决方案后,就开始规划实施解决方案。可以制定多个方案来确定实施系统的最佳行动方案。
行动方案应记录完整,并考虑以下因素:展示实现目标的预期活动(里程碑)的开始时间和完成时间的时间表,了解实现目标所需的支出,安排定期状态审查(我们是否按计划进行?),预计任何组织结构调整以适应目标,预计并规划风险缓解措施,这些风险可能会阻碍目标的实现,实施决策的政策和程序,以及定义性能标准。
在约翰·萨辛格的“五项主要活动必须存在”的规划中,正如他在书中解释的那样,五项活动应包括
- 定义问题
- 制定项目计划
- 确认项目可行性
- 为项目配备人员
- 启动项目[3]
为什么计划会失败?许多原因包括
- 目标/规范未被理解。
- 目标过于庞大,无法在分配的时间内完成。
- 预算不准确。
- 项目人员不足或技能不足。
- 未安排状态审查或审查不足。
- 士气低落(没有承诺)。
规划中最困难的决定之一是知道何时停止一个项目。这将需要有效的控制和监控系统。如果你无法监控一个系统,你就无法控制它。没有哪个组织愿意承认失败,但可能在某个时刻,一个项目将无法挽救。这对于信息技术项目尤其重要,因为技术发展迅速。大多数经理不愿过早终止项目,因为职业生涯和自尊心都岌岌可危。沉没成本谬误也可能起作用。结果是项目继续进行,直到无法挽回。为了避免这个问题,必须在规划阶段初期就建立监控和控制系统。至关重要的是,要定义并执行里程碑,如果必要,项目将在里程碑处终止。令人欣慰的是,即使项目被终止,也不意味着它完全失败。组织可以节省过高的成本,管理层可以吸取教训,并将其应用于下一个项目。一般来说,有两种类型的监控:“非正式”和“正式”。非正式通常是普通会议、电子邮件和观察。正式包括状态报告、计划里程碑、审计、审查和基准测试。正式审查通常成本更高,并在系统开发过程中使用。这两种系统可以组合使用,并涉及以下问题:“使用哪些性能指标?”和“审查多久进行一次?”?必须集中精力识别和纠正失控流程。
分析
[edit | edit source]分析阶段涉及收集系统需求。在这个阶段,研究业务需求,旨在提高业务流程效率。系统分析阶段侧重于系统将做什么,这种努力将所有利益相关者视为可行的信息来源。在分析阶段,大量时间用于与利益相关者交谈并审查利益相关者的意见。IT 项目的常见利益相关者包括
- 架构办公室
- 测试与认证办公室
- 记录管理团队
- 应用程序支持组
一旦识别出利益相关者,就可以开始收集和分析需求。需求收集必须与业务需求或机会相关。需求分析涉及捕获需求和分析需求。捕获需求是指与利益相关者沟通,以就需求达成一致。分析需求是指使用标准工具来生成需求基线。一旦利益相关者对需求达成一致,就创建基线,并将其作为正式的需求来源。[4]
在这个分析阶段,分析师正在发现和收集事实。除了与利益相关者会面外,分析师还必须与最终用户会面,以了解用户的需求,并了解影响当前系统的问题,以便协助设计新的、更有效的系统。分析阶段必须进行以下几项活动:[5]
- 收集信息
- 定义新系统的需求
- 为新系统构建原型
- 确定需求优先级
- 评估备选方案
- 与管理层会面,讨论新的选择方案
设计
[edit | edit source]设计阶段涉及系统的物理构建。包括网络(硬件、操作系统、编程等)的设计或配置,用户界面(表单、报表等)的设计,系统界面(与其他系统通信)的设计,以及安全问题。重要的是,要对拟议的设计进行性能测试,并确保它满足分析阶段概述的需求。换句话说,这个阶段的主要目标是将先前定义的需求转换为完整且详细的规范集,这些规范将在下一阶段使用。设计阶段需要进行以下一些活动:
- 设计应用程序
- 设计和集成网络
- 设计和集成数据库
- 创建应急计划
- 启动维护、培训和运营计划
- 审查设计
- 阐明业务流程和程序
- 建立过渡策略
- 交付系统设计文档
- 审查最终设计
实施
[edit | edit source]启动一个项目首先需要记录需求。应该从这项研究中制定明确的目标,并说明选择目标的原因。然后需要记录交付成果以及项目范围。在初始化过程中可以完善范围。还应记录假设和约束。所有利益相关者都应参与此过程。这些信息将成为项目的章程,也是启动项目的依据。然后,项目遵循计划-执行-检查-行动循环(由休哈特定义,并由戴明修改,在 ASQ 手册中,第 13-14 页,美国质量协会,1999 年)。每个循环的结果将作为输入链接到下一个循环。此过程应提高交付成果被接受的可能性。
为了实现交付成果的接受和目标的实现,必须对正在构建的新系统进行测试。与之相一致的是,必须对最终用户进行全面培训,以便公司能够从新系统中获益。在实施阶段必须执行以下五项活动:[6]
- 构建软件组件
- 验证和测试
- 转换数据
- 培训最终用户并记录系统
- 安装系统
维护/支持
[edit | edit source]维护和支持涵盖系统到位后所需的所有活动。活动包括但不限于
- 用户电话支持
- 现场用户物理支持
- 解决新系统可能出现的任何问题
- 为用户提供支持材料/工具
所需的支持量可能取决于系统。如果它是一个涉及多个不同部门的大型系统,则可能需要更长时间的维护和支持。如果它是一个较小的系统,则可能只需要很短时间的维护和支持。
系统开发方法
[edit | edit source]本节讨论开发基于计算机的信息系统的最流行方法。一种流行的传统方法称为结构化分析,但一种称为面向对象分析和设计的新策略也被广泛使用。每种方法都有许多变体。一些组织开发自己的方法,或采用软件供应商或顾问提供的方法。大多数 IT 专家同意,不存在单一的最佳系统开发策略。相反,系统分析师应该了解替代方法及其优缺点。
结构化分析
结构化分析是一种传统的系统开发技术,经受住了时间的考验,易于理解。因为它描述了将数据转换为有用信息的流程,所以结构化分析被称为以流程为中心的技术。除了对流程建模之外,结构化分析还包括数据组织和结构、关系数据库设计以及用户界面问题。结构化分析使用一系列称为系统开发生命周期 (SDLC) 的阶段来规划、分析、设计、实施和支持信息系统。结构化分析依赖于一组以图形方式描述系统的流程模型。流程建模识别流入流程的数据、转换数据的业务规则以及产生的输出数据流。
结构化分析方法需要开发者定义三个方面:1) 系统需要进行的处理;2) 系统需要存储的数据;3) 系统整体运行所需输入和输出。为了了解所有这些功能如何协同工作,需要数据流图 (DFD) 来展示输入、处理存储和输出。[7]
面向对象分析
结构化分析将过程和数据视为独立的组件,而面向对象分析将作用于数据的过程和数据组合成称为对象的实体。面向对象分析定义了执行工作并相互交互的不同类型的对象,并展示了完成任务所需的用户交互,称为用例。系统分析师使用 O-O 方法来模拟现实世界的业务流程和操作。结果是一组代表实际人员、事物、交易和事件的软件对象。使用 O-O 编程语言,程序员将这些对象转换为可重用的代码和组件。
O-O 分析使用对象模型来表示数据、行为以及对象如何影响其他对象。通过描述支持业务运营所需的对象(数据)和方法(过程),系统开发人员可以设计可重用的组件,从而实现更快的系统实施和降低开发成本。许多分析师认为,与结构化分析相比,O-O 方法在当今动态的商业环境中更灵活、高效且更现实。面向对象方法有很多好处,它们提供了自然性和可重用性。这种方法很自然,因为人们倾向于用有形的对象来思考事物,并且因为组织内的许多系统使用相同的对象(例如窗口、对话框、菜单和按钮),因此可以重复使用这些类。[8]此外,O-O 分析为流行的 O-O 编程语言(如 Java 和 C++)提供了轻松的过渡。
其他开发策略
除了结构化分析和 O-O 方法之外,还有其他由各个公司创建的系统开发技术。例如,微软开发了一种称为 Microsoft Solutions Framework (MSF) 的方法。使用 MSF,您可以设计一系列模型,包括风险管理模型、团队模型,每个模型都有特定的目的和输出,这些输出有助于系统的整体设计。尽管微软流程与 SDLC 阶段导向方法不同,但 MSF 开发人员执行相同类型的计划、提出相同类型的事实调查问题、处理相同类型的设计和实施问题,并解决相同类型的问题。MSF 使用 O-O 分析和设计概念,但还考察了围绕信息系统开发的更广泛的业务和组织环境[9]。
临时的
[edit | edit source]临时的,是指可以用于完成特定任务的东西,但使用的方法无法用于其他过程。就像即兴工作一样,不需要进行重大规划。整个项目无法以这种程度运作。可以使用模板来创建项目,但使用临时的,这是不可能的。总的来说,术语“临时的”意味着仅用于此目的。
结构化/瀑布
[edit | edit source]瀑布模型是系统开发生命周期方法的流行版本,它被认为是在软件工程预测/自适应尺度上最左边的模型。瀑布模型通常被认为是系统开发生命周期的经典方法(主要是预测性的),它描述了一种线性且顺序的开发方法。瀑布开发为开发的每个阶段都设定了明确的目标。完成一个开发阶段后,开发过程将继续(从瀑布中落下)进入下一阶段,并且不能回头。
瀑布开发的优点是它允许部门划分和管理控制。可以设置时间表,为每个开发阶段设定截止日期,产品可以通过开发过程像汽车一样在洗车场中移动,理论上可以按时交付。开发从概念开始,经过设计、实现、测试、安装、故障排除,最终进入运营和维护。每个开发阶段都按严格的顺序进行,没有任何重叠或迭代步骤。
瀑布开发的缺点是它不允许进行太多反思或修订。一旦应用程序进入测试阶段,就很难返回并更改在概念阶段没有经过深思熟虑的内容。这种纯粹的瀑布模型使得很难做到这一点,因为没有出错的余地,而这在处理人类时实际上是不可能的。
但是,在预测/自适应尺度的右侧,我们能够在不同的阶段进行修改;这被称为修改后的瀑布模型。在修改后的瀑布模型中,项目的阶段将重叠,相互影响和依赖。例如,如果分析阶段完成,项目进入设计阶段,但分析阶段的要求遗漏了一些内容,使得在设计阶段难以实施,则需要添加额外的项目管理任务,从而导致重叠。
效率是重叠发生的另一个原因。一些活动依赖于先前工作的成果。在项目规划阶段,可能需要添加一些额外的项目管理任务,在分析阶段,可能需要添加额外的分析活动,在设计阶段,可能需要添加额外的设计活动。基本上,修改后的瀑布模型是一个更有效的模型。如今,许多信息系统和项目都是基于修改后的瀑布模型[10]。
原型设计
[edit | edit source]原型设计是构建系统模型的过程。就信息系统而言,原型设计用于帮助系统设计人员构建一个对最终用户来说直观易操作的信息系统。原型设计是一个迭代过程,是系统开发生命周期分析阶段的一部分。
在这个分析阶段,原型设计通常被称为发现原型,非常重要,因为它旨在了解用户的需求。[11]原型并非为了实现完整的功能而构建,而是为了查看原型是否能够实现企业试图实现的目标。有时,最终用户试图改进业务流程或简化流程。无论如何,通过使用试用报告和屏幕,分析师可以向最终用户解释如何更新和改进其业务流程。如果企业决定实施新技术,那么发现原型设计可以帮助确定是否实施新技术,以及新技术是否与企业的业务需求相符或是否可行。
原型设计有多种形式 - 从低技术含量的草图或纸质屏幕(Pictive)开始,用户和开发人员可以在其中粘贴控件和对象,到使用 CASE(计算机辅助软件工程)或第四代语言构建的高科技操作系统,以及介于两者之间的所有形式。
原型设计的优点包括;
- 缩短开发时间和成本
- 用户参与
- 可量化的用户反馈
- 促进系统实施
- 更高的用户满意度
- 向开发人员展示未来潜在的增强功能
另一方面,缺点包括;
- 分析不足
- 用户期望最终系统的性能与原型相同
- 在最终产品发布之前就实施的诱惑
- 开发人员对原型的依赖
- 文档不完整
原型设计的最佳理由是它允许程序员与客户合作,以确保系统能够满足客户的期望。然而,这是一把双刃剑。问题是,大多数情况下,原型是一种笨拙、快速解决问题的方法,通常需要进行重大重建,而且大多数程序员对抛弃自己的代码以采用新的简化方法犹豫不决。因此,最终得到的代码会包含一个接一个的补丁,难以维护。此外,在原型设计过程中与客户的来回沟通可能会导致项目范围蔓延。每次你以为自己完成了,就会有一些改进或新功能被提出来。这将阻止项目签署。为了避免这种情况,请确保存在项目计划,其中指定了迭代次数,并为添加新功能设定了截止日期。
增量/迭代
[edit | edit source]增量方法是将项目划分为多个[尽可能]独立的部分,并以相同/不同的速度开发这些子部分,并在准备好时集成它们。例如,开发一个社交网站,包含会员注册、登录、忘记密码、会员资料、搜索会员、好友列表、博客、博客搜索、照片、照片搜索和消息等功能。根据产品所有者的需求,开发团队可以从会员注册、登录、会员资料和搜索会员开始。这些部分可以在准备好后完成并集成到一个公共存储库中。一旦这些部分准备好,就选择下一个部分。也可以同时处理所有部分,并在准备好后将它们集成到中央存储库中。[13]
根据 Alistair Cockburn 的说法,迭代开发是一种重新安排工作时间的方法,其中预留时间来修改和改进系统的一部分。[14]
螺旋模型
[edit | edit source]螺旋模型是 SDLC 中较新的自适应方法之一。基本上,自适应方法是一种开发方法,它将包括在项目进行过程中调整的计划和模型等项目活动。螺旋模型包含几个自适应特性,这些特性将在项目的开发过程中反复循环,直到项目完成。[15]
螺旋生命周期以螺旋模型的形式显示,该模型从螺旋的中心(向内)开始,首先是规划阶段,最终以螺旋状向外展开,反复循环,直到项目完成。规划阶段将包括诸如可行性研究、用户需求调查、总体设计选择、生成实现方案和实现策略等活动。该阶段的目的是获得足够的信息来构建原型。
快速应用开发(RAD)
[edit | edit source]快速应用开发利用工具来促进系统开发,以满足激进的时间线。[1] 关键重点是重复使用已创建的工作模型[原型/模型/用户界面/线框][2] 关键目标是减少花在分析上的时间,这是通过使用工作模型进行设计来实现的
敏捷开发方法
[edit | edit source]建模
[edit | edit source]建模有助于更好地理解需求。可视化建模帮助我们理解和组织复杂的努力。符号在任何模型中都扮演着重要角色。据说,如果你不能记录你的工作成果,你很可能会失败。统一建模语言 (UML) 提供了一种非常强大的符号,它从分析到设计不断发展。它是一种用于指定、可视化和记录正在开发的面向对象系统的成果的语言。你可以使用 UML 对在任何类型的硬件、操作系统、编程语言和网络上运行的任何类型的应用程序进行建模。它是面向对象语言和环境的自然选择,但你也可以用它来对非面向对象的应用程序进行建模。
面向对象开发
[edit | edit source]在编码之前,应该对伪代码、算法和要使用的高级语言(C、C++、C#、Java 等)有一个了解。这将帮助你设计一个用于特定目的的系统。现代编程通常需要面向对象的方法来进行软件开发。面向对象开发试图利用对象的分类、关系和属性来帮助程序开发。对象可以是任何物品或概念。对象包含属性和操作,它们相互作用以满足特定的需求。属性是与对象相关的属性,而操作是对象可以执行的方法或动作,以修改自身或数据。对对象中数据的访问只能通过对象的称为对象接口的操作来实现。对象的函数绑定到它使用的数据。你可以轻松地更改控制对象实现方式的细节,以提高性能、添加新功能或修复错误,而无需更改接口。这使得项目的其他部分可以访问对象并保持不变。
目标
[edit | edit source]概述
[edit | edit source]本书分为 5 个主要单元
问题
[edit | edit source]信息系统的技术需求类别有哪些?
关键词
[edit | edit source]参考文献
[edit | edit source]- ↑ Satzinger, J. W., Jackson, R. B., & Burd, S. (2007). Systems Analysis & Design In A Changing World, Fourth Edition. Boston: Thomson Course Technology.
- ↑ Kerzner, H. (2006). Project Management - A Systems Approach to Planning, Scheduling, and Controlling
- ↑ 系统分析与设计第 5 版
- ↑ 农业服务局企业架构
- ↑ Satzinger、Jackson、Burd,《系统分析与设计:在变革世界中的应用》;第五版
- ↑ Satzinger、Jackson、Burd,《系统分析与设计:在变革世界中的应用》;第五版
- ↑ Satzinger、Jackson、Burd;《系统分析与设计:在变革世界中的应用》;第五版
- ↑ Satzinger、Jackson、Burd;《系统分析与设计:在变革世界中的应用》;第五版
- ↑ 系统分析与设计第 5 版
- ↑ Satzinger、Jackson、Burd,《系统分析与设计:在变革世界中的应用》;第五版
- ↑ Satzinger、Jackson、Burd;《系统分析与设计:在变革世界中的应用》;第五版
- ↑ http://www.umsl.edu/~sauterv/analysis/prototyping/proto.html
- ↑ http://www.agilecollab.com/incremental-and-iterative-software-development
- ↑ http://alistair.cockburn.us/Incremental+versus+iterative+development#discussion
- ↑ Satzinger、Jackson、Burd;《系统分析与设计:在变革世界中的应用》;第五版