软件工程基础知识
本文主要介绍软件工程的定义、软件需求分析与定义、软件架构设计、软件测试与维护,以及软件质量保证和质量评价等知识。
什么是软件工程
“软件工程”这个概念最早是在 1968 年召开的一个当时被称为“软件危机”的会议上提出的。自 1968 年以来,软件工程领域已经取得了长足的进步,极大地完善了我们的软件开发活动,尤其是对于大型软件系统。
人们从软件危机中获得的最重要教训是:大型的、复杂的软件系统的开发是一项工程,必须按工程学的方法组织软件的生产与管理,必须经过计划、分析、设计、编程、测试、维护等一系列的软件生命周期阶段。这一认识也促使了软件工程学的诞生。
简单来说,软件工程学就是研究如何有效地组织和管理软件开发的工程学科。IEEE 在 1983 年将软件工程定义为 —— 软件工程是开发、运行、维护和修复软件的系统方法。
软件工程方法学包含 3 个要素,即方法、工具和过程。
- 方法是指完成软件开发的各项任务的技术方法;
- 工具是指为运用方法而提供的软件工程支撑环境;
- 过程是指为获得高质量的软件所需要完成的一系列任务的框架。
软件需求分析与定义
软件需求的定义
软件需求就是系统必须完成的事,以及必须具备的品质。具体来说,软件需求包括功能需求、非功能需求和设计约束 3 方面内容。
- 功能需求:是指系统必须完成的那些事,即为了向它的用户提供有用的功能,产品必须执行的动作。
- 非功能需求:是指产品必须具备的属性或品质,如可靠性、性能、响应时间、容错性、扩展性等。
- 设计约束:也称为限制条件、补充规约,这通常是对解决方案的一些约束说明。例如必须采用国有自主知识产权的数据库系统,必须运行在 UNIX 操作系统之下等等。
另外,我们还经常听到业务需求、用户需求、系统需求等词语,这里也顺便介绍一下。
- 业务需求:是指反映组织机构或客户对系统、产品高层次的目标要求,通常问题定义本身就是业务需求。
- 用户需求:是指描述用户使 用产品必须要完成什么任务、怎么完成的需求,通常是在问题定义的基础上进行用户访谈、调查,对用户使用的场景进行整理,从而建立从用户角度出发确定的需求。
- 系统需求:是从系统的角度来说明软件的需求,它包括用特性说明的功能需求、质量属性,以及其他非功能需求,还有设计约束。
软件需求分析
需求分析是在收集软件需求信息的基础上,进行分析、建立模型,然后将其进行规格化,形成《软件需求规格说明书》,最后通过客户和管理层验证的过程。
需求分析的目标是检测和解决需求之间的冲突、发现系统的边界、详细描述出系统需求。
注意:需求必须可以被验证。
软件需求验证
在实际工作中,我们一般通过需求评审和需求测试的方法来对需求进行验证。
需求验证所包括的活动是为了确定以下几方面的内容:
- 软件需求规格说明正确描述了预期的系统行为和特征;
- 从系统需求或其他来源中得到软件需求;
- 需求是完整的和高质量的;
- 所有对需求的看法是一致的;
- 需求为继续进行产品设计、构造和测试提供了足够的基础。