信息系统项目管理师_2024年软考学习应考交流_信息系统项目管理师考试

 找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 21610|回复: 30
打印 上一主题 下一主题

实用软件工程方法入门--系分、软设、网工、信工、项管必读

    [复制链接]

该用户从未签到

升级  30.8%

跳转到指定楼层
楼主
发表于 2006-4-7 13:21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
软件工程学的背景和目的

计算机专业的学生在修完编程(Programming)等课程之后,对编写小型程序,例如,字符编辑程序或报表打印程序等,一定是很有把握了。但是,如果需要研制一个大型的软件系统,例如飞机订票系统或学校管理系统(包括教务、财务、人事、物资等各系科的全面管理),相信会遇到许多困难,因此还必须学习“软件工程学”。  

    “软件工程”(Software Engineering)是从“编程”演变过来的,后者一般考虑小型程序的编写,前者则考虑大型软件系统的研制。

    随着计算机的应用领域越来越广, 一些系统的软件规模都相当大,逻辑很复杂,而且功能上需要不断更改和扩充。

研制软件系统需要投入大量的人力和物力,但系统的质量却难以保证,也就是说,开发软件所需的高成本同产品的低质量之间有着尖锐的矛盾,这种现象就是所谓的“软件危机”( Software Crisis)。   

开发大型软件和编制小型程序之间的差别:以所需人力来看,小型程序从确定要求、编制、使用、直至修改往往是由同一个人完成的,因此只要他本人,心里明白程序的构思就够了,而大型系统则必须由许多人(包括用户、项目负责人、分析员,高初级程序员、资料员、操作员等)组成一支开发队伍来协同完成,所以人与人之间必须准确地进行协商讨论;另外,从产品使用情况来看,小型程序往往是“一次性”的,意即如果需要作较大的修改,人们通常宁可丢弃旧的程序而重新编写,但大型系统的开发耗费了大量的人力与物力,所以人们一般不会轻易将其抛弃,而总是在旧程序的基础上一改再改,希望延长它的使用期,因而是“多个版本”的。

大型软件开发的特点:由“多个人”来开发具有“多个版本”的程序。大型软件系统的开发提出了许多新的问题,诸如:如何将一个系统分解成若干个部分,以便各人分工开发;如何精确地说明每个部分的规格要求;怎样才能使软件产品易于修改维护;……。   
    传统的“编程”没有考虑这些问题。



1968年在北大西洋公约组织的学术会议上第一次提出了“软件工程”这个词,还提出了一些软件工程化的技术并进行了讨论。
   
    1971年IBM公司运用一些软件工程技术成功地研制了纽约时报情报库系统和空间实验室的飞行模拟系统。 尽管两个系统都很庞大,用户要求又有很多变化,并又减少了人力和削减了经费,但由于适当地采用了工程化的技术,还是按时、高质量地完成了,软件生产率比以前提高了一倍。

    事实说明用“工程化”的思想作指导,可以大大减少软件开发成本并提高软件质量。

    软件工程学研究的是:如何应用一些科学理论和工程上的技术来指导大型软件系统的开发。使其发展成一门严格的工程科学;
    软件工程学的最终目的是:以较低的成本研制具有较高质量的软件。


1.2软件和软件生命期模型


软件和软件生命期模型是软件工程学中两个重要的概念。
    软件的定义:软件是程序以及开发、使用和维护程序所需的所有文档。
    软件生命期:一个软件从被提出开始研制至软件最终被废弃不再使用为止的全过程,称为软件生命期。
    软件生命期模型:(由于其形状似多级瀑布,常称为“瀑布模型”)  
    该模型把软件生命期划分为可行性研究与计划、需求分析、设计、编程、测试、运行与维护等六个阶段,每个阶段都有明确的任务,并需产生一定规格的文档资料交付给下一阶段,下一阶段在上阶段交付的文档的基础上继续开展工作。
踩过的脚印
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 顶1 踩

该用户从未签到

升级  30.8%

沙发
 楼主| 发表于 2006-4-7 13:21:52 | 只看该作者
