软件工程教案(张海潘版本)1_张海潘软件工程答案
软件工程教案(张海潘版本)1由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“张海潘软件工程答案”。
软件工程是个什么概念呢?
软件工程它不是一个完全计算机的概念,它实际上是一种管理的概念,就是怎么样用一种工程化的方法或者现代的管理去管理计算机软件开发的过程,它是这么一个基本概念。那么在这个基本概念的前提就是,现代的软件开发过程和传统的许多工业生产过程是有着巨大差异的。我们知道传统工业包括传统的制造业,传统的农业等等。他在生产的过程中有一系列管理的方法,包括物料,包括一些生产过程控制等等。
那么计算机软件呢,有它一些特有的方法,随着人们在计算机软件开发过程中碰到的各种问题以及后来慢慢提出的一些观点,形成了软件工程。所以说软件工程更该是更偏向于管理,更偏向于认知科学的一门学科,不完全是计算机软件里面的东西。
当然,一般来说对于软件工程学科门类的划分,是划分在计算机软件门类里面。通常来说,计算机现在划分为五大门类。一个是计算机软件,一个是计算机理论,一个是计算机体系结构,一个是计算机硬件,最后一个计算机的应用。
那么计算机软件里面它主要包括程序设计语言,数据结构,人机交互,程序设计方法论,和软件工程。那目前来说,我们看到从软件学科来说,程序设计语言,他的发展不是特别快,我们看到这几年每年出的新语言比较少,不外乎就是Java, sishop还具有一定的活力,那么 早期的语言如C++,再早的像C语言,已经是很多年没有什么变化了。
数据结构也基本上被研究的比较透彻了,链表啊,二参数啊,甚至把它发展到数据库的一些应用里面。
人机交互目前来说还是有一定潜力的。它包括怎么样让人和计算机有一些交互性,这种交互性怎么样能够让用户能够方便的使用,比如怎么样调这个颜色,怎么调键盘和鼠标输入的方式,让人能非常方便的接受它,这是人机交互这门课程他要讲的内容。
程序设计方法论讲的是程序设计过程中你怎么样要遵循一些规则,怎么样写程序,程序的风格是什么样的,变量是怎么取名的,程序是怎样调试的等等。
这几个都是软件领域里面的一部分。其中软件工程是现在最为瞩目,也是目前造就了国内教育部直属的3,4十所软件学院他的一个主要专业。为什么会提出软件学院,当然目前来说这个情况和当时是稍有差异的。在五年前,提出软件学院或者软件工程专业的主要目的是因为国内对于软件开发,他的这个管理水平远远低于国外的,但是中国在软件开发技术,包括编程语言,编程技巧这样的高手也不少,但是为什么国内的软件在国际上打不响。结果很多专家就认为软件人才匮乏,应该用一种非常的手段对某个专业的人员密集培养,突然之间大规模的从大学里面培养一批能够做软件工程的人员,不仅要会技术,而且还要会管理。目前来说软件学院国家办了35所,各个省也相应在办软件学院。软件学院和计算机学院可能是一起的,也可能不是一起的,但是软件学院肯定会有一个软件工程专业,它源于:软件发展到现在,靠单兵作战是不行的,当多个人在合作过程当中怎么样有效的进行管理,怎么样对企业的一些成果进行积累,这都是从软件工程角度上仔细地进行管理。所以目前来说 软件工程是在计算机软件学科里面是比较活跃的,同时这门课也是比较难教的。有很多这种经验公式,经验公式没有很科学的依据,还有为什么能推导出这个软件的复杂度,为什么这个函数带得子函数不能太多,太少了你要说出个理由来,有一些科学依据软件工程上不是特别多,它是一些先验性的经验总结,所以各种软件工程的课本和书籍都有所不同。
当然在软件工程门类讲得比较多,写得比较有趣的是:人月神话。多少人多少月,这是由老外写的一本书,这本书有中文版,讲起来像讲故事一样。
当然我们这本课程会把软件工程它的整个学科和目前的一些发展作一些介绍,但是每一项都不会特别的深入。
大概要讲得内容是第二到第八章一般来说成为传统的结构化的软件工程,9 10 11 12介绍的是面向对象的软件工程,面向对象的软件工程和传统的结构化的软件工程是相辅相成的,并没有说面向对象的软件工程就高级一些,也不是说传统的结构化的软件工程就低级一些,都有在使用,而且也不能认为某一个就能代替另外一种,通常来说在大学里面或软件工程专业里面这门课是一门基础课,其中有一门课专门讲可行性,另外还有一门课讲需求分析,总体设计和详细设计往往会合成一门课来上,分在软件设计里面,另外测试也是独立一门课程,然后面向对象的方法论,面向对象分析OOA,面向对象设计OOD一般会合在一起上称为OOAD,我们这门课程只是入门的一门课程,如果大家有兴趣,对里面的章节要进一步了解的话,可以去阅读一些相关的资料和教材。由于我们是工业工程专业,不是软件工程专业,并不会对每个章节进行展开。
那么既然软件工程能被提高到一个学院,或者一个国家要大力发展的一个高度。那肯定有它产生发展的原因。我们说它产生发展的原因主要来自于软件危机。
软件危机它是在上个世纪70年代之后人们逐渐发现,在软件开发过程中,传统的认为软件开发嘛不就是和根传统的工业化设计一样的,我开发一个软件和制造一个玩具有什么区别呢?随着人们软件行业的发展,确实发现是有区别的。软件行业的产生本来就比较晚,何况早期的计算机行业只有计算机业,像IBM等公司生产 设计等大型计算机,然后就卖掉。卖的时候就会发现它的客户往往对它的计算机有这样那样的要求,所以他们这些企业往往会和软件部门给客户定制一些软件,后来他们就发现原来给客户定制软件这个过程,有吃力不讨好的过程。客户要求很多,而且还会经常变化,另外软件又看不见摸不着,不就是做在软盘里面被人考走吗,那么软件到底能不能赚钱呢,由此人们越来越觉得软件业是一个越做越赔钱,就是说软件不是以行业,世界上没有人相信软件可以赚钱。到60年代时,人们逐渐发现我也投入了相当多的人力和成本来开发的,为什么就不能把它作为有价值,所以开始了软件的交易,就是把你的软件和我的软件来进行交换。IBM公司开始发现,他的计算机卖给某些用户的时候,用户要求拥有的软件功能和可能卖的另外一台软件的功能差异太大,既然差异太大,那么成本也就有差异。但是当时的人们又不能接受,这软盘考过来的东西能卖钱。后来IBM公司向社会宣布,以后IBM的所有硬件和软件要分开估价,软件要正式卖钱。随着IBM这些主流的计算机硬件厂家的推进,软件逐渐逐渐变成了钱,变成了有价值的东西。70年代初有了软件行业。早期的软件开发需要一年两年,现在开发大部分需要几周。以前叫人月,12个人月,12个人干一个月,或者1个人干12个月。现在叫人周,要大概5个人2周,是个人干一周,所以现在开发软件以星期为基本的度量。软件开发的效率是提升了。但是人们发现软件开发和传统的生产过程有巨大的差异,以至于人们对软件行业产生一些恐惧。人们称为软件危机。软件危机主要表现在:
1. 不准确。比如说我们要生产一个玩具,那么这个玩具可能需要多少时间,多少物料,是可以预计的。软件这东西是不可预计的,开发成本可能很高也可能很低。为什么会出现这种情况能?你比如说医疗管理系统,门诊的管理,挂号,药品,划价,收款等等,有可能还包括住院系统,药房的药品管理系统,那么这个软件开发的成本可能是零成本,为什么呢?因为我给第一医院做的,那么第二医院做的时候把他稍微改一改,或者根本不用改。这种开发成本也可能会很大,原因可能有各种因素引起,如发票格式不一样,连的网络不一样,导致要重新开发软件,甚至他的业务流程都不一样,如他不需要挂号的,可能在医生看完病,在买药的时候顺便付挂号费,如果出现这些情况的时候,那么这个软件开发成本是需要重新评估。
另外软件开发进度也往往是不准确的。估计开发进度的往往是项目管理人员,项目管理人员想如果我去干,有五个星期就干完了。关键是有没有三个我呢?没有。下面的员工不一定像你那样干,第二,下面的员工可能出现一些编程问题,他过不去,没办法继续往下进行;另外更神奇的情况,软件企业里面跳槽的人来说,三天两头的再跳,一般大学毕业以后两年肯定有人会跳一次,几年之内跳几次的人比比皆是,为什么呢?软件行业互相挖墙脚的情况。结果碰巧有人跳走了,你这个软件进度怎么办,所以说软件进度的受限很多,还可能会有意外的情况发生,比如说某个程序员生病了,出交通意外了等等,软件开发过程中不像传统的一些行业,有人生病了,可以较其他人顶,可替换性强。在软件开发过程中,软件开发人员可替换性不强,你要把一个人随便换掉,通常来说要有一个磨合期,新手要有一个接手,上路的过程,接手的过程往往需要两三个月,一个月肯定是不行,两个月是可能的,三个月是应该的,如果他完全工作比较多,或者比较专业,六个月都是正常的。这也是在软件企业里面,许多老总都会说办这个软件公司,我不就是给这个员工打工吗?成天想的是怎样把这个员工给养活了。所以这也是软件危机里面基本的表现,他投入的成本比较多。软件企业的人员工资是比较高的。软件危机从它的诞生到现在,还是有一些发展趋势的,至少目前软件自动化程度还是比较高的,以前是手工劳动,需要的人员的确比较高,目前随着高校的扩招,很多的专业,自动化,电器,都在向着方面靠。像现在找工作,计算机专业他未必能找到好的工作,不是人员过剩,还是高水平的一些程序员,或者说有软件工程概念的,有能够进行项目管理的人还是比较欠缺的。传统的软件共有各种定义:不管是啊一种定义,它基本上都透漏出一个观点:软件工程它是一系列的措施和,让软件发开这种特殊的生产形式规范化。
通常在软件工程里面把软件的生命周期划分为:定义阶段,开发阶段,维护阶段。
定义阶段通常来说只是计划,可以细分为:问题定义,可行性分析,这个项目到底是做还是不做,值不值得做。需求分析等于是项目启动的标记。
第二阶段是开发阶段,一般在需求分析之后可以进行,需求分析通常是跨两个阶段的,有些时候把它划在定义阶段,分清问题的定义;有时候把它归在开发阶段,这样定义阶段只是做个计划,一旦这个计划通过了,这个项目就启动了。需求分析等于是项目启动的标记。需求分析之后就进行概要设计,详细设计,这些都称为软件设计。设计之后再编码,所以在软件工程里面他要求的是先有文档,再写代码。最好是以后代码也不用写了,只要有一个文档,计算机就会把代码写出来,也不用测试了,它已经帮你搞好了,这种工具目前还比较少。但是至少目前来说,自动化工具已经覆盖了测试,现在已经很少有人写大规模的测试软件。因为都有现成的测试工具,不过测试里面的案例库还是要自己写,但大部分测试的软件如果有明确的测试流程,计算机都可以帮你来写。
以前的测试都需要高水平的程序员来写,现在的测试都是进了企业之后第一步就是让你做测试,为什么呢?通过让你做测试,你这个员工的技术能力到底怎么样,有没有水平,能不能跟得上企业的运作,所以很多企业招一些实习生,或者在实习期间会把一些员工先安排在测试部门,如果安排在开发组,万一你出什么问题,通过测试可以了解到看你到底适合什么样的岗位。目前来说企业里面很重视测试,但实际上不需要投入大量的人力,以前是由于没有自动化测试工具,所以工作量比较大。测试完成就可以把软件成交,成交之后就开始进入软件运行和维护阶段。这就是软件生命周期,它的周期时间比较长,所以现在的面向对象软件工程称生命周期的方法称为传统的软件工程,我们有时候称它为结构化的软件工程。在可行性分析里面,会经常使用到许多工具。软件公司开发的软件漏洞比较少的时候就迫不及待的推向市场,它要首先占领市场。所以我们看到许多软件能够做在线的升级,就是因为如果没有在线升级的话,这个软件怎么补补丁呢?必须要留有后门,留有给自己做维护的方式。
那么在可行性分析报告里面用得比较多的是系统流程图。系统流程图反映的是信息在各个部分之间流动的情况。就是我这个数据怎么样进来,怎么样经过,怎么样处理,怎么样加工,完成什么样的情况。所以系统流程图它和程序流程图是不一样的。系统流程图是给用户能看得明白,它是面向用户而不是面向程序的,它只是把现有的工作流程描述出来。
比如说,事物,来了一个事物之后,根据事务的不同,它要对库存清单的程序进行操作,那库存清单的程序会写数据库文件,库存清单主文件,同时会生成一个定货信息,根据订货信息产生一个报告,由订货生成报告产生订货报告。
所以作为可行性分析它的对于系统流程图的使用是比较的粗线条的,因为系统流程图主要在研究,给出用户级别的,如果将来大家要做ERP,就会涉及到对系统流程图进行修改,而我们现在讲软件工程,系统流程图是一个现在已经存在的模式,对这种系统模式是不修改的,我们只是想用软件把这种模式实现。ERP是,如果作企业资源计划,就会怎么样判定一个系统流程是合理的,是最优的,怎么样进行优化。同样是系统流程图,不同的课程作用是不一样的。
在可行性分析里面还会用到一个最重要的概念,数据流图。这个数据流图可以说是整个软件工程里面最核心的概念。不仅仅用于传统结构化的软件工程,还用于现在的面向对象的软件工程,也在大量的使用数据流图。
数据流的基本符号。
通常来说数据流图为了他的清晰起见,可以采用层次的结构来描述,会有顶层的数据流图,把顶层的数据流图逐层逐层的分解,分解到更细,所以不同的层次看到不同的情况。最顶层的类似于设计,最底层类似于实现,在企业里面通常作顶层数据流图的是技术部门经理,中间环节项目开发组的组长,最底层由程序员来完成。
前面我们讲了可行性分析过程中它是利用企业里面各个部门的人员,然后在一定时间内对项目进行评估,认为这个项目是可行还是不可行,如果可行的话,大概有哪几种解决方法,大概的进度计划是怎么样的,数据流图是怎么样的,它的盈利模式等等,作为可行性分析最终的结果会报告给企业的决策层,到底是做还是不做。一旦确定就有两种情况,不做,到此为止,或者是往后延,那么可行性分析小组马上就地解散,或者有一个人继续跟踪这个项目。当然有一些企业有比较大的规模,有一些战略部门的话,专做一些可行性研究的时候争取调查。如果要做这个项目,是不是马上要动用各种人力去开始写程序呢?不是。从软件工程角度上看,一个项目如果已经开始启动,那么需要的是给这个项目进行分析。确定这个项目启动了,这是项目要从零开始,之前的可行性分析只能作为一个参考。你光看可行性分析里面有一些数据流图,准确吗?通常是不准确的。原因在于可行性分析的时间太短了,很多的内容只能是粗略的估计,所以在这个过程中启动项目的第一过程就是要进行需求分析。
需求分析主要的任务就是:确定对系统的综合要求;分析系统的数据要求;导出系统的逻辑模型;修正系统的开发计划。
那它的系统功能要求是什么?
那么这么些的要求通常来说在软件公司是不能了解到的,所以需求分析的一个特点就是人要派出去,派到现场,派到具体要实施的这个软件项目的所在地进行调研,只有做了调研,你才能知道这个系统它的要求,周围环境如何,网络环境,它的计算机怎样,它的使用的用户有哪些,是什么一种类别,业务流程,甚至你可以把目标单位的一些单据,表单等等拿到。
所以需求分析重要的一点是选相应的人员去进驻一些企业。选什么样的人员呢?通常需求分析可以选两种人员,一种是做技术的,一种是做市场的。所以通常来说会从技术部门选几个人,从市场部门选几个人。为什么不全是技术部门的人去呢?因为技术部门人员的交流能力相对来说要比市场部门的人员要差得多。尤其是我们看到计算机专业人员,他跟别人谈,经常用计算机的专业术语来问,这时候市场人员在的时候它就会解释一下,这个一般纯技术人员是不擅长的。另外一个在需求分析过程中经常需要的是跟用户良好的交流,这交流可能包括跟用户交谈,座谈,调研,那么这个过程也是需要市场人员的参与。因此说一般由技术人员和市场人员同时参与,来进行一些需求的获取。
分析系统的数据要求,主要要建立系统的概念模型,E-R图和实体关系图;另外还有形象地描绘数据结构,包括层次方框图,Warnier土,IPO图。另外还要进行数据结构的规范。
因为需求分析的环节在整个软件工程里面可以认为是至关重要的。开头开得好不好,对整个项目的进行就看这个开头。
需求分析做完以后要写一个需求规格说明书,对后面的软件设计来说,一般认为需求规格说明书做完了,需求就到此为止,不再变化。作为设计人员,它是不到现场的,不和客户打交道的,设计人员如此,编程人员如此,测试人员如此。那么他们怎么知道用户那边的要求怎么样的,它就看需求规格说明书。所以说需求分析是在整个系统环节里面投入的时间,投入的人力都是最大的,那么通过作的需求分析,后面的人就把需求规格说明书作为依据做后续的设计,所以需求规格说明书一旦写了,就不能随意修改,一旦修改了需求分析,后面的总体设计要改,详细设计要改,程序要重新编,测试要重新做,维护人员也要重新写维护文档,这样的话代价太大了。因此在需求分析过程中必须要了解各种方面的信息,尽可能的了解完整。一般来说,一旦需求分析结束了,很少会再重新做,因为太复杂了。而且做需求不是说需求在哪你拿过来就可以了,而是需要你去挖掘它,需要交流,跟聊天的过程中慢慢了解到对方希望是什么样的,对方的数据结构里面是什么样的,很多认为当然的事情,由于行业的关系,你必须去深入地了解。这也就是需求分析为什么是专门的一门课程。
需求分析实际上就是你派出去几个人,那几个人带回来一个需求规格说明书,后面的所有设计人员只要有问题它就要去看需求规格说明书,说明书里面应该能把它所有要求的问题回答完。这也就是需求称为分析,后面的过程称为设计,换言之,再做需求之前你的目标是不明确的,是模糊的,这个软件大概是什么样的。分析的透不透彻,显示出分析人员它的技术水平,当然设计人员能够把你分析的结果最终能实现,所以说设计人员是偏技术的工作,需求分析人员包括管理,市场,技术,分析调查的综合性的工作。许多企业里面它的需求分析会选一些精干的人来做。怎么样让对方回答我的问题又不会让人很烦,这是需要技巧的。
导出逻辑模型。
需求分析过程是一个比较细致的工作,可能跟原来的粗略的可行性计划有差异,这时候可能要重新估算,重新估算软件开发进度。需求分析最终能确定这个软件规模如何,难度和计划进度如何等等,如果修正的数量和原来差异很大要及时汇报,要求重新评估原来的可行性分析。实际上‘需求分析的任务’就是借助当前的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么“的问题。
如果这个系统原来有一个相似的系统,现在想开发一个新软件。用户单位正在使用,原来系统模型化,确认原来是怎么做的,抽象出逻辑模型,做什么,然后通过理解这个用户对于系统的使用过程,以及他希望的一些内容,导出新的系统的逻辑模型和物理模型,最终目标系统。在这个过程中,用户是非常难以提出专业性的语言,想怎么样做这个东西,目标系统如何,用户可能说不清楚,那么你可以做一个仿真的原型系统,界面,风格,流程等等。
第一范式:数据是所有数据都会出现。
第二范式:有一些数据它是具有唯一性。比如说,学生的学号,只要学号不一样,是关键字,姓名一样,性别一样,出生日期一样,都是非关键字。
第三范式:比如非关键字有生日,年龄。
3.7 其他图形工具
在需求分析过程中会用到的其他的辅助工具。前面我们讲到了实体关系图来分析各个实体之间的关系,关系的属性,实体的属性,来了解涉及到的一些实体,然后使用数据流图来描述信息的流动过程,由于数据流图里面带有数据字典,可以描述数据流图里面的数据元素,传输的信息流的格式,信息流的内容。
前面我们讲了结构化软件设计的方法,还补充了关于人机交互界面设计的一些细节,通过这些内容我们可以看到原来在系统设计过程中需要了解数据库是怎么设计的,软件模块怎样划分的,对于我们后面的软件设计来说,还要做什么呢?我们说还要作详细设计。并不是说把软件设计到模块一级这个软件就结束了。而是必须要设计到每个模块它里面实施的细节,那一些语句怎么样去设计,那些语句怎么样实现功能,这个过程我们称作详细设计。详细设计的文档可能比你写的代码的长度还要长,但是详细设计是一个必不可少的环节。像中国很多企业作外包的,通常来说,外包拿过来的就是详细设计的说明书,然后你就要进行代码化,测试。
详细设计它是一个面向编程语言的设计,你拿到详细设计的人,他通常来说他看到的是模块和子模块。我们前面说了他的基本流程是:由项目经理做总体设计,然后总体设计分成几个大的子系统,每个子系统交给几个项目组的组长去设计,形成项目总体组,总体组设计完了之后,把项目进行分工,某一个项目小组作其中的哪两个模块,就项目小组长要完成的时候它会把这两个模块里面的子模块和函数分开给不同的设计人员来实现,作为详细设计的人员它是设计人员里面最底层的人员,他看不见整个系统的概况,他不知道这个项目是做什么的,甚至只知道他这个子系统要完成什么样的功能,他还知道他的子系统跟别人的数据接口是什么样的,这些都由总体设计组来定。他要完成一个模块和模块里面的子模块,或子模块到函数一级,函数到函数里面语句这一级,如果它是写程序的话,怎么样用程序设计语言来设计它。
当然详细设计要求的就是怎样用结构化的程序设计的方法来实现前面概要设计里面的某些功能,所以我们看到详细设计人员往往就是后面的编程人员,所以详细设计并不是很高深的东西。在详细设计过程中需要使用哪些结构化的方法呢,主要包括以下几种:
自顶向下逐步求精的方法,先粗后细,逐步完善。
同时这个结构设计具有单入口、单出口的控制结构,所以它没有GO TO语句。有五种基本的控制结构:
顺序结构:上一条语句执行完了执行下一条语句。选择结构:IF为条件,条件满足了,执行某一分支,条件不满足了,执行另一分支。
先判断循环结构:先判断某一条件是否满足,如果满足进行循环,循环一次之后再判断,再循环,一旦不满足条件,跳出去。后判断循环结构:先执行循环体一次然后判断,如果满足条件再执行循环体,否则的话跳出去。
多选择结构:选择的时候可以选择某个值,但某个值为1的时候做什么,为2的时候做什么,CASE结构。
这是在详细设计的里面必须遵循的结构,有些同学认为是不是还少了一种递归,不是的,递归程序在什么地方排除掉了呢?在概要设计里面其实已经被排除掉了,概要设计里面就认为软件的结构是层次的结构,调用关系都是从上往下调用哪里来的递归呢?所以递归程序一般在软件工程里面极少极少使用,除非是迫不得已才会在概要设计里面留下,在详细设计里面留下的都是更加详细的结构。
下面是关于在软件设计过程中用的比较多的内容,用户界面设计.那么用户界面设计通常来说会在几个地方出现:
一个是在需求分析里面,可能会在开发原型系统时候需要使用用户界面设计,你要给用户看你的原型系统,用户并不关系你的数据在什么地方存储的,加工过程你可能在原型系统里面也没有,用户看到的是模拟的人机交互界面,所以需求分析里面可能会出现用户界面设计。
同时在系统设计过程中也需要进行一个人机交互的设计,所以人机交互界面设计并不是属于计算机技术非常强的一个技术。但是他考虑到怎么样适合于用户来使用,所以在一些企业里面有一些开发人员专门作人机交互的。用户界面(GUI 图形用户界面)这些都是用户最看得见摸得着的东西,一个软件的质量好不好当然跟软件的设计有关,而一个软件是否被用户认为好不好,那是跟用户对软件的评价有关,如果软件质量没有问题,用户对软件的评价主要来源于用户设计,所以用户设计是非常重要的。
用户界面应具备的特性:
作为用户界面设计来说最重要的特征是可使用性,因为用户界面是给用户看的一个主要接口,所以用户对用户界面是否能接受,这是最重要的。
这里面涉及到一个问题就是使用是否简单,以及用户界面里面的术语是否是标准化或者是一致化的。在一个软件里面或有些地方称他为用户界面后来又冒出来了个人机交互,这是两个概念还是一个概念。当然我们看到给用户的使用说明书一定采用标准化的使用方式。
第三个要拥有Help的功能,当用户发现使用过程中有问题的时候,它能够看帮助,一个是离线帮助,一个是在线帮助。用户可以登上你得公司或企业的网站,找到企业网站维护人员进行沟通,或者用户干脆打你得客户服务电话,这种打电话的方式成本消耗比较大,所以很多地方会采用在线方式,就是在互联网上通过写字板,通过讨论区,通过论坛来回答用户提出的问题。
第四个是快速的系统响应,就是你这个软件是否响应快,同时你的软件要求的系统成本比较低,就是在比较差的计算机上你的软件要能跑起来。
第五个是用户界面应具有容错能力。你要求用户输入一个邮编,但如果用户不小心输入了ABC呢,你要告诉他输错了,重新输,你不能说点了一下软件就死掉了,重起计算机了,那这样的软件用户肯定是不敢用的。
灵活性: 首先一个是算法的可隐可显性。用户可以不关心你这里面数据是怎么处理的,但是你也可以通过某些方式让用户了解你的处理过程是在处理哪些数据。
第二个灵活性是用户可以根据需要制定和修改界面方式。那我们看到向一些电子邮件,像一些网站,它可以给你一些风格让你自己设计,甚至像一些聊天室你可以更该背景啊,自己做一些图标,等等。这样用户就会觉得不错,可定制性和个性比较突出。
第三个是能够按照用户的希望和需要,提供不同详细程度的系统响应信息。比如说用户在进行网络蚂蚁下载的时候,我可以看他每一个链接的情况,也可以看下载的速度,还可以看到有一个小图标在跑。用户他对这个事情的关心可能不一样。
第四个是与其他软件系统应有标准的界面(指接口)为使用户接口具有一定的灵活性,需要付出代价,而且有可能降低软件系统的运行效率。比如说你要设计CAD软件,那你必须要提供和ajs的接口,ajs是CAD软件的标准格式。比如说Word,它提供了rtf接口,rtf可以转化成其他格式。
复杂性和可靠性:用户界面的规模和组织的复杂程度就是界面的复杂性。通常认为界面可以越简单越好。但不是把所有功能和界面安排成线性序列就一定简单。用户界面的可靠性是指无故障使用的间隔时间。
用户界面设计的任务分析:
用户界面通常是和软件需求分析过程中同步进行的,你要知道用户界面是给用户用的,你回到软件公司让系统分析人员去做用户界面,他不知道用户有什么要求,只能去问需求分析人员他们对用户界面有什么要求,他们对计算机熟悉程度如何,他敲键盘快不快,他会不会输拼音,他会不会输五笔字型,他每秒钟能数多少个汉字,是10个汉字还是80个,我说双击鼠标他会不会两次很慢的单击,间隔时间很长,我能不能用鼠标右键加很多功能在里面,或者我能不能加很多热键,我的图标要设多大,如果用户是新手,我可能要设得比较大,如果是熟练人员,我可以全部设成菜单形式,或者快捷键形式。这些只能是需求分析人员所能回答的问题。
用户特征是详细了解用户技能和经验,用户有没有玩过计算机,如果用户只会玩QQ,MSN,玩游戏,那我们知道他们肯定鼠标很熟悉,能看懂一些提示,能进行一些中文输入。用户是否只在上班时间用计算机,还是偶尔用一下。或者说用户是不是残疾人,会不会要语音输入,要不要在评模旁边贴上一些简单的操作指南,你比如说一个图书馆的计算机借阅系统。由于图书馆的官员每天使用这个系统,因此他们使用系统的频率很高。他们以前可能没有使用过计算机,也没有人有自动化图书馆借阅系统和计算机系统的知识。他们的绝大多数的智力水平在中等以上。
比如说学生成绩提交系统,就不好用。一行敲完了以后,可以自动跳到下一行;或使用功能键就更好一些。
像Windows菜单都使用的这种子菜单的形式。像QQ用的就是浮动式菜单。对话框:必须回答式,像系统设了密码,你就必须回答。无需回答式,只是告诉你一个警告,你可以不必理睬他。警告式,和必须回答是有相似性,像针的要保存吗?会替换同名文件,还替换吗?
作为我们详细设计就要用这五种基本结构,五种程序设计方法来把前面这些模块、子模块;程序、子程序;函数实现。
任何复杂的程序流程图都应由以上五种基本结构组合而成。
它的一个特点是:容易掌握,且“历史悠久”,使用广泛。但缺点也很多,程序流程图它本质上不具备逐步求精的特点,对于提高大型系统的可理解性作用甚微,同时不太容易表示数据结构,你数据结构在数据流程图里面怎么表示我们看不到,只能看到程序流程图中控制流的结构,另外转移控制太方便。你随便画一条线指向另外一个地方,就算你转移出去了,所以写程序结构图随意性太大,正因为它随意性太大,现在用地越来越少,既然你要做详细设计,至少要把函数里的流程图画出来。图6.3是程序流程图的一些符号。
通过程序流程图我们可以看到下面几种形式,判定A:B有3种结果,A>B,A
盒图在详细设计里面一个非常重要的概念,它是用一种非常严谨的图形格式来表示。用矩形框来表示,每一个区域都是一个程序,第一个,顺序型A B,A再上面,B在下面,盒图的设计规则是从上往下执行,先执行A再执行B。
第二个选择型。当条件满足时执行THEN部分,不满足时执行ELSE部分。当ELSE部分没有呢,往下执行。
第三个WHILE循环。先判断再循环,条件满足了,再执行,然后再判断,再执行。这是一个循环。
第四个DO-UNTIL型。先执行再判断条件。直到条件不满足,否则一直在这循环。
盒图没有箭头,不允许随意转移控制。每个矩形框(CASE中条件取值例外)都是一个功能域(即一个特定结构的作用域),结构表示明确。局部及全局数据的作用域易见。易表示嵌套关系以及模块的层次结构。
花这个盒图占用空间大,所以又没有更方便,具有盒图相似功能的软件工具。下面我们看一下PAD图。
盒图是从上往下,PAD图它从左往右,同时具有从上往下两个功能。顺序型:它的基本书写方式是画一条竖线,这条竖线表示一个时间轴,P1 P2是从上往下写的,如果有嵌套的话语句是从左往右写的,跟盒图不一样,盒图如果有嵌套也写在里面。
第二选择型:写条竖线,C是个条件写在里面,这是个框,上面为真,下面为假,这是默认的。不像盒图里面要写T和F。
盒图可以转换成PAD图。
特点是:结构清晰,层次分明,通过竖线来完成,它不像盒图那样看上去眼花缭乱,线条没有盒图那么多,而且上下层次关系比较清晰,体现了逐步求精的设计思想,而且也比较容易把PAD图转换为高级语言的源程序,所以目前来说也是用得非常广泛的,许多企业里面它更加推荐使用PAD图。