登陆注册
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)。

同类推荐
  • 中文版AutoCAD2005辅助设计宝典

    中文版AutoCAD2005辅助设计宝典

    本书全面、详细地介绍了中文版AutoCAD2005的特点、功能以及使用方法和技巧。全书共分11章,前九章分别介绍了利用中文版AutoCAD2005进行辅助设计的方法和技巧,最后两章讲解了若干综合实例。
  • 下一代互联网

    下一代互联网

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

    现代企业财务软件应用教程

    本书内容包括财务软件概论、系统管理、企业应用平台、总账管理、报表管理、薪资管理、固定资产管理、应收款管理、应付款管理等。
  • 组建家庭局域网与无线网

    组建家庭局域网与无线网

    该书是“快乐驿站”丛书之一,是一本精心为初级家庭电脑用户打造的局域网与无线网组建入门与提高的图书,同时还涉及一些办公网络的组建内容。《组建家庭局域网与无线网》以局域网和无线网的功能、设置以及实际应用为导向,用生动的实例、形象的图解和幽默的语言循序渐进地介绍了局域网和无线网的概念、产品、设计、组建、调试与维护的相关内容。
  • 体感交互技术

    体感交互技术

    本书提出了体感计算的研究,探讨了基于体验性认知的个性化电子学习方式,并且分析了面向儿童的艺术创造体验,在体感虚拟化身的帮助下,用户可以通过身体运动,促进情感心智的全面发展,
热门推荐
  • 我的高校爱情回忆录

    我的高校爱情回忆录

    主人公陆峰从校园到进入社会的爱情故事,让人心痛无比的虐恋。
  • 猎龙师的黄昏

    猎龙师的黄昏

    猎龙师出山,但是天下真的有龙么?权谋算尽,一个小小猎龙师何以登堂入室,身居庙堂?二十年前,深宫之中,失踪的婴儿,被送向何方?
  • 我有Him和等价交换系统

    我有Him和等价交换系统

    天宇在玩我的世界时突然跑出一个Him,在听他的介绍后获得一个等价交换系统,天宇决定帮助Him打败魔主303
  • 末世之不败虐杀

    末世之不败虐杀

    萧轩在玩《三国杀传奇》的时候,一次十连抽。之抽到了一张没有名字的黑卡。萧轩来没来得及骂。手机又爆炸了!
  • 重生之最强鬼泣

    重生之最强鬼泣

    这是一个以DNF为蓝本的游戏文。他本是永恒游戏的巅峰鬼泣,但是在自己人的背叛与暗杀之下,最终含恨陨落。当他再次醒来,却发现自己居然回到了十年之前。重生一世,他要报复前世背叛自己的那些人。可当他的复仇完成以后,却发现自己又落入了另一个人的圈套之中…
  • 吃货之嚣张云玥

    吃货之嚣张云玥

    一个智商高,情商高,还有倾城的外表的人,因为不小心被人推下水而穿越到古代,开始了她的古代旅程。“我要给你点颜色瞧瞧”“阿!对不起我色盲”“你...你无耻。”“怎么?不行吗,我无耻,但...你比我更无耻”
  • 血屠末日

    血屠末日

    人类基因变异,异大陆强行插入,生化病毒爆发,地球聚合。异能、生化谁才是地球的主修?
  • 零度陨天

    零度陨天

    修炼一途,唯心正才登大堂,唯性坚才成大果转逆乾坤,逆天而行,终就大业……
  • 王座之光

    王座之光

    你可知道教的“昆仑”佛教的“婆娑世界”教庭的“天堂”黑暗议会的“地狱”从何而来,而世界的神话传说怎么出现,世界的真实真如同你平时看到的一样?,当一道流光划过后,和平常不一样的世界在何小兵面前徐徐展开。都市超能类,主角不会一出来就无限装逼打脸,等级慢慢升,实力慢慢提高,但也不会被踩,慢热都市文(提示前方高能,吊丝必看-,-本人第一本书请相信我会写的越来越好,漏洞什么的后期后修改的,请大家积极指出不足,本人一定会改,求支持)
  • 传奇猎魔人

    传奇猎魔人

    老者吁了口气,轻轻地合上了手中的古书,侧身拍了拍身边小女孩的脑袋。“马斯爷爷,这就结束了吗?”小女孩扬起稚嫩的小脸,眼中带着点点泪花,“猎魔人不会死的,对不对?”“当然了,我亲爱的阿妮雅……”老者慈祥的面容上露出缅怀的神色。“记住,猎魔人的传奇,永不完结。”这是一个猎魔人玩家穿越到游戏世界,书写属于自己传奇的故事。