在图1.1生命期模型中,第一个阶段有时又称为计划期,中间四个阶段总称为开发期,最后一个阶段称为运行期。表 l.2概括地列出了每个阶段的基本任务、工作结果(即提交的文档)以及参加人员。


1.1   
阶段
基本任务
工作结果
参加者
计划期
可行性研究与计划
研究开发该项目的可行性
可行性研究报告
用户、高级程序员
开发期
需求分析
理解和表达用户的要求
需求说明书   
用户、商级程序员
   
建立系统的结构   
模块、数据说明书
用户、高级程序员  
   
编写程序
程序
高级程序员、初级程序员
   
发现错误和排除错误   
测试报告
另一独立的部门
运行期
运行与维护   
维护
改进的系统   
用户、高级程序员
?      可行性研究与计划阶段   
    可行性研究与计划阶段的基本任务:搞清问题的性质,确定系统的目标和规模,从技术、经济和社会因素等方面分析论证本软件项目的可行性,并最终产生一份可行性分析报告。  
    可行性研究的结果:使用部门负责人做出是否继续进行这项工程的决定的重要依据。   


?      需求分析和规格说明阶段(简称需求分析阶段)
    分析阶段的基本任务:理解用户的需求,并将用户的需求用书面形式表达出来。
    分析阶段产生的文档:需求规格说明书(简称需求说明书),它明确地描述了用户的要求。需求说明书是以后各阶段工作的基础。   
    ?      设计阶段
    设计阶段的基本任务:要在需求说明书的基础上建立软件系统的结构,包括数据结构和模块结构。
    设计阶段的内容:概要设计(或称为总体设计)和详细设计,前者主要考虑模块的分解,后者考虑每个模块内部的细节。            
    设计阶段产生的文档:模块说明书、数据库或文件结构说明等。


?      编程阶段   
    编程阶段的任务:按模块说明书的要求为每个模块编写程序。   
    ?      测试阶段   
    测试阶段的任务:发现并排除错误。
    测试通常又可分为模块测试、集成测试和系统测试等几步。   
    ?      运行与维护阶段  
    运行阶段与维护的任务:运行软件并对软件继续排错和修改扩充。   
    由此可见,作为一名称职的软件开发人员,光会编程是不够的,他还必须掌握分析、设计、测试等方法和工具,学会编写上述各种文档。


1.3 软件质量的评价


软件工程学的最终目标是获得高质量的软件,所以如何评价软件质量是一个重要的问题。以前,对小型程序,人们一般比较强调程序的正确性和效率,近年来随着软件规模的增大和复杂性的上升,对问题的看法已发生了变化。目前,软件质量的定义倾向于从可维护性、可靠性、可理解性和效率等方面对软件作较全面的评价。
    · 可维护性(Maintainability)   
    在软件运行期中,对软件所作的修改 、完善 和适应性修改,总称为维护,它涉及再分析、再设计、再编程、再测试等活动。   
    “可维护性”通常包括了“可读性”(Readability)、“可修改性”(Modifiability)、“可测试性”(Testability)等含义。为了使软件具有较好的可维护性,早在开发期的各个阶段就应采取一系列技术措施。这样做虽然开发期的工作量也许会大些,但考虑到维护工作在整个生命期中所占的比例(见图1.2),总的看来还是值得的。


· 可靠性(Reliability)     
    可靠性通常包括正确性和健壮性这两个相互补充的方面。
    ª 正确性是指软件系统本身没有错误,所以在预期的环境条件下能够正确地完成期望的功能,毋庸置疑,正确性对系统正常发挥作用是完全必要的。
    ª健壮性的含义是指:当系统万一遇到意外时(具体是什么意外,事先是很难预料的)能按某种预定的方式作出适当的处理。     
    ·  可理解性(Understandability)     
    可理解性通常是指简单性和清晰性,对于同一用户要求,解决的方案可以有多个,其中最简单、最清晰的方案往往被认为是最好的方案。

该用户从未签到

升级  30.8%

