登陆注册
8724600000003

第3章 软件工程概述(1)

当明确了要去实现一个软件时,就必须知道究竟应该怎样实现这个软件,至少应该弄明白下列问题:

①这个软件值得开发吗?现有的技术水平能实现用户需要的软件吗?

②怎样与客户沟通从而知道客户要求什么?又如何描述已知的要求?

③怎样才能将用户用文字描述的系统转换成最终的软件?

④要用到数据库吗?若要,数据库又怎么设计呢?

⑤使用哪一种开发工具?使用Windows风格的界面,还是Web风格的界面?

⑥与合作伙伴怎样进行分工合作?

⑦软件整个开发过程应该是什么样的?

只有在真正地解决了诸如此类的这些问题后,才能进入开发过程,也只有这样,才有可能实现预期的软件。而这些在软件开发之前和软件开发过程中摆在设计人员面前的问题,就是软件工程需要解决的问题。

本章重点介绍一些软件工程的基本概念,帮助同学们整理出软件工程的总体知识框架,理清学习软件开发的思路。

1.1软件工程的基本概念

当人们第一次听说软件工程(Software Engineering)时,第一个联想到的可能是建筑工程、水利工程等等其他类型的工程。再进一步推理,软件工程应该与建筑工程等有相似之处,因为都含有“工程”二字,但它们必定也有不同之处,因为软件工程突出了“软件”而非其他。所以要理解软件工程,必须先弄明白什么是“软件”(Software)。

1.1.1软件

何谓软件?虽然人们一直把这个名词挂在嘴边,但试图给其下一个全面而严格的定义绝非易事。本书不将笔墨纠缠于概念的面面俱到的学究式阐述上,而是在博采众家之长的基础上稍加筛选,但求以点盖面,起到梳理概念,引导入门的作用。所以,对于软件的定义,只想纠正一个错误——软件就是程序。“软件就是程序”是错误的,软件是程序和实现这些程序所需要的所有文档的集合。

程序仅仅是软件的一部分,软件更为重要的部分是人们刚开始做软件时最不愿意做的文档。这些文档包括可行性分析文档、需求分析文档、设计文档、测试报告、用户手册、培训计划、软件实施方案、项目管理文档等所有为了实现这个软件所需要的文档的集合。

1.1.2软件工程的定义

20世纪70年代,随着计算机应用的日益普及,软件系统日益复杂,日益庞大,这时出现了软件的高成本投入与低质量回报之间的尖锐矛盾,此现象被称为“软件危机”。

为了解决这对日益尖锐的矛盾,人们尝试将传统工业工程上的一些系统分析、设计方法应用于软件开发的过程之中,以期待在预期的时间内以低成本的投入完成较高质量的软件开发。此尝试促成了软件工程的诞生。

IEEE对软件工程给出了如下定义:①The application of a systematic,disciplined,quantifiable approach to the development,operation,and maintenance of software:that is,the application of engineering to software.②The study of approaches as in。

这一定义突出了软件工程作为工程的特点,也突出了软件工程的本质特征——软件的工程化。

1.1.3软件工程的目标

从IEEE给出的软件工程的定义中,可以看出软件工程最终要实现的目标是:在预期的时间内,以较低成本的投入完成较高质量的软件。在目标中,有3个最为重要的因素:时间,成本,质量。可以从以下几个角度来衡量软件的质量。

1.可维护性(Maintainability)

软件的维护是指在软件交付使用的过程中,对软件做出的修正、完善和适应性修改。软件的可维护性就是指软件在维护方面的性能,一般而言包括软件的可读性(Readability);软件的可修改性(Modifiability)和软件的可测试性(Testability)。软件的可读性用来衡量软件是否容易理解。软件的可修改性用来衡量软件是否容易修改。软件的可测试性用来衡量软件是否容易测试。

软件的维护是延长软件生命周期,降低软件开发成本的关键。因此软件的可维护性是一个非常重要的指标,近年在软件投资中的比例也有日益上升的趋势。

2.可靠性(Reliability)

软件的可靠性,通常包括软件的正确性(Correctness)和软件的健壮性(Robustness)两个方面。软件的正确性是指软件系统自身没有错误,能够在预期环境下完成预期功能。软件的健壮性则是从相反的角度进行衡量,描述软件,处理异常情况的能力。软件的正确性和健壮性是同一个问题的两个方面,它们相互补充,共同构成了软件的可靠性。

3.可理解性(Understandability)

软件的可理解性是指软件的简明性和清晰性。这里的简明清晰涉及程序、文档及最终实现的软件系统的界面。

4.性能(Performance)

软件的性能包括运行该软件时所需要的时间和空间;软件的响应时间(ResponseTime)和软件的吞吐率(Throughoutput)。软件系统的响应时间是指从客户发起请求到软件系统对客户的请求作出响应的时间。软件系统的吞吐率是指单位时间内软件系统执行的作业数。

5.可扩展性(Extensibility)

