软件工程是使用良好的科学原理、方法和过程开发软件产品的工程分支,软件工程的结果是一种高效、可靠的软件产品。
软件项目管理的范围比软件工程过程更广,因为它涉及通信、交付前和交付后的支持等。
本教程应该让你对软件产品、软件设计和开发过程、软件项目管理和设计复杂性等有基本的了解。在本教程的最后,你应该对软件工程的概念有很好的理解。
让我们首先了解软件工程代表什么,这个术语由两个词组成,软件和工程。
软件不仅仅是一个程序代码,一个程序是一个可执行的代码,它服务于一些计算目的。软件被认为是可执行程序代码、相关库和文档的集合。软件,当为特定的需求而制作时,称为软件产品。
另一方面,工程就是开发产品,使用定义明确的科学原理和方法。
软件工程是使用定义良好的科学原理、方法和过程开发软件产品的工程分支。软件工程的结果是一种高效、可靠的软件产品。
软件工程定义
IEEE将软件工程定义为:
(1)对软件的开发、操作和维护采用系统的、有纪律的、可量化的方法,也就是把工程应用到软件上。
(2)对上述方法的研究。
德国计算机科学家弗里茨·鲍尔将软件工程定义为:
软件工程是建立和使用完善的工程原理,以获得经济可靠的软件,并在真实的机器上有效地工作。
软件演化
使用软件工程原理和方法开发软件产品的过程称为软件演化,这包括软件的初始开发、维护和更新,直至开发出满足预期需求的软件产品。
演进从需求收集过程开始。之后,开发人员创建了预期软件的原型,并将其展示给用户,以便在软件产品开发的早期阶段获得用户的反馈。用户提出修改建议,连续的几次更新和维护也在不断修改。此过程更改为原始软件,直到完成所需的软件。
即使用户已经拥有了想要的软件,先进的技术和不断变化的需求也会迫使软件产品做出相应的改变。从头开始重新创建软件并与需求一对一是不可行的。唯一可行和经济的解决方案是更新现有的软件,使其符合最新的要求。
软件演化规律
雷曼给出了软件进化的法则。他将软件分为三类:
- s型(静态型)-这是一个软件,它严格按照定义的规范和解决方案工作。解决方案和实现它的方法,在编码之前都是立即理解的。s型软件受变化的影响最小,因此这是最简单的。例如,计算器程序的数学计算。
- p型(实践型)-这是一个软件与程序的集合。这是由过程可以做什么来定义的。在该软件中,可以描述规范,但解决方案不是很明显。例如,游戏软件。
- E型 (嵌入式类型)-该软件与现实环境的需求紧密配合。由于现实世界中法律、税收等方面的各种变化,使得该软件具有高度的进化性。例如,在线交易软件。
E型软件进化
雷曼给出了e型软件进化的8条法则:
- 持续的变化—e型软件系统必须持续地适应现实世界的变化,否则它将变得越来越没用。
- 增加复杂性——随着e型软件系统的发展,除非进行维护或减少工作,否则其复杂性将会增加。
- 熟悉程度的保留——必须不惜任何代价保留对软件的熟悉程度,或者关于软件是如何开发的,为什么以这种特定方式开发的知识等等,以实现系统中的更改。
- 持续增长——为了解决某个业务问题,E类系统实现更改的大小根据业务的生活方式变化而增长。
- 降低质量——除非严格维护和适应不断变化的操作环境,否则e型软件系统的质量会下降。
- 反馈系统——e型软件系统构成了多回路、多层次的反馈系统,要想成功地修改或改进,必须将其作为反馈系统来对待。
- 自我调节- e型系统演化过程是自我调节的,产品和过程措施的分布接近正常。
- 组织稳定性——在不断发展的e型系统中,平均有效的全球活动率在产品的生命周期内是不变的。
软件模式
软件范例是指在设计软件时所采取的方法和步骤。现在已经提出了许多方法,并且已经投入使用,但是我们需要了解这些范例在软件工程中的地位。这些可以组合成各种类别,虽然每一个类别都包含在另一个类别中:
编程范式是软件设计范式的一个子集,而软件设计范式又是软件开发范式的一个子集。
软件开发模式
这种范例被称为软件工程范例,其中所有与软件开发相关的工程概念都被应用。它包括帮助软件产品构建的各种研究和需求收集。它包括-
- 需求收集
- 软件设计
- 编程
软件设计模式
这个范例是软件开发的一部分,包括-
- 设计
- 维护
- 编程
编程范式
这个范例与软件开发的编程方面密切相关。这包括,
- 编码
- 测试
- 集成
软件工程需求
软件工程的需求是由于用户需求和软件工作环境的变化率更高而产生的。
- 大型软件——建造一堵墙比建造一幢房子或建筑物要容易得多,同样地,当软件的大小成为大型工程时,就必须给它一个科学的过程。
- 可伸缩性——如果软件过程不是基于科学和工程概念,那么重新创建新软件将比扩展现有软件更容易。
- 成本-硬件行业已经显示出它的技能和巨大的制造业已经降低了计算机和电子硬件的价格。但是,如果不采用适当的过程,软件的成本仍然很高。
- 动态特性——软件的不断增长和适应性在很大程度上取决于用户工作的环境。如果软件的性质总是在变化,那么就需要在现有的软件中进行新的增强。这就是软件工程发挥良好作用的地方。
- 质量管理——更好的软件开发过程提供更好的和高质量的软件产品。
优秀软件的特点
一个软件产品可以通过它所提供的功能和它的使用情况来判断,本软件必须满足以下条件:
- 操作
- 过渡
- 维护
精心设计和制作的软件应该具备以下特点:
操作
这告诉我们软件在操作中是如何工作的。可通过以下方式测量:
- 预算
- 可用性
- 效率
- 正确性
- 功能
- 可靠性
- 保密
- 安全
- 过渡
当软件从一个平台转移到另一个平台时,这一点很重要:
- 可移植性
- 互操作性
- 可重用性
- 适应性
维护
这方面简要介绍了软件在不断变化的环境中自我维护的能力:
- 模块化
- 可维护性
- 灵活性
- 可伸缩性
简而言之,软件工程是计算机科学的一个分支,它使用定义良好的工程概念来生产高效、持久、可伸缩、预算内和准时的软件产品。