系统分析与设计(一)

软件工程的定义

软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率 。

解释导致 software crisis 本质原因、表现,述说克服软件危机的方法

软件危机

软件危机(software crisis)是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

软件危机的本质原因

  1. 用户需求不明确
  • 在软件开发出来之前,用户自己也不清楚软件开发的具体需求。
  • 用户对软件开发需求的描述不精确,可能有遗漏、有二义性、甚至有错误。
  • 在软件开发过程中,用户还提出修改软件开发功能、界面、支撑环境等方面的要求。
  • 软件开发人员对用户需求的理解与用户本来愿望有差异。
  1. 缺乏正确的理论指导
  • 由于软件开发不同于大多数其他工业产品,其开发过程是复杂的逻辑思维过程,其产品极大程度地依赖于开发人员高度的智力投入。
  • 由于过分地依靠程序设计人员在软件开发过程中的技巧和创造性,加剧软件开发产品的个性化,也是发生软件开发危机的一个重要原因。
  1. 软件开发规模越来越大
  • 大型软件开发项目需要组织一定的人力共同完成,而多数管理人员缺乏开发大型软件开发系统的经验,而多数软件开发人员又缺乏管理方面的经验。
  • 各类人员的信息交流不及时、不准确、有时还会产生误解。
  • 软件开发项目开发人员不能有效地、独立自主地处理大型软件开发的全部关系和各个分支,因此容易产生疏漏和错误。
  1. 软件开发复杂度越来越高
  • 软件开发产品的特殊性和人类智力的局限性,导致人们无力处理“复杂问题”。
  • 所谓“复杂问题”的概念是相对的,一旦人们采用先进的组织形式、开发方法和工具提高了软件开发效率和能力,新的、更大的、更复杂的问题又摆在人们的面前。

软件危机的表现

  1. 软件开发进度难以预测
  • 拖延工期几个月甚至几年的现象并不罕见,这种现象降低了软件开发组织的信誉。
  1. 软件开发成本难以控制
  • 投资一再追加,令人难于置信。往往是实际成本比预算成本高出一个数量级。
  • 而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而不可避免地会引起用户的不满。
  1. 用户对产品功能难以满足
  • 开发人员和用户之间很难沟通、矛盾很难统一。往往是软件开发人员不能真正了解用户的需求,而用户又不了解计算机求解问题的模式和能力,双方无法用共同熟悉的语言进行交流和描述。
  • 在双方互不充分了解的情况下,就仓促上阵设计系统、匆忙着手编写程序,这种"闭门造车"的开发方式必然导致最终的产品不符合用户的实际需要。
  1. 软件产品质量无法保证
  • 系统中的错误难以消除。软件是逻辑产品,质量问题很难以统一的标准度量,因而造成质量控制困难。
  • 软件产品并不是没有错误,而是盲目检测很难发现错误,而隐藏下来的错误往往是造成重大事故的隐患。
  1. 软件产品难以维护
  • 软件产品本质上是开发人员的代码化的逻辑思维活动,他人难以替代。除非是开发者本人,否则很难及时检测、排除系统故障。
  • 为使系统适应新的硬件环境,或根据用户的需要在原系统中增加一些新的功能,又有可能增加系统中的错误。
  1. 软件缺少适当的文档资料
  • 文档资料是软件必不可少的重要组成部分。实际上,软件的文档资料是开发组织和用户的之间权利和义务的合同书,是系统管理者、总体设计者向开发人员下达的任务书,是系统维护人员的技术指导手册,是用户的操作说明书。
  • 缺乏必要的文档资料或者文档资料不合格,将给软件开发和维护带来许多严重的困难和问题。

克服软件危机的方法

  • 对程序设计方法、程序的正确性和软件的可靠性等问题进行系列的研究。
  • 对软件的编制、测试、维护和管理的方法进行研究。
  • 对开发人员提出更大的要求, 不单单是个人专业知识的增长, 还应该善于发现问题, 注重团队协作与效。

软件生命周期

软件生命周期(Software Life Cycle)是软件的产生直到报废或停止使用的生命周期。旧的解释是周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等阶段,一般称为软件生存周期(软件生命周期)。把整个软件生存周期划分为若干阶段,使得每个阶段有明确的任务,使规模大,结构复杂和管理复杂的软件开发变的容易控制和管理。通常,软件生存周期包括:

  1. 问题的定义及规划
    此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。
  2. 需求分析
    在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析,制定 PRD 文档。并提交各部评审. 同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。
  3. 软件工程开发
    此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。
  4. 程序编码
    此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。完成模块的编程后提测。
  5. 软件测试
    在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、集成测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。
  6. 运行维护
    软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。

