First PM Homework…..
系统分析与设计 – Homework 1
一、软件工程的定义
Software engineering is “(1) the application of a systematic, disciplined,
quantifiable approach to the development, operation, and maintenance of software,
that is, the application of engineering to software,” and “(2) the study of approaches
as in (1).” –– IEEE Standard 610.12
-
软件工程是应用系统化的、学科化的和定量化的方法来开发、运行和维护软件,即将工程应用到软件,以及运用学科化的各种方法研究软件开发方法等过程。
-
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
二、解释导致软件危机
的本质原因、表现,和克服软件危机的方法
- 软件危机原因
- 本质原因
The software crisis was due to the rapid increases in computer power and the complexity of the problems that could not be tackled. The main cause is that improvements in computing power had outpaced the ability of programmers to effectively utilize those capabilities.
- 具体原因
-
用户需求不明确
-
缺乏正确的理论指导
-
软件开发规模越来越大
-
软件开发复杂度越来越高
-
- 本质原因
-
软件危机表现
-
软件开发进度难以预测
-
软件开发成本难以控制
-
软件常常不能满足需求
-
软件产品质量无法保证
-
软件产品难以维护
-
软件缺少适当的文档资料
-
-
软件危机解决方法
用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理和维护,由此诞生了软件工程。 软件工程学科的应用和发展可以解决软件危机。软件工程是对软件的开发、操作和维护应用系统的、有纪律的、可量化的方法,即工程对软件的应用和对方法的研究。利用软件工程的知识理论可以指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。并且使用各种软件工具以协助软件项目的开发与管理,有助于解决软件危机。还有吗,软件的标准化有助于提高软件的可重用性,这对缓解软件危机方面起到了重要作用。
三、软件生命周期
-
软件生存周期(SDLC,软件生命周期是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段
-
这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。但随着新的面向对象的设计方法和技术的成熟,软件生命周期设计方法的指导意义正在逐步减少。
-
在时间维度,对软件项目任务进行划分,又称为软件开发过程。常见有瀑布模型、螺旋模型、敏捷模型等
-
在瀑布模型中,软件生命周期可以分为6个部分:
- 软件计划:这个阶段主要的是任务是研究项目的可行性,需要的文档是可行性分析报告。
- 需求分析:这个阶段是软件设计,验收的依据。主要文档是软件需求规格说明书,使用的工具是DFD图(数据流图),DD图(数据字典),判定树与判定表。
- 软件设计:将软件需求转换为软件表示。主要文档是概要设计说明书和集成测试。使用的工具包括PAD图,程序流程图,系统结构图。
- 程序编码:将软件需求转换为软件。
- 软件测试:要严格执行测试计划,通过黑盒测试和白盒测试,来发现错误。
- 运行维护:对软件进行日常的维护升级。
四、SWEBoK 的 15 个知识领域
描述软件工程实践的知识领域:
-
软件需求
软件需求知识领域涉及软件需求的引出、协商、分析、规范和验证。在软件行业中,人们普遍承认当这些活动执行得很糟糕时,软件工程项目是非常脆弱的。软件需求表达了对软件产品的需要和约束,这些需要和约束有助于解决一些实际问题。
-
软件设计
设计是指定义结构、组件、接口和其它系统或组件特征的过程以及该过程的结果。软件设计知识领域包括设计过程和最终产品。软件设计过程是软件工程生命周期活动,在该过程中,软件需求得到分析,以产生对软件内部结构及其行为的描述,这些描述将作为软件构建的基础。软件设计(结果)必须描述软件结构——即如何将软件分解和组织进组件以及这些组件之间的接口。
-
软件构造
软件构造是指通过将详细的设计、编码、单元测试、集成测试、调试和验证相结合,对能够工作的软件进行详细的创造。软件构造知识领域包括与能够满足需求和设计约束的软件程序开发相关的主题。软件构造知识领域包括软件构造的基础:管理软件构造,构造技术,实际考虑和软件构造工具。
-
软件测试
测试是一项为了评估产品质量以及通过识别缺陷提高产品质量而进行的活动。软件设计包括在测试用例的一个有限集合上对程序行为和预期行为进行动态验证。这些测试用例是从(通常非常大)的执行域中选择的。软件测试知识领域包括软件测试的基础:用户接口测试和评估,与测试相关的措施和实际考虑。
-
软件维护
软件维护包括增强现有功能,使软件适应新的操作环境,以及修正缺陷。这些类别被称为完美的、自适应的和正确的软件维护。软件维护知识领域包括软件维护(维护的性质和需要,维护的类别,维护的成本)的基础;软件维护的关键问题(技术问题,管理问题,维护成本估计,软件维护度量);维护过程;软件维护技术(程序理解,再工程,逆向工程,重构,软件退休);灾难恢复技术和软件维护工具。
-
软件配置管理
系统配置是硬件、固件、软件的功能和/或物理特征,或者是这些特征的组合。它也可以被看作是硬件、固件或软件项目为了服务一个特定目标根据特定构建过程而组合起来的特定版本的集合。因此,软件配置管理(SCM)是在不同的时间点识别系统配置的学科,以便系统地控制配置的更改,并在整个软件生命周期维护配置的完整性和可追溯性。软件配置管理知识领域包括软件配置管理过程的管理;软件配置识别、控制、状态核算、审计;软件发布管理和交付;以及软件配置管理工具。
-
软件工程管理
软件工程管理包括计划、协调、度量、报告和控制一个项目或程序,以确保软件的开发和维护是系统的、有纪律的和量化的。软件工程管理知识领域包括初始化和范围定义(确定和协商需求,可行性分析,以及需求的评审和修订);软件项目计划(过程计划,工作量、成本和进度的估计,资源分配,风险分析,质量规划);软件项目制定(度量,报告,以及控制;采购和供应商合同管理);产品验收;项目性能的审核与分析;项目终止;以及软件管理工具。
-
软件工程过程
软件工程知识领域涉及软件生命周期过程的定义、实现、评估、度量、管理和改进。所涵盖的主题包括过程实现和变更(过程基础设施,过程实现和变更模型,以及软件过程管理);过程定义(软件生命周期模型和过程,过程定义、过程适应和过程自动化的符号);过程评估模型和方法;度量(过程度量,产品度量,度量技术,以及度量结果质量);以及软件过程工具。
-
软件工程模型和方法
软件工程模型和方法知识领域提出了包含多个生命周期阶段的方法;针对特定生命周期阶段的方法包含在其它知识领域。所涵盖的主题包括建模(软件工程模型的原理和性质;语法、语义、不变量的对比;前置条件;以及不变量);模型类型(信息,结构和行为模型);分析(对正确性、完整性、一致性、质量和交互进行分析;可追溯性;以及权衡分析);以及软件开发方法(启发式方法,原型设计方法和敏捷方法)。
-
软件质量
软件质量是一个普遍的软件生命周期问题,它在SWEBOK V3的很多知识领域中均被提及。另外,软件质量知识领域包括软件质量基础(软件工程文化,软件质量特征,软件质量价值和成本,以及软件质量改进);软件质量管理过程(软件质量保证,核实和批准,评价和审计);以及实际考虑(缺陷特征,软件质量度量,以及软件质量工具)。
-
软件工程专业实践
软件工程专业实践涉及软件工程师必须具备的知识、技能和态度,以一种专业、负责和道德的方式来实践软件工程。软件工程专业实践知识领域包括专业性(专业行为,专业社会,软件工程标准,雇佣合同,以及法律问题);伦理准则;团队动态(在团队中工作,认知问题复杂性,与利益相关者互动,处理不确定性和模糊性,处理多文化环境);以及沟通技能。
-
描述软件工程教育需求的知识领域:
-
软件工程经济学
软件工程经济学知识领域涉及在商业背景下做出决策,以使技术决策和组织的商业目标保持一致。所涵盖的主题包括软件工程经济学基础(提议,现金流动,金钱的时间价值,计划期限,通货膨胀,贬值,替换和退休决定);非营利性决策(成本-利益分析,优化分析);评估经济风险和不确定性(技术估计,风险和不确定性下的决策);以及多属性决策(价值和度量制度,补偿和非补偿技术)。
-
计算基础
计算基础知识领域包括为软件工程实践提供必要的计算背景的基本主题。所涵盖的主题包括解决问题技术,抽象,算法和复杂度,编程基础,并行和分布式计算基础,计算机组织,操作系统,以及网络通信。
-
数学基础
数学基础知识领域包括为软件工程实践提供必要的数学背景的基本主题。所涵盖的主题包括集合,关系,以及函数;基本命题和谓词逻辑;证明技术;图和树;离散型概率;语法和有限状态机;以及数论。
-
工程基础
工程基础知识知识领域包括为软件工程实践提供必要的工程背景的基本主题。所涵盖的主题包括经验方法和实验技术;统计分析;测量和度量;工程设计;仿真和建模;以及根本原因分析。
-
五、简单解释 CMMI 的五个级别
-
Level 1 - Initial:
无序,自发生产模式。
-
Level 2 - Managed:
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
-
Level 3 - Defined:
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。
-
Level 4 – Quantitatively Managed:
分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。
-
Level 5 - Optimizing:
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
六、用自己语言简述 SWEBok 或 CMMI
-
软件工程知识体系(Software Engineering Body of Knowledge, SWEBok)是IEEE Computer Society为了克服软件危机而构建的软件生产的最佳实践与相关知识的框架,用于指导软件工程人才的培养与学科建设。2014 V3版的SWEBoK将知识分为软件工程实践和基础教育两个部分,共15个知识领域,其中软件需求和软件设计是最重要的两个领域。
-
建立SWEBok指南有5个目的:
- 促进世界范围内对软件工程的一致观点
- 阐明软件工程相对其它学科的位置并确立它们的分界
- 刻画软件工程学科的内容
- 提供使用知识体系的主题
- 为开发课程表和个人认证与许可材料提供一个基础
-
知识体系已经存在于发表的文献中,而指南描述知识体系的哪些部分已经被普遍接受,并将这些部分组织起来,为其提供一个使用的主题。软件工程要成为合理的工程学科和一个被认可的职业,在核心知识体系上达成一致至关重要,而软件工程知识体系指南为实现这一目标提供了桥梁。