浅论软件工程基本观念
来源:用户上传
作者: 熊士霞 王磊 章晨辰
摘要:软件工程是研究和应用如何以系统化的、规范的、可度量的方法去开发、运行和维护软件,即把工程化应用到软件上。软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。它贯彻于软件开发的整个过程。
关键词: 生产效率过程模型优化
自从1968年NATO会议首次提出“软件工程”概念以来,它经历了一条漫长的道路。软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而建立和使用的好的工程原则。
软件工程的主要研究内容:(1)软件开发技术:软件开发方法学、软件开发过程、软件工具和软件工程环境。(2)软件工程管理:软件管理学、软件经济学、软件心理学。
软件工程的主要环节有:人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试、维护等。
一、软件开发的基本策略
(1)复用
复用就是利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统。
(2)分而治之
分而治之是指把大而复杂的问题分解成若干个简单的小问题,然后逐个解决。诸如软件的体系结构设计、模块化设计都是分而治之的具体表现。
(3)优化与折中
优化:为了提高软件质量,程序员会不断改进软件中的算法,数据结构和程序组织。优化工作是十分复杂的,有时很难实现所有目标的优化,这时就需要“折中”策略。软件的折衷策略是指通过协调各个质量因素,实现整体质量的最优。软件折中的重要原则是不能使某一方损失关键的职能,更不可以象“舍鱼而取熊掌”那样抛弃一方。
(4)软件工程三个要素――方法、工具、过程
二、 一些不正确的观念
下面列举并分析一些不正确的软件工程观念,可帮助初学者少犯相似的错误。
(一)我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题。
客观情况:好的参考书无疑能指导我们的工作。但实践者并不能因此依赖于书籍,这是因为:(1)现实的工作中,由于条件千差万别,即使是相当成熟的软件工程规范,常常也无法套用。(2)软件技术日新月异,没有哪一种软件标准能长盛不衰。祖传秘方在某些领域很吃香,而在软件领域则意味着落后。
(二)我们拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。
客观情况:良好的开发环境只是产出成果的必要条件,而不是充分条件。如果拥有好环境的是一群庸人,难保他们不干出南辕北辙的事情。
(三)如果我们落后于计划,可以增加更多的程序员来解决。
客观情况:软件开发不同于传统的农业生产,人多不见得力量大。如果给落后于计划的项目增添新手,可能会更加延误项目。因为:(1)新手会产生很多新的错误,使项目混乱。 (2)老手向新手解释工作以及交流思想都要花费时间,使实际开发时间更少。所以科学的项目计划很重要,不在乎计划能提前多少,重在恰如其分。如果用“大跃进”的方式奔向共产主义,只会产生倒退的后果。
(四)既然需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。
客观情况:对需求把握得越准确,软件的修修补补就越少。有些需求在一开始时很难确定,在开发过程中要不断地加以改正。软件修改越早代价越少,修改越晚代价越大,就跟治病一样道理。
三、一些有争议的观念
下面探讨一些有争议的观念,目的不在于得出“正确”或“错误”的评断,而在于争议会激发更多理性的思考。
(一)如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法?
观点:如果开发软件的目的是为了学习或是研究,那么应该设计一种更快的算法。如果该软件已经用于商业,则需谨慎考虑:若换一台更快的计算机能解决问题,则是最快的解决方案。改进算法虽然可以从根本上提高软件的运行速度,但可能引入错误以及延误进程。技术狂毫无疑问会选择后者,因为他们觉得放弃任何可以优化的机会就等于犯罪。
(二)有最好的软件工程方法,最好的编程语言吗?
观点:在软件领域永远没有最好的,只有更好的。能解决问题的都是好方法或是好语言。程序员在最初学习Basic、Fortran、 Pascal、C、C++等语言时会感觉一个比一个好,不免有喜新厌旧之举。而如今的Visual Basic、Delphi、Visual C++、Java等语言各有所长,真的难分优劣。开发人员应该根据客观条件,选择自己熟悉的方法和语言,才能保证合格的质量与生产率。
程序设计是自由与快乐的事情,不要发誓忠于某某主义而自寻烦恼。
(三)编程时是否应该多使用技巧?
观点:就软件开发而言,技巧的优点在于能另辟蹊径地解决一些问题,缺点是技巧并不为人熟知。若在程序中用太多的技巧,可能会留下隐患,别人也难以理解程序。鉴于一个局部的优点对整个系统而言是微不足道的,而一个错误则可能是致命的。作者建议用自然的方式编程,少用技巧。
(四)软件中的错误是否可按严重程度分等级?
观点:在定量分析时,可以将错误分等级,以便于管理。微软的一些开发小组将错误分成四个等级:
一级:错误导致软件崩溃。
二级:错误导致一个特性不能运行并且没有替代方案。
三级:错误导致一个特性不能运行但有替代方案。
四级:错误是表面化的或是微小的。
开发人员应该意识到:所有的错误都是严重的,不存在微不足道的错误。这样才能少犯错误。
四、小结
软件工程学科发展到今天,已经有了很多方法和规范,学之不尽。但是,在我们的面前还有新的问题有待解决。我们总是试图从大的方面确定事物的精确性,我们可以预测宇宙飞船什么时候会到达火星;相反在小的方面我们无法给事物以精确性,我们无法预测一个软件产品下一次崩溃时间等。我们还需在实践中不断摸索与完善。
参考文献:
(1)Ian Sommerville.Software Engineering 8th Edition
(2)Roger S.Pressman ,etc .Software Engineering:A Practitioner’s Approach,Sixth Edition.
转载注明来源:https://www.xzbu.com/1/view-240661.htm