SWEBoK 的 15 个知识域(An Overview of the SWEBOK Guide 请中文翻译其名称与简短说明)

  1. 软件需求
    软件需求知识领域关注软件需求的启发,协商,分析,规范和验证。在软件行业中,人们普遍认为,当这些活动表现不佳时,软件工程项目非常容易受到攻击。软件需求表达了对软件产品的需求和限制,这些需求和约束有助于解决一些现实问题。
  2. 软件设计
    定义系统或者组件的体系结构、组件、接口和其他特征的过程,以及这个过程所得到的结果。
  3. 软件构建
    软件建设指的是详细的创建工作软件的详细设计、编码、单元测试、集成测试、调试和验证。
  4. 软件测试
    测试是一项评估产品质量并通过识别缺陷来改进产品质量的活动。软件测试涉及根据有限的测试用例集上的预期行为对程序行为进行动态验证。这些测试用例是从(通常非常大)执行域中选择的。软件测试包括软件测试的基础知识、测试技术、人机界面测试和评估、测试相关措施和实际考虑。
  5. 软件维护
    软件维护包括增强现有的能力,使软件适应新的和修改过的操作环境,以及纠正缺陷。这些类别被称为完善的、适应性的和纠正性的软件维护。软件维护知识域包括软件维护的基础知识(维护的性质和需要、维护的类别、维护成本);软件维护中的关键问题(技术问题、管理问题、维护成本估算、软件维护的测量);维护过程;软件维护技术。(程序理解、重新设计、逆向工程、重构、软件退役);灾难恢复技术和软件维护工具。
  6. 软件配置管理
    系统的配置是硬件、固件、软件的功能和/或物理特性,或这些特性的组合。它还可以被视为硬件、固件或软件项的特定版本的集合,根据特定的构建过程进行组合以满足特定的目的。
  7. 软件工程管理
    软件工程管理包括计划、协调、测量、报告和控制项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。
  8. 软件工程过程
    该软件工程知识域涉及软件生命周期过程的定义、实现、评估、测量、管理和改进。
  9. 软件工程模型与方法
    所涵盖的主题包括建模(软件工程模型的原理和属性;语法与语义与不变量;前提条件、后条件和不变量);模型类型(信息、结构和行为模型);分析(分析正确性、完整性、一致性、质量和交互;可追溯性;和权衡分析);和软件开发方法(启发式方法、形式方法、原型方法和敏捷方法)。
  10. 软件质量
    软件质量知识域包括软件质量基础(软件工程文化、软件质量特征、软件质量的价值和成本以及软件质量改进);软件质量管理过程(软件质量保证、验证和确认、评审和审计);以及实用性。注意事项(缺陷描述、软件质量度量和软件质量工具)。
  11. 软件工程专业实践
    软件工程专业实践知识域涵盖专业性(专业行为、专业协会、软件工程标准、雇佣合同和法律问题);道德规范;群体动力学(团队合作、认知问题复杂性、与利益相关者互动、处理不确定性和模糊性、处理具有多元文化环境);以及沟通技巧。
  12. 软件工程经济学
    软件工程经济学知识域关注于在业务环境中做出决策,以使技术决策与组织的业务目标保持一致。
  13. 计算基础
    计算基础涵盖了为软件工程实践提供必要计算背景的基本主题。所涵盖的主题包括问题解决技术、抽象、算法和复杂性、编程基础、并行和分布式计算基础、计算机组织、操作系统和网络通信。
  14. 数学基础
    数学基础涵盖了为软件工程实践提供必要数学背景的基本主题。所涉及的主题包括集合、关系和函数;基本命题和谓词逻辑;证明技术;图和树;离散概率;语法和有限状态机;以及数论。
  15. 工程基础
    工程基础涵盖了为软件工程实践提供必要工程背景的基本主题。涵盖的主题包括经验方法和实验技术;统计分析;测量和度量;工程设计;模拟和建模;以及根本原因分析。

简单解释 CMMI 的五个级别。例如:Level 1 - Initial:无序,自发生产模式

  1. Maturity Level 1 - Initial:无序,自发产生模式。
  2. Maturity Level 2 - Managed:建立基本管理过程,能借鉴已有项目的成功经验。缺点是只能借鉴已有的项目,不够系统,比较被动。
  3. Maturity Level 3 - Defined:管理过程组织化,项目根据组织的标准进行,主动性增强。
  4. Maturity Level 4 - Quantitatively Managed:量化管理,过程可控,管理操作有理论依据,结果性能可预测。
  5. Maturity Level 5 - Optimizing:过程的量化反馈和先进的新思想、新技术促使管理过程不断改进。

用自己语言简述 SWEBok 或 CMMI(约200字)

  • CMMI 的全称是 Capability Maturity Model Integration,即能力成熟度模型集成。
  • CMMI 的意义在于可以提高企业的管理水平,降低企业的工程成本。CMMI 计划把现在所有现存实施的与即将被发展出来的各种能力成熟度模型,集成到一个框架中去,申请此认证的前提条件是该企业具有有效的软件企业认定证书。
  • CMMI 的目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。事实表明,企业实施 CMMI 技术的投入都会得到丰厚的回报。
  • CMMI 主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值