解读软件工程—(1)开端

来源:互联网 发布:苹果7开数据的快捷 编辑:程序博客网 时间:2024/06/06 13:04

真的很惭愧,大学学的专业是软件工程,但是毕业后,除了敲代码,其他啥都不懂,只能沦为三流小码农,当初总觉得搞这些分析画图之类的工作是枯燥乏味的,后来才发现而且从事这一项枯燥乏味工作的人工资竟然如此之高,引得无数程序猿挤破头都想跳进去。

但是现在连连“什么是软件?”这个问题都回答不下来,那该怎么办?

还好年轻就是本钱,趁着现在有点时间,接下来就用几天时间开始重新学习下软件工程基本思想理论(当然更多还是靠实践),扩展知识的同时,也为自己未来的职业发展开辟道路。

本篇先讲解几个基本概念。

1、千万程序猿心中的疑问——什么是软件?

简单的回答是:软件 = 程序 + 数据 + 文档

2、软件危机与软件工程

软件危机通俗来讲就是投入了大量资金,人力,结果做出的软件却达不到预期的效果,或者根本无法使用,这带来的后果是十分可怕的,所以为了解决这个问题,前人总结出了一堆的经验,然后渐渐就发展成了一门新的工程类概念,这就是我们文章的主体——软件工程
PS:软件危机在现实工作中十分常见。因为之前待过的几个创业公司,所以深有体会,在创业公司中基本上只有一条定理——敏捷开发。需求过来,依照需求大概设计下数据库,产品设计好原型,然后照着开做。然而需求往往并不会如此稳定,然后就进入了一边做新功能,一般改旧功能的循环。接着到了后期,测试加入,巨量BUG随之而来,这种感觉对一个单纯的程序猿无疑是痛苦的。我曾经待过的一个创业公司做了大半年,结果却还没有一个完整产品出炉,也差不多这个原因。

3、什么是软件工程?

应用系统化的、学科化的、定量的方法,来开发、运行、和维护软件。即将工程化那套概念运用于软件。

4、软件工程的意义

引用别人的一句话“一种是遵守软件工程开发规则的,我们称之为工程师;一种是不遵守软件工程开发规则的,我们称之为码农。”
先不管这句话的对与错,我们已经知道软件不是只由代码组成的,而软件的生命周期是很长的,而为了保证软件在这个长期的、不断变化的迭代过程中能继续保持着青春活力,那么采用工程性的思维来开发管理软件就显得至关重要,这也是我认为的软件工程的意义。

5、软件工程的三要素

  • 方法:技术手段,即如何去做?
  • 过程:基础、框架,即做什么?
  • 工具:为方法和过程提供支持,即方法使用工具完成过程。

6、软件工程七大原则

1)按软件生存周期分阶段制定计划并认真实施;

在软件开发与维护的漫长的生命周期中,需要完成许多性质各异的工作。这条基本原理意味着,应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。在软件的整个生命周期中应该制定并严格执行六类计划,它们是项目概要计划,里程碑计划,项目控制计划,产品控制计划,验证计划,运行维护计划。不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划。

2)坚持进行阶段评审

软件的质量保证工作不能等到编码阶段结束之后再进行。这样说至少有两个理由:第一,大部分错误是在编码之前造成的,例如,根据统计,设计错误占软件错误的63%,编码仅占37%;第二,错误发现与改正得越晚,所需付出的代价也越高。因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。

3)实行严格的产品控制

在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价,但是,在软件开发过程中改变需求又是难免的,由于外部环境的变化,相应地改变用户需求是一种客观需要,显然不能硬性禁止客户提出改变需求的要求,而只能依靠科学的产品控制技术来顺应这种要求。也就是说,当改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基线配置,它们是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。基线配置管理也称为变动控制:一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。绝对不能谁想修改软件(包括尚在开发过程中的软件),就随意进行修改。

4)用现代程序设计技术

从提出软件工程的概念开始,人们一直把主要精力用于研究各种新的程序设计技术。60年代末提出的结构程序设计技术,已经成为绝大多数人公认的先进的程序设计技术。以后又进一步发展出各种结构分析(SA)与结构设计(SD)技术。实践表明,采用先进的技术既可提高软件开发的效率,又可提高软件维护的效率。

5)结果应能清楚地审查

软件产品不同于一般的物理产品,它是看不峥摸不着的逻辑产品。软件开发人员(或开发小组)的工作进展情况可见性差,难以准确度量,从而使得软件产品的开发过程比一般产品的开发过程更难于评价和管理。为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查。

6)开发小组的人员应该少而精。

软件开发小组的组成人员的素质应该好,而人数则不宜过多。开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软件中的错误。此外,随着开发小组人员数目的增加,因为交流情况讨论问题而造成的通信开销也急剧增加。当开发小组人员数为N时,可能的通信路径有N(N?/FONT>1)/2条,可见随着人数N的增大,通信开销将急剧增加。因此,组成少而精的开发小组是软件工程的一条基本原理。

7)承认不断改进软件工程实践的必要性

遵循上述六条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但是,仅有上述六条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐,能跟上技术的不断进步。因此,承认不断改进软件工程实践的必要性作为软件工程的第七条基本原理。按照这条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。

原创粉丝点击