软件的可扩展性是指软件为了适应用户需求的变化从而不断扩展的能力。可扩展的软件系统应该尽可能的模块化,以保证新添加的功能模块对已有的软件系统不会带来负面影响。

同时可扩展的软件系统必须具有较高的可适应性,以方便替换已经存在的模块。

6.可伸缩性(Scalability)

可伸缩性是指软件系统能够适应系统不断发展的能力。可伸缩的系统能够将系统未来的发展考虑在内,可以适应企业不断发展的需要,以及数据量和系统使用量不断增大的情况。

7.安全性(Security)

软件的安全性主要用来描述软件在受到有意或无意的攻击时,或者在出现一些技术故障的情况下,仍然能保持正常运行的能力。

随着软件工程的发展,软件质量的评价越加丰富,内容不断充实。近年来讨论较多的还包括软件的可复用性(Reusability),用以描述软件的可重用能力;软件的互操作性(Interoperability),用以描述子软件系统在大系统环境下的可集成、可嵌入的能力;软件的可移植性(Portability),用以描述软件与其环境之间的相互独立性;软件的多相性(Heterogeneity),用以描述软件在跨平台,多种开发语言,多个开发环境下的构造能力。

1.2软件工程的知识体系结构

现代软件工程作为一门学科,有着极为丰富的内容,它包括软件开发技术和软件工程管理两大部分内容,同时为了实现这两者的自动化,还包括软件自动工具的研究。

1.2.1软件开发技术

按照软件生命周期模型,软件开发技术的研究主要包括软件需求分析、软件设计、软件构造、软件测试与软件维护。

1.软件需求分析(Software Requirements Analysis)

软件需求分析是软件工程中最为重要的活动之一。这一阶段的最主要任务是理解和表达用户的需求,也就是说要明确用户希望软件系统实现的功能,并将需求分析的结果以一定的形式表达出来。

对软件需求的主要研究工作是:软件需求的诱导(Requirements Elicitation)(其中包括需求的捕获(Capture)、发现(Discovery)和获取(Acquisition)),还有需求的分析(Analysis),验证(Validation),以及需求的描述或表达,同时还包括需求变更管理,以及需求工程的过程定义与管理。

2.软件设计(Software Design)

如同建造房屋一样,在施工之前,需要将要建造的房屋用建筑工程的符号表示出来,这一过程就是设计过程。软件设计与之类似,它完成了要构建的软件系统有意义的工程上的表示。设计阶段的主要内容包括软件架构设计、数据设计、接口设计、系统行为及其控制设计。设计过程是需求分析与软件构造的衔接,需求分析阶段产生的分析文档是设计的主要依据。

3.软件构造(Software Construction)

软件构造,实质上就是软件分析的物理实现,换句话说,就是通过编码(coding)和调试(debugging)实现软件系统。显然,编码是软件构造最为重要的内容,但并非唯一内容,现代软件工程的软件构造内容是相当丰富的。例如,设计模式(Design Pattern)的使用,公共运行库(Runtime CommonLibrary)的设计,GUI设计与功能实现的分离,自动化软件创建(Automation Constructing),SQL92.XML等外部标准的使用,等等,这些内容都是软件构造研究的内容。

4.软件测试(Software Testing)

软件测试是软件质量保证的一个重要途径,测试的目的在于发现软件系统中的错误与缺陷。软件的测试可以在不同级别进行,可以是单元测试(Unit Testing),集成测试(Integration Testing),也可以是系统测试(System Testing)。对于测试,一个错误的观点是:测试开始于编码结束之后。事实上,在需求分析结束之后,就应该着手编制测试计划,测试从此时就已经开始进行了。

5.软件维护(Software Maintenance)

当软件经过用户验收测试(Acceptance Testing)之后,软件就进入了维护期。所谓软件维护,就是指软件在提交用户后,为了改正错误,提高软件性能,适应环境的变化而作出的修改。以纠正错误为主要内容的软件维护是修改性维护,以提高性能为主要内容的软件维护是完善性维护,为了适应环境而进行的软件维护就是适应性维护。软件维护对于延长软件生命周期,降低总的软件投资成本,提高投资回报率(Returnof Investment)都有着极为重要的价值。因而近年来逐渐成为软件工程研究的一个热点。特别是对于遗产系统(Legacy System)的再工程(Reengineering),以及反向工程(Reverse Engineering)的研究越加引起人们的关注。

1.2.2软件工程管理

软件工程另一个主要的研究方面是软件工程管理技术。需要特别提出的是:软件工程在20世纪90年代后获得突飞猛进的发展。这与现代管理科学与技术的发展是分不开的。管理科学中很多最新的理念在现代软件工程中得到了充分的实践。例如,全面质量管理(TotalQuality Management),过程管理(Process Management),系统科学中对复杂性、非线性、不确定性的研究,扁平化的组织结构,企业流程再造(Business Process Reengineering),企业资源规划(Enterprise Resource Planning),供应链管理(Supply Chain Management),物流管理(Logistics Management),客户关系管理(Customer Relation Management)等。

1.软件工程管理(Software Engineering Management)

