软件工程实践的八大常识

--- 本文摘选自《软件工程核心知识》下卷第1093页,文中所提页码都出自该著作。

常识” (Commonsense), 即多数人信以为真并自觉应用的知识, 受社会的普遍认同,反映当时社会的最一般观念。常识有“内心感官” 之称, 它如同外部感官(视、听、嗅、味和触) 一样, 能近乎“直觉” 和“本能” 地指导个体实践。概言之, 常识既是个体学习和实践的结晶, 又是个体学习和实践的法宝。

软件工程常识是软件实践者的法宝, 既包括一些已成功迁移至专业实践的生活常识, 又包括一些属于本领域独有的专业常识。本书一共阐述了55 项常识, 这些都是实践者最应掌握并自觉应用的核心知识。笔者从中归纳出最基本的八大常识, 列述如下。笔者认为, 这八大常识应当成为每一名专业实践者的“直觉” 或“本能”。

常识一:软件是一类人力、智力、知识和创造力密集的、充满“人性”的高复杂产品。

  • 大师FrederickBrooks (布鲁克斯) 就说过, 软件是一类创造性的知识密集型产品, 是人类迄今为止最复杂的制品[Bro86]。
  • 工程师的知识、创造力、技能和情感等因素共同造就了软件产品的“人性特征”, 表现为 产品具有强烈的“唯一性”, 而过程则表现出强烈的“不可重复性”。

常识二:没有普适的“万能”模型。(页162)

  • 软件工程法则、定律、技术和过程等都仅针对特定应用场景, 无法同等有效地应用于不同团队和项目。经实践和研究凝聚而成的行业相关标准也明显不具有普适性。

常识三:不存在“完美的”软件产品。

  • 业界著名专家NicholasZvegintzov 就说过, “软件永不完美, 也永不完整。”
  • 软件开发团队永远得不到准确而完整的需求(页192), 也永远得不到所谓最佳的设计方案(页322), 最终也得不到完美的软件产品。

常识四:软件产品必须满足用户的现实需要, 进而实现价值/成本比的最大化。

  • 软件是商品, 一切软件实践理所当然地应当考虑成本和价值ê, 力求最大化价值/成本比(页24)。软件的价值主要体现为功能和质量, 即满足用户的现实功能和质量需求的程度。软件的成本主要是指开发和维护成本。
  • 用户是软件产品的直接服务对象; 软件开发必须尽可能地满足用户的现实需要(页294)。注意, 并不是用户的所有需要都应得到满足。典型的, 所有不能为产品客户带来实质价值反馈的用户需要就不应得到满足。

常识五:人是软件实践的最重要因素。

  • 软件是人力、智力和知识密集型产品, 实践者不要幻想能够全自动地开发出软件产品。
  • 大型软件开发超出了单个工程师的脑力和能力范围, 必须依靠团队合力(页964)。诚如Tom DeMarco所言 “团队协作是推动平凡个体取得非凡成就的燃料” [DL99, 页178]。

常识六:以一种“足够简单”的方式, 完成软件实践。

  • 软件产品本身已然具有高复杂度, 切勿再在开发过程中增添不必要的过程复杂度。为此, 软件管理者和工程师都应当选用最简单而又有效的策略和技术。
  • 在保证设计方案适合于目标软件及其开发项目的前提之下, 尽可能地简化, 使之足够简单直接(页439)。类似的, 代码编写也应当简单明了(页513)。同时, 软件管理者应追求简单而有效的管理, 不要过度简化, 更不要复杂化(页769)。

常识七:阶段化开发。

  • 阶段化反映出“分而治之” 的传统智慧。
  • 软件生命期阶段化为三大主要阶段 开发、维护、演化(页88)。软件开发过程阶段化为四大主要阶段 需求工程、软件设计、构造和质量控制(包括测试和审查)(页94)。软件测试过程又阶段化为四大阶段 单元测试、集成测试、系统测试和验收测试(页591)。

常识八:将软件描述成文, 并存档。

  • 著名软件工程学者MichaelJackson 就说过, “描述是软件开发之核。”
  • 软件需求和设计方案都应当编写成具有合理结构的技术文档(页246)。同时, 软件过程必须成文, 并共享于团队(页891)。
  • 文档编写必须讲究文风, 合理安排文档组织结构, 帮助读者快速而有效地阅读(页1007)。以敷衍态度匆忙编写的技术文档必定是低质量的(页1006)。

软件工程实践的八大常识,布布扣,bubuko.com

时间: 2024-10-05 22:32:41

软件工程实践的八大常识的相关文章

软件工程实践感想

这学期学习了软件工程实践这门课,我觉得这是对上学期的软件工程课程学习的检验,上学期学习软件工程只是我们浅显的认识,相比之下,这学期就更加全面的说明了开发一个项目所需要的步骤以及开发项目过程中所需要注意的诸多细节.如果说上学期的课程注重理论基础的话,那么这学期的软工实践,顾名思义,就是侧重我们动手操作的能力. 学习了这门课程, 还有老师们的多元化教课,不但让我从理论上掌握软件工程,还有从不同的实例,让理论和实践得到了很好的结合.整一个学期下来,总的来说还是学到了很多东西的,有很多地方是值得肯定的,