藤椅
 楼主| 发表于 2006-4-7 13:22:44 | 只看该作者
· 效率(Efficiency)     
    效率是指系统能否有效地使用计算机资源,如时间和空间等。     
    除了可维护性、可靠性、可理解性和效率之外,软件系统的许多其他性质也反映了软件的质量。图 1.3是Boehm提出的软件质量图。
综上所述,一个大型软件系统的质量应该从可维护性、可靠性、可理解性、效率等多个方面全面地进行评价。这些目标是既有联系又有矛盾的,例如可理解性是可维护性的必要前提,可维护性、可靠性同效率往往有抵触,效率中时间和空间两个因素又常常是冲突的。对于不同的软件系统,各个目标的重要程度是不同的、每个目标要求达到什么程度又受经费、时间等因素的限制。所以在开发具体软件系统的过程中,开发人员应该充分考虑各种不同的方案,在各种矛盾的目标之间作权衡,并在一定的限制条件下(经费、时间、可用的软硬件资源等)使可维护性、可靠性、可理解性和效率等性质最大限度地得到满足。      
    必须强调:为了保证软件质量,在软件开发过程的各个阶段,尤其是早在分析阶段和设计阶段,就应该采取多种有效的技术和一系列质量保证措施,精益求精、一丝不苟,绝对不能急于求成,也不能存有侥幸心理,开发过程中任一环节的疏忽,到后期都可能造成无法弥补的缺陷,甚至是终生遗憾。所以,“先苦后甜”、“先忧后乐”可以作为软件工作者的座右铭。



1.4 软件开发方法和软件自动工具



研究软件方法的目的:是使开发过程“纪律化”,就是寻找一些规范的“求解过程”,使开发工作能够有计划、有步骤地进行。
    研究软件工具的目的:是使开发过程“自动化”,就是使开发过程中的某些工作用计算机来完成或用计算机来辅助。方法和工具之间有着密切的联系。        
    ?      软件开发方法(Software Development Method)   
    软件方法就是指导研制软件的某种标准规程,它告诉人们,“什么时候做什么以及怎么做”。 一般说来,一个软件方法往往规定了:明确的工作步骤、具体的描述方式以及确定的评价标准。  
    · 明确的工作步骤  研制一个软件系统要考虑并解决许多问题,如果同时处理这些问题,我们将会束手无策,或者造成混乱。正确的方式是将这些问题分成先后次序,每一步集中精力解决一个问题。软件方法也提出了处理问题的基本步骤,这包括每一步的目的是什么,每一步产生什么工作结果,每一步需具备的条件以及要注意的问题等。   
    · 具体的描述方式 工程化生产必须强调文档化,即每人必须将每一步的工作结果以一定的书面形式记录下来,以保证开发人员之间有效地进行交流,也有利于维护工作的顺利进行,软件方法规定了描述软件产品的格式,这包括每一步应产生什么文档,文档中记录哪些内容,采用哪些图形、符号等。         



· 确定的评价标准 对于同一个问题,其解决方案往往不是唯一的,选取哪一个方案较好呢?有些软件方法提出了比较确定的评价标准,因而可以指导人们对各个具体方案进行评价,并从中选取一个较好的方案。   
在软件方法的指导和约束之下,面对错综复杂的问题,开发人员就可按统一的步骤、统一的描述方式,纪律化地开展工作,毫无疑问,这是“高产优质”的有力保证。      
?      软件自动工具(Automated tools)   
由于所需工作量极大,我们常称软件开发是“劳力密集”的工作。为提高生产率并保证质量,人们很自然地希望能够实现开发过程的自动化。
几十年来的实践已经证明,用计算机来完成数据处理工作是非常有效的。所以开发过程中不少机械性、规律性的工作可以用计算机来完成。  
软件工具就是指软件开发、维护和分析中使用的程序。



