2020/1/18计算机学院1•第一次变革,以狩猎为主的生活方式转换为以农业生产为主的生活方式,其标志是社会制度为领地制度;•第二次变革为工业时代的开始,蒸汽机的出现及其应用是该时期的重要标志;•第三次变革为后工业时代,又称为基于计算机的或基于信息的社会,信息技术的蓬勃发展是其主要的标志。•工程也由“小”到“大”,设计(实现)的过程也由个人为主转化为以团队为主,提倡团队精神•案例:转子加工出了废品→自动编程/刀刃轨迹可视化→Pro/E软件→工艺技术人员建模/计算机软件人员保证软件的功能→应用→推广2020/1/18计算机学院22020/1/18计算机学院3思考题:通过案例说明工程对社会环境的可能造成的负面影响2020/1/18计算机学院4第2章工程项目解决方案工程项目的开发过程1项目开发过程中的文档2案例介绍4有效沟通312020/1/18计算机学院5第一节工程项目的开发过程当前,各行各业几乎都是在市场经济的体制下,在同行业的激烈竞争环境中,为了自身的生存与发展需要,必须按照行业规范,不断创新和提高产品质量。彩电行业的竞争:四川长虹,辅业电池、空调手机行业:90年代“战国时期”:诺基亚、摩托罗拉、爱立信、索尼、LG、海信、波导、厦新...CPU:摩托罗拉\Zilog\Intel\Cyrix\AMDMC6800\MC68000;Z80\Z8000;8080\8086含方案年度月纵向项目经费来源本单位横向申报书主管部门组织提出项目构思研发计划编写代码技术文档撰写测试验收可行性分析招标书用户证明成果鉴定投标书中签合同需求确认测试试运行验收概要、详细设计编写代码报奖、评职称专业基础、技能、交叉学科能力需求采集沟通能力团队精神时间管理能力自学能力政策导向问题导向2020/1/18计算机学院7甲方(用户、客户、需方)乙方(项目承揽方、供方)项目可行性分析报告项目需求分析报告招标书需求规格说明书(时间关系粗略采集:客户的业务及目标)项目解决方案(投标书)合同拟定需求分析说明书(用户体验设计/细致采集客户的业务及目标)确认需求需求更新概要设计;详细设计;编码实现;软件测试;软件部署(发布与实施)。验收;软件维护。2020/1/18计算机学院9第一节工程项目的开发过程甲方:(用户、客户)乙方:(开发单位)项目可行性分析报告立项项目需求分析报告(招标书)项目解决方案(方案设计说明书)(投标书)(项目开发计划)这一工作完成的是否出色对获取客户合同以及能否成功完成项目的开发和产品的推广至关重要。1.工程项目开发的前期构思2020/1/18计算机学院10要明确甲方的需求。甲方的需求往往是潜在的,要使这种需求明确化,需要与甲方相关部门的关键人员进行反复的沟通,通过沟通明确甲方业务流程及实际需求,必要时乙方提出需求建议书,然后提供切实可行的项目解决方案。1.工程项目开发的前期软件需求包括三个不同的层次—业务需求、用户需求和功能需求—也包括非功能需求。业务需求反映了组织机构或客户对系统、产品高层次的目标要求。用户需求指用户使用产品必须要完成的任务。功能需求定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。非功能需求包括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性(可靠性、可维护性、可移植性等)。2020/1/18计算机学院111.1用户需求业务流程例子:2020/1/18计算机学院12•东方电气集团办公门户系统2020/1/18计算机学院13P37~39部门发文流程图对于我们所拿到的“项目需求分析报告”往往忽略了很多客户的隐形需求。一般而言包括:•维护需求•升级需求•易用性需求•性能需求2020/1/18计算机学院14现在客户也在不断成熟,以上需求会或多或少的提到,但是,请注意,很可能不够全面。所以我们需要认认真真的考虑一下,这些需求到底应该包含些什么。2020/1/18计算机学院15客户对维护的要求,一般至少包括这么几个:1.日志需求日志需求是和客户的隐性需求密切相关,并且几乎全部涉及的一种需求。例如:日志要记录维护信息和升级信息,日志还要简单明了,一看就知道写的什么意思,另外日志记录功能还不能对系统的性能有大的影响。2.故障定位的能力就是说,当系统出现问题时,客户希望系统能够通过某种方式迅速查明故障的原因,并找到解决或者规避的办法。3.日常维护通常包括软件和硬件的“健康检查”。4.故障报警当系统出现严重故障时,能够给出足够的信息,并触发故障处理流程。2020/1/18计算机学院16•维护需求一般来说,客户对升级的需求有这么几点:1.可控制的升级即检测是否可升级、是否执行升级、多个升级目标的选择、升级的计划任务等都是可以控制的,比如可以设定自动检测是否升级;设定自动升级到最高版本;设定执行升级必须为手工设置;设置手工升级时可以立即升级也可以指定计划任务时间等等。2.不影响业务的升级基本上客户都希望升级不要影响他们的正常业务。但是有些系统实在太老了,基于这种旧系统的再开发项目必然受限于原系统的升级方案。这时就考虑:(1)能不能通过升级,使系统以后升级不再影响业务;(2)如果不能,怎样使(本次)升级对业务的影响最小。2020/1/18计算机学院17•升级需求3.升级的简单性升级应该简单快捷,没有太多的参数需要配置,没有太多需要手工干预的步骤。4.升级的完整性尤其是对于分布式系统,升级时需要考虑各个部件之间版本的一致性。一个升级方案必须是完整的,不能在升级以后出现由于版本间不兼容的原因而导致系统无法工作。2020/1/18计算机学院18例子:一个简单的C/S系统,采用加密通道进行通讯,现在升级加密算法,该如何设计呢?假设是互联网应用,有上万个客户端,该如何设计呢?从这个例子可以看出,系统的设计,从一开始就必须考虑这些“隐性”需求,否则系统架构可能就要推翻重来。2020/1/18计算机学院19通常提到易用性,一般觉得无非是界面和帮助。没错,但是不全。让我们看几个例子,可以大概理解一下易用性是什么概念。2020/1/18计算机学院20•易用性需求在桌面系统的竞争中,专业而强大的Unix败给了经常被人批评的Windows。Windows安装、升级简单,安装新的软件也很简单,操作起来更是如此,直观的图形界面虽然设计和功能不太丰富和强大,但是相对于Unix必须先学习“文件系统”概念,再学习命令行而言,“树”的概念用户可以无师自通,拖拽更是命令行方式不可比拟。•同样是微软,VC语言乘微软之名,挟操作系统之利,语言和开发环境都不可谓不强大,但是结果怎样呢?多数人情愿用Java,微软更是不得不推出C#来与Java抗衡。•在中文输入法的竞争中,强大高效的笔画输入法败给了拼音输入法。现在拼音输入法大行其道,笔画输入几乎鲜有提起。2020/1/18计算机学院212020/1/18计算机学院22最主要的,是业务模型要和客户的一致。这个应该算是基础。业务模型代表着思维模式(比如输入法),也就是说,要从客户的角度来设计系统。操作应该照顾客户的习惯,尽可能的降低客户的学习成本。当然,前提是正确定位你的客户群。一般来言,易用性的需求还包括:1.常用的功能应该能够直接了当的访问如财务系统,不同的角色有不同的常用功能,系统应该设计为可以根据角色来打开不同的初始页面;2020/1/18计算机学院232.操作应该照顾客户的习惯可降低客户的学习成本。当然,前提是正确定位你的客户群。3.优雅还是用微软的VisualStudio做例子,编译错误可以直接通过双击跳转到源代码所在错误点,而不像Makefile那样只是生硬的输出文件和行号。打开一个巨大的文件,给出一个可度量的进度条,总比只显示一个沙漏要好吧?2020/1/18计算机学院24“优雅”=专业+体贴1.首先分清楚哪些部分各自有什么样的性能需求。用户参与的操作,性能要求通常高于其他操作。2.知道自己的“承受上限”。达到上限的时候,通过合理的方法让系统给予提示,而不是直接瘫痪。细节上包括:长时间运行要有提示;已输过的内容尽量不要再次输,必要时用下拉列表框来选;命令按钮要有悬停帮助信息;因权限或操作条件限制时,有关操作元素自动置“灰”或不可见;不离开编辑界面添加新内容时,可用鼠标也可用键盘定位至输入字段;不能输入不合理的日期;…2020/1/18计算机学院25•性能需求2020/1/18计算机学院26获取甲方合同其他的因素:乙方过去的业绩、主要人员的人格魅力等。对需求进行分析、总结和概括,提出准确可行的解决方案是非常重要的。因为只有这样才能明确用户项目的内容和目标,准确评估自己成本,提出一个确实可行的项目解决方案。完成了项目解决方案书后,根据实际需求和市场实际运作效果,我们一方面可以确定是开始进行项目产品预研发,或者根据新的客户需求完善本项目。所有这些取决于市场的反馈信息,根据不同的市场反馈做出不同的开发计划,只有这样才能避免闭着眼睛走路,同时项目更有了明确的开发目标。一旦项目列入开发计划,我们就应该集中技术人员、成立项目组、确定项目负责人进行实质性的项目开发工作。2020/1/18计算机学院27另一方面,可根据用户的要求,草拟合同文本。•3种项目来源渠道,不同的立项、验收鉴定过程。政策导向:1.工程项目开发的前期要明确甲方的需求。通过沟通明确甲方业务流程及实际需求1.1用户需求软件需求包括三个不同的层次—业务需求、用户需求和功能需求—也包括非功能需求第一节工程项目的开发过程“项目需求分析报告”中的隐形需求。•维护需求日志需求/故障定位的能力/日常维护/故障报警•升级需求可控制/不影响业务/简单性/完整性•易用性需求业务模型要和客户的一致/优雅•性能需求下拉列表框/悬停帮助/置“灰”或不可见…2020/1/18计算机学院30业务需求例子:•昆明理工日常报账业务流程•东方电气集团办公门户系统的部门发文流程图对需求进行分析、总结和概括,明确用户项目的内容和目标,准确评估自己成本,提出一个确实可行的项目解决方案。获取甲方合同其他的因素:乙方过去的业绩、主要人员的人格魅力等。可根据用户的要求,草拟合同文本。计算机学院32第一节工程项目的开发过程2.工程项目开发期对于软件开发来说,此过程为一个将具体问题进行抽象和建模的过程,然后对模型进行可行性分析,得出结论。为下面的项目实现(编程、调试)做出充分准备。在获取客户合同后,即进入工程项目开发期。(如4+5+1方式,就可获取项目的首付款40%。)2.工程项目开发期2020/1/18计算机学院33同时,必须在此阶段对整个项目过程中的难点进行预测和估计,并能对可能发生的突发情况做出准备并提供相应的解决方法。总之,在此阶段必须对项目做好充分的准备,为项目的顺利进行提供保障。在项目实施过程中,所有的依据应该原于甲方的需求和当前技术允许范围。甲方的需求在目前阶段体现为前述的解决方案,而技术允许范围是指根据当前项目组的技术水平来估计项目组的技术能力,保证应用的方案必须是可行的。对于软件实现,主要包括以下几部分:系统结构设计(大体体现和概括了业务逻辑和业务流程)软件结构设计(软件的体系结构、性能分析、子系统划分等)软件模块划分、编写代码、软件模块集成、软件子系统集成、软件子系统测试、系统联调、软件系统整体测试、软件部署。以上各个步骤,为典型的软件设计过程。强调的一点是:软件实现过程越规范,效率和软件质量越高,项目可维护性就越好。2020/1/18计算机学院34•软件实现过程规范:企业化软件生产能力个人作坊式的软件生产软件生产的工业化一个软件公司,无论大小,只要是基于个人作坊式的生产,不要说骨干,甚至一个主要程序员突然离开,都可能会使整个项目拖延,严重的情况下甚至会使项目惨遭失败。2020/1/18计算机学院35许多用户在软件工程项目签约时,要求开发商提供主要工作人员名单和简历,并要求保证主要开发