软件工程实践

课程信息 参考教材 <构建之法>   作者:邹欣, 编辑:周筠 他山之石 北京航空航天大学    罗杰, 刘乾 东北师范大学          杨贵福 北京电子科技学院    娄嘉鹏 福大历届软工 2016软件工程 教师:张栋 助教:大史 排骨 对象:大三(上)学生 Loading... 2015软件工程 教师:张栋 助教:范飞龙 对象:大三(上)学生 课程:成绩计算原则 作业列表 作业序号 作业主题 优秀作业 助教点评/总结 作业1(个人) 课程预期.自我目标 + 调研移动平台开发环境的发展

【目标】我的软件工程实践项目

1.这次的软件工程实践项目是要我们开发移动应用的软件,而我本人对于Android较感兴趣,所以对到最后能学习到的能力的预期当然是: · 有能力独自开发能稳定运行功能简单的应用,比如教务处查成绩软件等: · 懂得如何团队协作,想要开发功能稳定,强大的软件,单干肯定不行,所以要积累团队协作的经验: · 当然,如果有能力,能顺便了解下IOS或微信的开发自然最好. 2.而对课程的期望:希望老师能先给我们规划好大概的学习方向,让我们知道从哪开始入手学习,学习哪个方向的知识,不至于走太多歪路.当然,学习过程

《软件工程实践导论》一读后感

<软件工程实践导论>这本书是清华大学出版社2005年出版的图书,作者为金尊和.之所以选择这本书作为本次作业选书,是因为一个学长手上刚好有这本书,而且也向我推荐这本书值得一看.但是书相对较厚,而且内容也并不简单,所以我只能算是浅尝辄止. 这本书前面部分就是软件工程的一些方法概念,以及各工程上的结合,对于代码实际设计和开发过程还是有很大的帮助,感觉很多东西在我们的大作业--<排课系统>里面有都有应用,所以给我的感觉就是和实际应用相互呼应,能用学以致用. 后面部分就是本书具有特色的东西,

软件工程实践记录p3(day7-9)

这三天的主要内容是模仿前6天的客户关系管理系统创建库存管理系统,大体框架和客户系统类似,增加了时间记录.根据数据生成excel文件,另对界面进行了美化. 增加时间相关代码 Date date = new Date(); DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String stocktime = format.format(date); item.setStocktime(stocktime);

个人作业——软件工程实践总结作业

一.回望暑假,展望未来 1)参加软工实践之前,我可能只是在C++方面,有能力完成一些编程题目:在参与课程的过程中,我主要拓展了Android开发方面的知识.不足方面,我认为在合理安排时间方面十分欠缺,几乎每次要交的内容,都是在截止日期前不久奋力完成. 2) 1.我在这门软件工程实践中,完成了1200行代码左右. 2.软件工程各次作业消耗时间 作业名称 时间 软件工程实践2017第一次作业 2小时 软件工程实践2017第二次作业 3天 结队项目--第一次作业 2-3天 团队第一次作业--团队展示

【软件工程实践 &#183; 团队项目】 第一次作业

[软件工程实践 · 团队项目] 第一次作业 队员姓名与学号(标记组长) 学号 姓名 20165211 丁奕(组长) 20165208 孔月 20165230 田坤烨 20165226 刘香杉 队名 快奶我一口 队员风采: 全军出击!!!! 团队的首次合照 团队的特色描述 我们敲认真! 原文地址:https://www.cnblogs.com/KY-high/p/9000409.html

软件工程实践----初步接触软件工程的总结

这学期的软件工程课即将结束,下面我就对本学期的软件工程课做一下基本的总结. 首先,这是我学期初在阅读了相关资料后提的一些问题:http://www.cnblogs.com/bsdbch/p/4027935.html 这些问题,有的在实际的课程实践中碰到了,因此得到了更深一步的了解.比如关于如何进行需求分析.产品定位,再比如如何控制代码的质量,如何架构整体框架从而让子函数.子类变得更小.但是也有些问题,由于我们的产品没有达到用那些高级方法的高度,所以没有过多的了解.比如关于程序模块间的耦合. 下面

软件工程实践小学期其一

从这周一至今,我们开始了软件工程小学期的实践. 首先一开始,老师让我们安装MyEclipse的软件,我就遇到了系统不兼容的问题. 然后在老师和同学的帮助下,利用双系统的虚拟机,成功运行了软件. 然后在编写程序的时候,遇到有显示出错的地方. 本来怎么都没办法解决的错误,在同学的指点下,保存一下文件就完美解决了. 总的来说,到目前为止的进度都很顺利,学到了很多有趣又有意义的东西??