测试阶段有测试数据产生器、排错程序、跟踪程序以及静态分析工具和覆盖监视工具等。
近年来,人们又为设计阶段和分析阶段研制了一些工具,如SL/PSA、AIDES和SDL/PAD等系统。   
众多的软件工具组成了“工具箱”、在生命期的各个阶段人们可根据不同需要,从“工具箱”中选择合适的工具来使用,这就提高了生产率并改进了产品的质量。   
软件方法和软件工具之间有着密切的联系。方法是主导,工具则是辅助的,软件方法提出了明确的工作步骤的标准的文档格式,这是设计软件工具的基础,所以研究方法是研究工具的先导,而工具的实现又将促进方法的发展。



2.1可行性研究与计划阶段的基本概念
可行性研究与计划阶段,亦称计划时期。   
可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决。   
请注意,可行性研究的目的不是解决问题,而是研究在当前的具体条件下,开发新系统是否具备必要的资源和其它条件。为了达到这个目的,必须认真了解用户的要求及现实环境,探索若干种可供选择的主要解法,并对每种解法的可行性进行仔细论证。一般来说应从以下几个方面进行论证:
     ·  技术可行性:使用现有的技术能实现这个系统吗?
     ·  经济可行性:这个系统的经济效益能超过它的开发成本吗?
     ·  操作可行性:系统的操作方式在这个用户组织内行得通吗?

该用户从未签到

升级  30.8%

板凳
 楼主| 发表于 2006-4-7 13:23:25 | 只看该作者
详细内容请登陆ftp下载同名文件

该用户从未签到

升级  0%

报纸
发表于 2006-5-23 08:23:02 | 只看该作者
好 !怎么没人支持啊!

该用户从未签到

升级  0%

地板
发表于 2006-5-31 11:30:03 | 只看该作者
对没有学过软件工程的人,非常适合,但对我这种基础不扎实的,就更适合啦
  • TA的每日心情
    慵懒
    2014-11-5 09:39
  • 签到天数: 281 天

    [LV.8]以坛为家I

    7
    发表于 2006-6-2 11:31:17 | 只看该作者
    老大的这篇文章我还没有看过,不过从帖子中的内容看来,叙述的不够详细和准确,比如"软件生命期模型(由于其形状似多级瀑布,常称为瀑布模型”)  ",软件生命期模型有很多种,“瀑布模型”只是最常用的一种,也是使用最多的一种。(其他的模型还有:增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。)。

    软件开发方法:使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。通过使用成功的软件开发方法,在规定的投资和时间内,开发出符合用户需求的高质量的软件。软件开发方法是克服软件危机的重要方面之一,对软件工程及软件包产业的发展起了不可估量的作用。

    主要有:结构化方法,JACKSON方法,维也纳开发方法﹙VDM﹚,面向对象开发方法。现在主要使用的是结构化方法,面向对象开发方法。
    软件工程中还有很重要的一个组成就是各种图形。HIPO图,A-0图,DFD图,如果要很好的分析一个软件,必须比较熟练的掌握这些图的区别,联系和功能,具体的内容请参考软件工程的书籍,在此就不赘诉。

    该用户从未签到

    升级  40.5%

    8
    发表于 2006-6-15 15:20:17 | 只看该作者
    QUOTE:
    以下是引用bingosek在2006-5-27 18:45:18的发言:
    对于像我这种以建设基础网络为生的工程师来说,这个一遍很好的入门文章,感谢楼主。
    S:弱弱的问一句,anonymous用户在ftp上不能用亚,有什么办法


    ftp的 登陆需要账号和密码的

    该用户从未签到

    升级  10%

    9
    发表于 2007-1-12 22:52:46 | 只看该作者
    好专业

    该用户从未签到

    升级  70.8%

    10
    发表于 2008-1-8 19:55:49 | 只看该作者
    ftp的 登陆需要账号和密码的
    您需要登录后才可以回帖 登录 | 马上注册

    本版积分规则

    小黑屋|手机版|Archiver|信息系统项目管理师_软考交流平台. ( 鄂ICP备11002878号-1  公安备案号:42011102001150

    GMT+8, 2025-7-5 04:32

    Software by Discuz! X3.2

    © 2001-2013 SKIN BY DSVUE

    快速回复 返回顶部 返回列表