软件工程最终能否得到顺利实施,一个最为关键的因素是管理。而且近几年来,这一因素对软件工程成败的影响程度愈加强烈。

众所周知,管理是企业人、财、物之外的第四类资源。不论是哪种类型的管理,基本上都包含四类主要职能:计划、组织、领导、控制。软件工程管理(Software Engineering Management)类同,包括组织管理(Organization Management)(也就是软件组织自身的管理)和项目管理(Project Management)。

同类推荐
  • 创业在微软

    创业在微软

    身处软件巨擘微软之中,何来“创业”二字?本书详尽勾勒了微软亚洲工程院(ATC)的成长历程,披露了工程院人在“创业”过程中不为人知的种种酸甜苦辣,生动展现了工程院的独特文化,并从另一个角度展现了其领袖人物张宏江博士的心路历程和管理思想。
  • 下一代互联网

    下一代互联网

    本书系统介绍了下一代互联网的进展情况,包括下一代互联网的概念解析,国内外下一代互联网的最新发展情况,下一代互联网的关键技术进展,以及各国发展下一代互联网的政策计划。最后分析了下一代互联网对未来社会的影响,提出我国发展下一代互联网的政策建议等。全书共6章,包括互联网发展历史和现状,下一代互联网基本概念,下一代互联网研究最新进展,下一代互联网发展现状,我国发展下一代互联网现状,发展下一代互联网战略建议。
  • 云计算和现代远程教育

    云计算和现代远程教育

    本书介绍了云计算知识、云计算的特性、云计算技术、云计算中的访问云、云计算中的云存储、云计算在远程教育中的应用等内容。
  • 研究性学习丛书-电脑知识

    研究性学习丛书-电脑知识

    本书对电脑知识有一个全面详细的介绍,会对读者的电脑知识进行提高。
  • 一本书读懂大数据

    一本书读懂大数据

    本书是深入研究互联网思维的经典之作,从互联网思维的定义到互联网思维应用的具体案例表现。作者深入浅出、条分缕析,全面阐述互联网思维的内核与精神,逐一点评当前关于互联网思维的各种观点。本书从最初级的互联网思维应用到高端的粉丝经济,平台建设,自媒体营销的方法都有详细讲解介绍。让读者了解什么是互联网思维的同时还能学会把互联网思维运用到自己的工作学习已经生活中。
热门推荐
  • 我的六月她的心

    我的六月她的心

    喜欢漂移吗?喜欢速度吗?喜欢改装车吗?如果当一个人可以放弃自己当下最舒适的环境,那是怎么样的意境?如果可以让梦境成真。这里可以告诉你,这一切,不是不可能。
  • 除魔师重生在香江

    除魔师重生在香江

    袁不破本是九天真武荡魔大帝的传承者,可惜地星进入末法时代,天地灵气稀薄,修炼者百不存一,在一次除魔之中,袁不破遇到造下滔天罪行的魔头,与之大打出手无奈不敌,为了不使魔头继续为祸人间,袁不破只好自爆与之同归于尽……当他再次醒来时发现自己重生到了35年前的香江的一个少年身上……
  • 我在末世吞噬万物

    我在末世吞噬万物

    灵气复苏,且看顾明非如何在这丧尸+妖兽+俢真者+进化者的世界生存下去。
  • 孕期保健与胎教小百科

    孕期保健与胎教小百科

    本书以通俗的语言讲述了孕妇在孕期的营养、心理、生理、运动等方面的保健知识和胎教方法。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 重生之小事随安

    重生之小事随安

    唐漓重生了,上一世的不甘与不满,她觉得在这一世一定会弥补回来。她也认为自己一定会活的高大上,却没想到又一次陷入生活小事中。而越活越通透的她,却分外珍惜这每一件小事。随遇而安,才是对她这一世的最好报答!(本书属于原创。)
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 美人温柔蛊:俘获薄情王子

    美人温柔蛊:俘获薄情王子

    金色的阳光中,他逆光而坐,淡淡的光芒看起来像是一个纯净的天使,洁白的牙齿紧紧咬着樱花般淡粉的唇瓣,他轻声说道,“如果我说我喜欢你,你是不是会重新考虑这段婚姻?”她的泪沾湿他的衬衫,他说,“我会在你身边保护你,你不用那么辛苦。”然而,谁,用一个一个的谎言欺骗她的爱情,用一个又一个的谎言攻陷她的城池。
  • 腹黑校草的呆萌小公举

    腹黑校草的呆萌小公举

    “喂,小沫沫,给我按摩一下!”她不情愿的上前去,“小沫沫我渴了,给我倒水。”她不情愿的给他倒了杯辣椒水,心想迟早有一天我要报仇!某一天,她终于逮到机会了,正打算报仇,结果被他按在床上狠狠地欺负。
  • 激发青少年的100个强身健体故事

    激发青少年的100个强身健体故事

    阅读本书,犹如聆听智者的教诲,智慧如春风化雨滋润心田。相信本书收录的每一个故事,都能告诉我们太多的人生哲理。