软件开发系列软件开发系列软件开发概述——软件开发概述邵志东邵志东点击添加MSN机器人小新点击添加MSN机器人小新为您收听下载MSDN中文网络广播课程加油助力!收听本次课程需具备的条件收听本次课程需具备的条件•.NetFrameWork•VS.NET2005VS.NET2005•C#/VB.NETLevel300软件开发系列软件开发系列1.软件开发概述软件需求分析2.软件需求分析3软件系统设计3.软件系统设计4.软件编码软件编码5.软件测试6.产品化和规范化引子引子拿什么去就业?拿什么去就业?计算机专业大学毕业生的困惑计算机专业大学毕业生的困惑议程议程•你是一名合格的程序员吗?程序员基本素质•程序员基本素质关于项目和产品•关于项目和产品•软件开发流程•软件开发流程•质量标准和过程控制质量标准和过程控制•软件程序员职业发展软件程序员专业技能自检表基础项是否熟练掌握是否有项目经验是否列入学习计划基础项是否熟练掌握是否有项目经验是否列入学习计划操作系统Windows□□□Linux□□□Unix□□□其他请注明□□□SQLServer□□□ORACLE□□□数据库ORACLE□□□DB2□□□其他请注明□□□HTML语言□□□基础知识XML语言□□□数据结构常用算法□□□UML知识□□□开发语言和工具VC++□□□C++□□□VS.NET(VB.NET、C#等)□□□Java□□□Java□□□其他请注明□□□软件工程理论□□□质量体系和过程控制□□□软件过程软件设计□□□单元测试工具□□□软件加密□□□软件程序员岗位技能图基础技能流程相关项目组建设开发工具操作系统使用数据库使用软件工程理论质量体系编码规范源代码控制规范.NET或Java数据库使用Html网页知识质量体系源代码控制规范软件设计数据库设计规范或Java或C++XML单元测试工具公共组件或基类或嵌入式C软件加密方法源代码控制数据结构算法UML基础知识界面设计规范。。。源代码控制说明书编写UML基础知识程序的安装议程议程•你是一名合格的程序员吗?程序员基本素质•程序员基本素质关于项目和产品•关于项目和产品•软件开发流程•软件开发流程•质量标准和过程控制质量标准和过程控制•软件程序员职业发展程序员基本技能程序员基本技能项目实践专业技能程序员基本素质职业素质个人素质一个人素质一、个人素质•成己:积极的心态、良好的工作和生活态度度•待人:和谐的人际关系理事专业的做事精神•理事:专业的做事精神二职业素质二、职业素质•忠诚守信•守信•责任心责任心•敬业精神•自动自发三程序员的基本素质三、程序员的基本素质档的1.写文档和注释的习惯2模块复用性思维习惯2.模块复用性思维习惯3.测试习惯4.学习、总结的习惯5团队精神5.团队精神6.沟通能力1写文档和注释的习惯1.写文档和注释的习惯•注释•开发过程文档:良好的文档是正规研发流开发过程文档:良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多缺乏文档个软件系统例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。2复用性模块化思维能力2.复用性,模块化思维能力•软件最大的优点是能够复用,因此程序员在完成任何一个模块或函数的时候,不要在完成任何个模块或函数的时候不要局限在完成当前任务的上,要多想一些,想想看该模块是否可以脱离这个系统存在想想看该模块是否可以脱离这个系统存在,是否能够重复使用?用户控件•用户控件•组件技术组件技术3测试习惯3.测试习惯•单元测试•集成测试集成测试•系统测试•稳定性测试•稳定性测试•软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早解决的代价就越特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的进行认真的测试,就可以尽量将些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。4学习和总结的能力4.学习和总结的能力•学习:程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两落伍的职业,因为种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。就必须不断跟进新的技术,学习新的技能。•总结:善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,,每次完成个研发任务,完成段代码,都应当有目的的跟踪该程序的应用状况和用户反馈随时总结找到自己的不足这样户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。5团队精神5.团队精神桶论•木桶理论•学习性组织学习性组织6沟通能力6.沟通能力•在软件开发过程中,不仅程序员之间要进行交流合作,程序员和销售人员、测试人行交流合作程序员和销售人员测试人员等各个部门的人、甚至客户都要沟通交流。流。四项目实践四、项目实践软件程论•软件工程理论•质量体系:ISO9001和CMM体系•UML基本理论•测试理论和测试工具使用•测试理论和测试工具使用•加密理论和加密方法源代码控制具使用•源代码控制工具使用•说明书编写•程序的安装和部署高级程序员的基本素质高级程序员的基本素质求析能力1.需求分析能力2项目设计方法和流程处理能力2.项目设计方法和流程处理能力3.复用设计和模块化分解能力4.整体项目评估能力5团队组织管理能力5.团队组织管理能力1需求分析能力1.需求分析能力•需求分析是软件开发流程中非常重要的一个环节。对于研发项目的组织和管理者来个环节对于研发项目的织和管者来说,他们不但要理解客户需求,还要具备把用户需求转化为系统设计的能力。把用户需求转化为系统设计的能力。2系统设计能力2.系统设计能力•高级程序员者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计种的项目设计方法如自顶下的设计方法,比如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计据项目需求和资源搭配来选择合适的设计方法进行项目的整体设计。3模块分解能力3.模块分解能力•一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随意换装的,系统中不同的部件是可以随意换装的比如微软的许多桌面软件,在很多操作模块(如打开文件保存文件等等)都是复块(如打开文件,保存文件等等)都是复用的同一套功能模块,而这些接口又通过些类库提供给了桌面应用程序开发者方一些类库提供给了桌面应用程序开发者方便挂接,这就是复用化的模块设计明显的个佐一个佐证。4整体项目评估能力4.整体项目评估能力作为系统设计人员必须能够从全局出发•作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资置是否合和到位比如程进度资源配置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成估项整体和各个模块的按期完成。评估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界5项目组织能力5.项目组织能力包括作的量化和分配能力团队协调能•包括工作的量化和分配能力、团队协调能力。•没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算程序量化又不是简单的代码行数可以计算的,因此要求高级程序员能真正评估一个模块的复杂性和工作量。模块的复杂性和工作量。•项目组内程序员的水平是有差距的,同时用户需求又在不断变化高级程序员要有用户需求又在不断变化,高级程序员要有动态调整责权和成员工作状况的能力。议程议程•你是一名合格的程序员吗?程序员基本素质•程序员基本素质关于项目和产品•关于项目和产品•软件开发流程•软件开发流程•软件程序员职业发展软件程序员职业发展项目和产品项目和产品用户特点典型代表项目某个企事业单位需求来自于某个用户定制;多为一次性卖出某企业的内部办公系统用户某类企事需求来自无法为某个用户定制;可以重复复制Wid用产品某一类企事业单位需求来自于某类用户以重复复制销售,充分体现软件的特点Windows,用友财务软件特点基于项目的产品开发是指以某些同类的项目为基础,最终发展成为产品。这是所有软件厂商的目标发有软件厂商的目标。基于产品的项目开发是指以成熟产品为基础,针对某个有实力的用户进行个性化定制发定制。议程议程•你是一名合格的程序员吗?程序员基本素质•程序员基本素质关于项目和产品•关于项目和产品•软件开发流程•软件开发流程•质量标准和过程控制质量标准和过程控制•软件程序员职业发展项目开发工作流程项目开发工作流程个性化开发阶段软件维护阶段合同阶段个性化开发阶段标书分析软件维护阶段概要/详细设计方案书写软件安装用户培训概要/详细设计编码及文档合同签定用户培训单元测试项目结项、验收用户个性化需求规格书集成测试产品化用户测试产品化产品开发流程产品立项阶段产品开发阶段产品维护阶段产品市场调研产品维护概要/详细设计编码及文档产品立项申请产品个性化修改编码及文档单元测试产品立项申请系统测试集成测试产品需求分析产品化系统测试产品总体设计产品发行产品结项议程议程•你是一名合格的程序员吗?程序员基本素质•程序员基本素质关于项目和产品•关于项目和产品•软件开发流程•软件开发流程•质量标准和过程控制质量标准和过程控制•软件程序员职业发展质量标准和过程控制的作用作用说明1可控制按照质量标准,在软件开发过程的每个关键阶段,都需要进行讨论和评审,这样使得整个过程是可控制的,减低了软件开发的风险。2可追溯所有的质量文件都要求按照标准保存,这样即使项目过去了很长时间,都随时追溯查询原软件开发过程中2可追溯过去了很长时间,都随时追溯查询原软件开发过程中各个阶段的重要事件。软件企业是知识型的企业最大的成本就是人力成本3减低人员流动的危害软件企业是知识型的企业,最大的成本就是人力成本,最大的危害就是人员流动带来的知识的损害。有了质量控制,可以让知识和开发经验以文字的形式得以积累,降低了人员流动所带来的危害。累,降低了人员流动所带来的危害。专化象在现代社会,企业推行质量体系已经成为塑造企业专化象最重的国内很多企推行4专业化形象业化形象最重要的一环。国内很多企业推行ISO、CMM就是一个典型验证。他能做到什么和不能做到什么他能做到什么和不能做到什么当操作者有意识时标准可以帮忙假如•当操作者有意识时,标准可以帮忙。假如你没做产品立项,或者作了,但没有市场分析报告标准可以帮忙因为会来分析报告,标准可以帮忙,因为SQA会来说,这违背了规程,我们必须先做产品立项并须基市场分析报告项,并且必须基于市场分析报告。•但大家没有意识时,比如产品立项时,假但大家没有意识时,比如产品立项时,假如与会人员多数认为没有市场,或者我们没有能力去做这个产品,但最终仍然立项没有能力去做这个产品,但最终仍然立项通过,标准无能为力。如何应用标准?如何应用标准?标准的目的?•标准的目的?–可控制–可追溯•开发模板开发模板–用户需求规格说明书需求评审报告–需求评审报告–系统设计书系统开发进度计划–系统开发进度计划–项目验收标准–用户手册议程议程•你是一名合格的程序员吗?程序员基本素质•程序员基本素质关于项目和产品•关于项目和产品•软件开发流程•软件开发流程•质量标准和过程控制质量标准和过程控制•软件程序员职业发展软件企业的人才类型和素质结构关系管理素质管理素质高级综合人才高级管理人才领导能力人际沟通领导能力成本管理高级技术人才企业人才价值等高线计划管理过程管理高级技术人才风险管理计划管理时间管理技术素质分析技术架构技术编程技术测试技术设计技术初级工作者高级技术人才理想成长路径高级综合人才高级管理人才管理素质高级综合人才高级管理人才管理素质领导能力人际沟通领导能力成本管理分析员架构师计划管理过程管理高级技术人才645预备程序员高级程序员风险管理计划管理423中级程序员设计员时间管理分析技术架构技术编程技术测试技术设计技术初级工作者